@aeolus-fleet/console 0.30.1 → 0.31.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.
Files changed (185) hide show
  1. package/.next/standalone/packages/console/.next/BUILD_ID +1 -1
  2. package/.next/standalone/packages/console/.next/build-manifest.json +3 -3
  3. package/.next/standalone/packages/console/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page/server-reference-manifest.json +14 -14
  5. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page.js.nft.json +1 -1
  6. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page/server-reference-manifest.json +14 -14
  8. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page.js.nft.json +1 -1
  9. package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page/server-reference-manifest.json +14 -14
  11. package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page.js.nft.json +1 -1
  12. package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/packages/console/.next/server/app/(console)/labels/page/server-reference-manifest.json +14 -14
  14. package/.next/standalone/packages/console/.next/server/app/(console)/labels/page.js.nft.json +1 -1
  15. package/.next/standalone/packages/console/.next/server/app/(console)/labels/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page/server-reference-manifest.json +14 -14
  17. package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page.js.nft.json +1 -1
  18. package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page/server-reference-manifest.json +14 -14
  20. package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page.js.nft.json +1 -1
  21. package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/packages/console/.next/server/app/(console)/network/page/server-reference-manifest.json +14 -14
  23. package/.next/standalone/packages/console/.next/server/app/(console)/network/page.js.nft.json +1 -1
  24. package/.next/standalone/packages/console/.next/server/app/(console)/network/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/packages/console/.next/server/app/(console)/page/react-loadable-manifest.json +2 -2
  26. package/.next/standalone/packages/console/.next/server/app/(console)/page/server-reference-manifest.json +14 -14
  27. package/.next/standalone/packages/console/.next/server/app/(console)/page.js.nft.json +1 -1
  28. package/.next/standalone/packages/console/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/packages/console/.next/server/app/(console)/settings/page/server-reference-manifest.json +14 -14
  30. package/.next/standalone/packages/console/.next/server/app/(console)/settings/page.js.nft.json +1 -1
  31. package/.next/standalone/packages/console/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page/react-loadable-manifest.json +1 -1
  33. package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page/server-reference-manifest.json +14 -14
  34. package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page.js.nft.json +1 -1
  35. package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page/server-reference-manifest.json +14 -14
  37. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page.js.nft.json +1 -1
  38. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page/react-loadable-manifest.json +2 -2
  40. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page/server-reference-manifest.json +14 -14
  41. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page.js.nft.json +1 -1
  42. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page/react-loadable-manifest.json +2 -2
  44. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page/server-reference-manifest.json +14 -14
  45. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page.js.nft.json +1 -1
  46. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page/server-reference-manifest.json +14 -14
  48. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page.js.nft.json +1 -1
  49. package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page/server-reference-manifest.json +14 -14
  51. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page.js.nft.json +1 -1
  52. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page/server-reference-manifest.json +14 -14
  54. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page.js.nft.json +1 -1
  55. package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/packages/console/.next/server/app/_global-error.html +1 -1
  57. package/.next/standalone/packages/console/.next/server/app/_global-error.rsc +1 -1
  58. package/.next/standalone/packages/console/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  59. package/.next/standalone/packages/console/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  60. package/.next/standalone/packages/console/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  61. package/.next/standalone/packages/console/.next/server/app/_not-found/page.js.nft.json +1 -1
  62. package/.next/standalone/packages/console/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  63. package/.next/standalone/packages/console/.next/server/app/api/reads/[read]/route.js.nft.json +1 -1
  64. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/confirm/page.js.nft.json +1 -1
  65. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/confirm/page_client-reference-manifest.js +1 -1
  66. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/out/route.js.nft.json +1 -1
  67. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/refused/page.js.nft.json +1 -1
  68. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/refused/page_client-reference-manifest.js +1 -1
  69. package/.next/standalone/packages/console/.next/server/app/sign-in/argo/route.js.nft.json +1 -1
  70. package/.next/standalone/packages/console/.next/server/app/sign-in/failed/page.js.nft.json +1 -1
  71. package/.next/standalone/packages/console/.next/server/app/sign-in/failed/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/packages/console/.next/server/app/sign-in/no-rights/page.js.nft.json +1 -1
  73. package/.next/standalone/packages/console/.next/server/app/sign-in/no-rights/page_client-reference-manifest.js +1 -1
  74. package/.next/standalone/packages/console/.next/server/app/sign-in/nothing-to-manage/page.js.nft.json +1 -1
  75. package/.next/standalone/packages/console/.next/server/app/sign-in/nothing-to-manage/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/packages/console/.next/server/app/sign-in/page.js.nft.json +1 -1
  77. package/.next/standalone/packages/console/.next/server/app/sign-in/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/packages/console/.next/server/app/sign-in/unreachable/page.js.nft.json +1 -1
  79. package/.next/standalone/packages/console/.next/server/app/sign-in/unreachable/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/packages/console/.next/server/app/version/route.js.nft.json +1 -1
  81. package/.next/standalone/packages/console/.next/server/chunks/[root-of-the-server]__0-b_d8j._.js +1 -1
  82. package/.next/standalone/packages/console/.next/server/chunks/[root-of-the-server]__0w4s32w._.js +1 -1
  83. package/.next/standalone/packages/console/.next/server/chunks/[root-of-the-server]__1c0qgbj._.js +1 -1
  84. package/.next/standalone/packages/console/.next/server/chunks/_1uqphll._.js +1 -1
  85. package/.next/standalone/packages/console/.next/server/chunks/ssr/{_1ia6sfj._.js → _022r12n._.js} +1 -1
  86. package/.next/standalone/packages/console/.next/server/chunks/ssr/_02sf-6u._.js +1 -1
  87. package/.next/standalone/packages/console/.next/server/chunks/ssr/{_20ltycf._.js → _05noh6w._.js} +2 -2
  88. package/.next/standalone/packages/console/.next/server/chunks/ssr/_07_cqry._.js +1 -1
  89. package/.next/standalone/packages/console/.next/server/chunks/ssr/_0bdsmu0._.js +1 -1
  90. package/.next/standalone/packages/console/.next/server/chunks/ssr/{_18owi6c._.js → _0is0iyt._.js} +2 -2
  91. package/.next/standalone/packages/console/.next/server/chunks/ssr/_0j-afyt._.js +3 -0
  92. package/.next/standalone/packages/console/.next/server/chunks/ssr/_0nbjb5h._.js +1 -1
  93. package/.next/standalone/packages/console/.next/server/chunks/ssr/_0qux6-9._.js +1 -1
  94. package/.next/standalone/packages/console/.next/server/chunks/ssr/{_135805g._.js → _0sravq5._.js} +2 -2
  95. package/.next/standalone/packages/console/.next/server/chunks/ssr/_14ww2ld._.js +1 -1
  96. package/.next/standalone/packages/console/.next/server/chunks/ssr/_15whprd._.js +3 -0
  97. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1bc8get._.js +1 -1
  98. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1bmxy9n._.js +3 -0
  99. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1e2tdd6._.js +1 -1
  100. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1fthxzz._.js +3 -0
  101. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1hsu1v2._.js +1 -1
  102. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1u0h4gj._.js +1 -1
  103. package/.next/standalone/packages/console/.next/server/chunks/ssr/{_0h-jnay._.js → _1vleg6y._.js} +1 -1
  104. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1ymusis._.js +1 -1
  105. package/.next/standalone/packages/console/.next/server/chunks/ssr/_20j7vun._.js +1 -1
  106. package/.next/standalone/packages/console/.next/server/chunks/ssr/node_modules_zod_v4_classic_external_15fmmz3.js +1 -1
  107. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_03-f8b4._.js +1 -1
  108. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_10js6wa._.js +1 -1
  109. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_00qg_s6._.js +1 -1
  110. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_02v53na._.js +1 -1
  111. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_02wkudy._.js +1 -1
  112. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_04rox65._.js +1 -1
  113. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_05zitd2._.js +1 -1
  114. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_065nea1._.js +1 -1
  115. package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_1qi485p._.js → packages_console_0d8_fed._.js} +1 -1
  116. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_0h_376h._.js +1 -1
  117. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_0ko_ogs._.js +1 -1
  118. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_0sr2-oa._.js +1 -1
  119. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_0ysbad7._.js +1 -1
  120. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_108sez2._.js +1 -1
  121. package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_1k1crw1._.js → packages_console_11f_j7c._.js} +1 -1
  122. package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_1e33jj3._.js → packages_console_16ys_pd._.js} +1 -1
  123. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_1jy5-0g._.js +1 -1
  124. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_1n8w8x0._.js +1 -1
  125. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_1oz8iu7._.js +1 -1
  126. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_1rdu3gt._.js +1 -1
  127. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_1yfimad._.js +1 -1
  128. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_app_(console)_fleet-health_page_tsx_0vcosw1._.js +1 -1
  129. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_app_(console)_network_network-page_tsx_0qc3h-9._.js +1 -1
  130. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_app_(console)_ships_[shipId]_ship-page_tsx_0oahz0r._.js +1 -1
  131. package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_components_organisms_crew-line-dialog_tsx_11y3we6._.js → packages_console_components_organisms_crew-line-dialog_tsx_1l818ht._.js} +1 -1
  132. package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_features_ship_ui_organisms_message-sheet_tsx_08bg9ly._.js +1 -1
  133. package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_04jnwy5._.js → packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_06m8azk._.js} +1 -1
  134. package/.next/standalone/packages/console/.next/server/middleware-build-manifest.js +3 -3
  135. package/.next/standalone/packages/console/.next/server/pages/500.html +1 -1
  136. package/.next/standalone/packages/console/.next/server/server-reference-manifest.js +1 -1
  137. package/.next/standalone/packages/console/.next/server/server-reference-manifest.json +15 -15
  138. package/.next/standalone/packages/console/.next/static/chunks/0_3x64wrf-bcc.js +1 -0
  139. package/.next/standalone/packages/console/.next/static/chunks/{3v8kvo897cw7g.js → 0kcev3l5eyvux.js} +1 -1
  140. package/.next/standalone/packages/console/.next/static/chunks/{09i8egz-ukq1h.js → 19h1iu002omr_.js} +1 -1
  141. package/.next/standalone/packages/console/.next/static/chunks/{23rmynijvqsdw.js → 1b36z114mad41.js} +1 -1
  142. package/.next/standalone/packages/console/.next/static/chunks/1odi-st5n0w9h.js +1 -0
  143. package/.next/standalone/packages/console/.next/static/chunks/{1z-37z24uifp1.js → 1sm_yeexx288v.js} +1 -1
  144. package/.next/standalone/packages/console/.next/static/chunks/{26lqmfd6v4qb4.js → 1tjv8rgwrbbg_.js} +1 -1
  145. package/.next/standalone/packages/console/.next/static/chunks/{0tzezbiiera4t.js → 1u5mjrw1qk334.js} +1 -1
  146. package/.next/standalone/packages/console/.next/static/chunks/{1q730nbf90lr2.js → 1z1jqbwrruy4-.js} +1 -1
  147. package/.next/standalone/packages/console/.next/static/chunks/{180jsws8b9eq6.js → 1z9u9wh2b5l6y.js} +1 -1
  148. package/.next/standalone/packages/console/.next/static/chunks/21xp9ny7yw3ug.js +1 -0
  149. package/.next/standalone/packages/console/.next/static/chunks/{2pkfao79haew9.js → 24yl55yxkaeaf.js} +1 -1
  150. package/.next/standalone/packages/console/.next/static/chunks/27qi3k10y-0hf.js +2 -0
  151. package/.next/standalone/packages/console/.next/static/chunks/2_qyhoh1hlhcy.js +1 -0
  152. package/.next/standalone/packages/console/.next/static/chunks/{0742dltqxo7l5.js → 2bid6ecbjoe6s.js} +1 -1
  153. package/.next/standalone/packages/console/.next/static/chunks/{0b8-il10o0ca2.js → 2bqxl5_u1hjjb.js} +1 -1
  154. package/.next/standalone/packages/console/.next/static/chunks/2cfixbtwii9hq.js +1 -0
  155. package/.next/standalone/packages/console/.next/static/chunks/2dkqrqvxmerj9.css +3 -0
  156. package/.next/standalone/packages/console/.next/static/chunks/2ggf3qa9xixed.js +1 -0
  157. package/.next/standalone/packages/console/.next/static/chunks/{3dqw9msbsb0t0.js → 2h98d1zd2s_t5.js} +1 -1
  158. package/.next/standalone/packages/console/.next/static/chunks/{19p4i84gnm2q6.js → 2l01iyjlu686-.js} +1 -1
  159. package/.next/standalone/packages/console/.next/static/chunks/{0rynbs46ao8hb.js → 2qicmwwvgn33n.js} +1 -1
  160. package/.next/standalone/packages/console/.next/static/chunks/{0jy978bstmu2h.js → 2tl2a2wz8thbf.js} +1 -1
  161. package/.next/standalone/packages/console/.next/static/chunks/{06v0wink6h9wc.js → 2xwbclmo1ptlk.js} +1 -1
  162. package/.next/standalone/packages/console/.next/static/chunks/{2u9g6rfau6qkb.js → 3a0odbvtvug2f.js} +1 -1
  163. package/.next/standalone/packages/console/.next/static/chunks/3q-rob7jfhbps.js +1 -0
  164. package/.next/standalone/packages/console/.next/static/chunks/{12tpena_m0td3.js → 3rm6d-05q8id3.js} +1 -1
  165. package/.next/standalone/packages/console/.next/static/chunks/{14t6zl5-m6-cv.js → 3v5kypqchkulb.js} +1 -1
  166. package/.next/standalone/packages/console/.next/static/chunks/{0lerfeqv17y3h.js → 3wn51b0ga8x5c.js} +1 -1
  167. package/.next/standalone/packages/console/.next/static/chunks/{20zd_xtfl07ru.js → 3ydi8zqssypls.js} +1 -1
  168. package/.next/standalone/packages/console/package.json +3 -3
  169. package/package.json +3 -3
  170. package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console_features_trierarchs_ui_organisms_clear-worktree-dialog_tsx_1cj5i3d._.js +0 -3
  171. package/.next/standalone/packages/console/.next/server/chunks/ssr/_085nqa_._.js +0 -3
  172. package/.next/standalone/packages/console/.next/server/chunks/ssr/_0rdbxnq._.js +0 -3
  173. package/.next/standalone/packages/console/.next/server/chunks/ssr/_1lrul1q._.js +0 -3
  174. package/.next/standalone/packages/console/.next/static/chunks/046j0y9wgycm0.js +0 -1
  175. package/.next/standalone/packages/console/.next/static/chunks/0bnl87gj176h5.js +0 -1
  176. package/.next/standalone/packages/console/.next/static/chunks/0mcbp_1hunti9.js +0 -1
  177. package/.next/standalone/packages/console/.next/static/chunks/0ofpruu2tcm_6.js +0 -1
  178. package/.next/standalone/packages/console/.next/static/chunks/194ocbg7a-yfj.js +0 -2
  179. package/.next/standalone/packages/console/.next/static/chunks/2_x-45vq7prtl.js +0 -1
  180. package/.next/standalone/packages/console/.next/static/chunks/2tj5-rkl0ps53.js +0 -1
  181. package/.next/standalone/packages/console/.next/static/chunks/3m5g2od7yc5cq.js +0 -1
  182. package/.next/standalone/packages/console/.next/static/chunks/3pbm8tp2tq5mv.css +0 -3
  183. /package/.next/standalone/packages/console/.next/static/{FhQ486AZAouB_wqS1YEzn → M3UCCsD3-uSl8HVucbFrh}/_buildManifest.js +0 -0
  184. /package/.next/standalone/packages/console/.next/static/{FhQ486AZAouB_wqS1YEzn → M3UCCsD3-uSl8HVucbFrh}/_clientMiddlewareManifest.js +0 -0
  185. /package/.next/standalone/packages/console/.next/static/{FhQ486AZAouB_wqS1YEzn → M3UCCsD3-uSl8HVucbFrh}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[271915,a=>{"use strict";var b,c=a.i(187924),d=a.i(265913),e=a.i(50944),f=a.i(572131),g=a.i(88191),h=a.i(24173),i=a.i(240392),j=a.i(350808),k=a.i(139353),l=a.i(176166),m=a.i(945469);let n={argo:"You turn it on or off.",rules:"Applying rules turns it off; applying none turns it on again."};function o({rows:a,error:b,onRetry:d,isTurning:e,turnError:f,onViewerReadChange:g}){let h;return h=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the built-in rules",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the built-in rules"}):(0,c.jsx)("ul",{className:"flex flex-col divide-y divide-border",children:a.map(a=>(0,c.jsxs)("li",{"data-testid":"network-built-in-rule",className:"flex items-start justify-between gap-3 py-2 first:pt-0 last:pb-0",children:[(0,c.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,c.jsx)("span",{className:"text-body font-medium","data-testid":"network-built-in-rule-name",children:a.name}),(0,c.jsxs)("span",{className:"text-meta text-muted-foreground",children:[a.meaning," ","never"===a.turnedBy?null:n[a.turnedBy]]})]}),"argo"===a.turnedBy?(0,c.jsx)(m.Switch,{checked:a.isOn,disabled:e,"aria-label":`${a.name}: ${a.isOn?"on":"off"}`,"data-testid":"network-built-in-viewer-read",onCheckedChange:a=>{g(a)}}):(0,c.jsx)(l.Badge,{variant:"outline","data-testid":"network-built-in-rule-state",children:"never"===a.turnedBy?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(k.Lock,{"aria-hidden":!0}),"Never off"]}):a.isOn?"On":"Off"})]},a.key))}),(0,c.jsxs)("section",{"aria-labelledby":"network-built-in","data-testid":"network-built-in",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-built-in",className:"text-body font-semibold",children:"Built-in rules"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"The fleet’s own rules, beside yours and the declared ones. They hold before any rule below."}),h,void 0===f?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t turn the viewer reading",description:f})]})}var p=a.i(818783),q=a.i(793817),r=a.i(156757),s=a.i(902811);let t=r.z.enum(["messages:send","messages:receive","messages:force","messages:resend","fleet:read","fleet:commission","fleet:manage","crew:assign","crew:run","labels:define","labels:assign","fleet:network","fleet:on-behalf","fleet:person","fleet:owner","fleet:explain","fleet:connect","labels:any","fleet:verify","scopes:declare","scopes:grant"]),u=["messages","fleet","crew","labels","scopes"],v="[a-z][a-z0-9-]{0,31}";RegExp(`^${v}$`);let w=RegExp(`^${v}:${v}$`),x=r.z.string().regex(w,"A scope is <namespace>:<action>").refine(a=>{var b;return b=a.slice(0,a.indexOf(":")),!u.some(a=>a===b)||t.safeParse(a).success},"No such core scope");r.z.enum(["messages:resend","fleet:read","fleet:commission","fleet:manage","crew:assign","crew:run","labels:define","labels:assign","fleet:network","fleet:on-behalf","fleet:person","fleet:owner","fleet:explain","fleet:connect","labels:any","fleet:verify"]);let y=r.z.enum(["operator","agent","viewer","person","app","plugin"]);r.z.enum(["agent","person","app","plugin"]),r.z.enum(["DEVICE","CLOUD","SERVER","OTHER"]);let z=r.z.enum(["awaitingCrew","crewed","retired"]);r.z.enum(["ship","type"]),r.z.enum(["pending","received","handed","acknowledged","handled","notHandled","undeliverable","dismissed","abandoned"]),r.z.enum(["FleetInitialised","ShipCommissioned","OwnerSet","OwnerChanged","ShipClaimed","LeaseRevoked","CredentialRevoked","StartingPromptIssued","OperatorPasswordReset","OperatorLoginSet","MessageAccepted","LeasePushed","DeliveryReceived","DeliveryHanded","DeliveryAcknowledged","DeliveryHandled","DeliveryNotHandled","DeliveryOverdue","DeliveryUndeliverable","DeliveryReturned","ShipRetired","DeliveryAbandoned","DeliveryDismissed","ShipRenamed","ShipReported","StatementSet","TurnReported","SignInTicketIssued","FleetLimitsChanged","ViewerSessionStarted","CrewRequested","CrewRequestRemoved","CrewAssigned","CrewStatusChanged","CrewRequestExplained","CrewRequestGivenBack","LabelDefined","LabelValuesChanged","LabelRetired","LabelAssigned","LabelUnassigned","LabelDeleted","WorktreeClearRequested","WorktreeCleared","WorktreeClearRemoved","NetworkRulesSet","NetworkRulesDeclared","NetworkRulesDraftSaved","NetworkRulesDraftDiscarded","NetworkPluginRegistered","NetworkPluginUnregistered","BuiltInRuleChanged","ScopesDeclared","ScopesChanged","PluginConnected","PluginDisconnected","VerifiedFactsSet","VerifiedFactsRemoved"]);let A=r.z.string().min(1).max(128).brand();r.z.object({iss:r.z.string(),aud:(0,s.idSchema)("fleet"),sub:A,org:r.z.string().min(1),scope:r.z.string(),group:r.z.array(r.z.string()),person_ship:(0,s.idSchema)("ship").optional(),argo:r.z.boolean().optional(),iat:r.z.number(),exp:r.z.number()}).transform((a,b)=>{let c=a.scope.split(" ").filter(a=>""!==a),d=r.z.array(x).safeParse(c);return d.success?{issuer:a.iss,fleetId:a.aud,accountId:a.sub,organisationId:a.org,scopes:d.data,groupValues:a.group,personShipId:a.person_ship??null,isArgoAllowed:a.argo??!1,issuedAt:new Date(1e3*a.iat),endsAt:new Date(1e3*a.exp)}:(b.addIssue({code:"custom",message:"scope holds a malformed or unknown scope",path:["scope"]}),r.z.NEVER)}),new TextEncoder;let B=r.z.record(r.z.string(),r.z.json()),C=["crewing","running","restarting","crashed","releasing"],D=r.z.enum(C),E=["none","needsCrew","crewedByHand",...C],F=r.z.enum(E),G=`A reason is one line of at most ${String(200)} characters`;r.z.object({shipId:(0,s.idSchema)("ship"),settings:B}),r.z.object({settingsVersion:r.z.int().min(1)}),r.z.object({shipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.object({settingsVersion:r.z.int().min(1),requestedAt:r.z.iso.datetime(),assignedTo:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable(),status:D.nullable(),reason:r.z.string().nullable(),crewedBy:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable(),attempt:r.z.int().min(0),startedAt:r.z.iso.datetime().nullable(),givenBack:r.z.array(r.z.object({trierarch:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}),settingsVersion:r.z.int().min(1),reason:r.z.string(),givenBackAt:r.z.iso.datetime()}))}).extend({settings:B}),r.z.object({shipId:(0,s.idSchema)("ship"),trierarchShipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship"),status:D,attempt:r.z.int().min(0).optional(),startedAt:r.z.iso.datetime().nullable().optional()}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),settings:B,settingsVersion:r.z.int().min(1),requestedAt:r.z.iso.datetime(),status:D.nullable(),isFinal:r.z.boolean(),ownerShipId:(0,s.idSchema)("ship").nullable(),ownerName:r.z.string().nullable()})),r.z.object({shipId:(0,s.idSchema)("ship"),reason:r.z.string().trim().max(200,G).refine(a=>!/[\r\n]/.test(a),G).nullable()}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship"),settingsVersion:r.z.int().min(1),reason:r.z.string().trim().min(1,G).max(200,G).refine(a=>!/[\r\n]/.test(a),G)}),r.z.strictObject({});var H=a.i(77458);function I(a){return r.z.object({cursor:a.optional(),limit:r.z.int().min(1).max(H.PAGE_SIZE_MAX).optional()})}let J=r.z.string(),K=r.z.object({id:(0,s.idSchema)("labelValue"),value:r.z.string()}),L=r.z.object({labelId:(0,s.idSchema)("label"),key:r.z.string(),valueId:(0,s.idSchema)("labelValue"),value:r.z.string()}),M=r.z.enum(["console","claudeCode","codex","trierarch","plugin","other"]),N=r.z.object({query:r.z.string().optional(),name:r.z.string().optional(),status:r.z.array(z).optional(),type:r.z.array(r.z.string()).optional(),shipKind:r.z.array(y).optional(),crewRequest:r.z.array(F).optional(),assignedTo:r.z.array((0,s.idSchema)("ship")).optional(),needsCrew:r.z.enum(["withTrierarchs","withoutTrierarchs"]).optional(),valueIds:r.z.array((0,s.idSchema)("labelValue")).optional(),shipIds:r.z.array((0,s.idSchema)("ship")).optional(),kind:r.z.array(M).optional(),pluginShipIds:r.z.array((0,s.idSchema)("ship")).optional()});r.z.object({filter:N.optional()}).optional(),r.z.object({status:r.z.array(z).optional()}).optional(),r.z.array(r.z.string());let O=r.z.object({column:r.z.enum(["ship","status","report","runsOn","seen","requested"]),direction:r.z.enum(["ascending","descending"])}),P=r.z.object({isEmpty:r.z.boolean(),value:r.z.string(),name:r.z.string(),id:(0,s.idSchema)("ship")});I(r.z.string().max(4096).transform(function(a){try{let b=atob(a.replaceAll("-","+").replaceAll("_","/"));return JSON.parse(new TextDecoder().decode(Uint8Array.from(b,a=>a.charCodeAt(0))))}catch{return}}).pipe(P)).extend({...N.shape,sort:O.optional()}).optional(),r.z.object({key:J,values:r.z.array(J)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(K)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(J)}),r.z.object({values:r.z.array(K)}),r.z.object({labelId:(0,s.idSchema)("label")}),r.z.object({key:J,value:J}),r.z.object({labelId:(0,s.idSchema)("label"),valueId:(0,s.idSchema)("labelValue")}),r.z.object({shipId:(0,s.idSchema)("ship"),valueId:(0,s.idSchema)("labelValue")}),r.z.object({});let Q=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),id:(0,s.idSchema)("ship"),name:r.z.string()}),r.z.object({kind:r.z.literal("installation")})]),R=r.z.object({id:(0,s.idSchema)("label"),key:r.z.string(),values:r.z.array(K),owner:Q});r.z.array(R.extend({shipCount:r.z.int().min(0),values:r.z.array(K.extend({shipCount:r.z.int().min(0)}))}));let S=r.z.union([(0,s.idSchema)("labelValue"),r.z.object({labelId:(0,s.idSchema)("label"),value:r.z.enum(["*","#"])}),r.z.object({owner:r.z.union([(0,s.idSchema)("ship"),r.z.enum(["*","#"])])})]);function T(a){return"string"!=typeof a&&"owner"in a}let U=r.z.array(S),V=["send","read","manage"],W=r.z.object({verb:r.z.enum(V),from:U,to:U}),X=r.z.array(W).nullable();r.z.object({rules:X}),r.z.object({savedAgainstVersion:r.z.int().min(0)}),r.z.object({version:r.z.int().min(0)}),r.z.object({applied:r.z.object({rules:X,version:r.z.int().min(0)}),draft:r.z.object({rules:X,savedAt:r.z.iso.datetime(),savedAgainstVersion:r.z.int().min(0)}).nullable()}),r.z.object({});let Y=["argo","owner","answer","pluginRead","viewerRead","installation","open"];r.z.object({rule:r.z.enum(Y),isOn:r.z.boolean()});let Z=r.z.object({rule:r.z.enum(Y),isOn:r.z.boolean()});r.z.array(Z),r.z.object({version:r.z.int().min(0)}),r.z.object({rules:r.z.array(W)}),r.z.object({rules:r.z.int().min(0)});let $=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),shipId:(0,s.idSchema)("ship")}),r.z.object({kind:r.z.literal("installation")})]);r.z.array(r.z.object({declarer:$,rules:r.z.array(W)}));let _=r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string(),labels:r.z.array(L),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),aa=r.z.discriminatedUnion("kind",[_.extend({kind:r.z.literal("ship")}),r.z.object({kind:r.z.literal("account"),accountId:A,labels:r.z.array(L),personShip:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),r.z.object({kind:r.z.literal("installation")})]),ab=r.z.object({id:(0,s.idSchema)("reachRefusal"),at:r.z.iso.datetime(),sender:aa,askedBy:_.nullable(),recipient:r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),ship:_}),r.z.object({kind:r.z.literal("type"),type:r.z.string(),ships:r.z.array(_)})]),verb:r.z.enum(V),settingsVersion:r.z.int().min(1)});I((0,s.idSchema)("reachRefusal")),b=(0,s.idSchema)("reachRefusal"),r.z.object({items:r.z.array(ab),nextCursor:b.nullable()}),r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship").optional(),against:r.z.enum(["applied","draft"]).optional()});let ac=r.z.union([r.z.object({builtIn:r.z.enum(Y)}),r.z.object({rule:r.z.int().min(0)}),r.z.object({declared:$,index:r.z.int().min(0)})]),ad=r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rule:ac}));r.z.object({send:ad,read:ad,manage:ad});let ae=r.z.array(r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship"),rule:ac}));r.z.object({send:r.z.object({gained:ae,lost:ae}),read:r.z.object({gained:ae,lost:ae}),manage:r.z.object({gained:ae,lost:ae})});var af=a.i(565230);let ag={send:"May send to",read:"May read",manage:"May manage"};function ah(a,b){return null===a?{kind:"all-to-all"}:{kind:"rules",rules:a.map(a=>({key:b(),verb:a.verb,from:[...a.from],to:[...a.to]}))}}function ai(a){return"all-to-all"===a.kind?null:a.rules.map(a=>({verb:a.verb,from:[...a.from],to:[...a.to]}))}function aj(a,b){return b?"rules"===a.kind?a:{kind:"rules",rules:[]}:{kind:"all-to-all"}}function ak(a,b){return"all-to-all"===a.kind?a:{kind:"rules",rules:a.rules.map(a=>a.key===b.key?b.change(a):a)}}function al(a,b){return am(a)===am(b)}function am(a){return"string"==typeof a?a:T(a)?`owner=${a.owner}`:`${a.labelId}=${a.value}`}let an={"*":"Any value","#":"The same value as the other side"},ao={"*":"Any owner","#":"The same owner as the other side"};function ap(a,b){let c=[],d=[],e=[];for(let f of a){if(T(f)){let a=function(a,b){if("*"===a.owner||"#"===a.owner)return{term:a,text:`owner=${a.owner}`};let c=b.ships.find(b=>b.id===a.owner);return void 0===c?void 0:{term:a,text:`owner=${c.name}`}}(f,b);void 0===a?e.push(f):d.push(a);continue}let a=function(a,b){if("string"==typeof a){let[c]=(0,af.pickedChips)([a],b);return void 0===c?void 0:{labelId:c.labelId,key:c.key,value:c.value,mark:c.mark,ownerName:c.ownerName,term:a}}let c=b.labels.find(b=>b.id===a.labelId);if(void 0===c)return;let d=b.ownerOf.get(c.id);return{labelId:c.id,key:c.key,value:a.value,mark:d?.mark??"ship",ownerName:d?.name??(0,af.labelOwnerName)(c.owner),term:a}}(f,b);void 0===a?e.push(f):c.push(a)}return{chips:c,owners:d,unknown:e}}function aq(a,b){let c=a["from"===b?"to":"from"];return a[b].filter(a=>"string"!=typeof a&&!T(a)&&"#"===a.value&&!c.some(b=>al(b,a)))}function ar(a,b){let c=a=>a.some(a=>T(a)&&"#"===a.owner);return c(a[b])&&!c(a["from"===b?"to":"from"])}var as=a.i(136501);let at=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}];function au({declared:a,error:b,onRetry:d,context:e}){let f;return f=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the declared rules",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:2,label:"Loading the declared rules"}):0===a.length?(0,c.jsx)(h.EmptyState,{variant:"section",title:"Nothing declares rules."}):(0,c.jsx)("ul",{className:"flex flex-col gap-3",children:a.map(a=>(0,c.jsxs)("li",{"data-testid":"network-declared-plugin",className:"flex flex-col gap-2",children:[(0,c.jsxs)("h3",{className:"text-meta font-medium","data-testid":"network-declared-by",children:["Declared by ",a.declaredBy]}),(0,c.jsx)("ul",{className:"flex flex-col gap-2",children:a.rules.map(a=>(0,c.jsx)("li",{"data-testid":"network-declared-rule",className:"flex flex-col gap-2 rounded-md border border-border p-3 sm:flex-row sm:items-start sm:gap-3",children:at.map(({side:b,label:d})=>(0,c.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===b?(0,c.jsx)("span",{className:"mt-6 shrink-0 text-meta text-muted-foreground","data-testid":"network-declared-rule-verb",children:ag[a.verb]}):null,"to"===b?(0,c.jsx)(p.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,c.jsx)(av,{label:d,terms:a[b],context:e,testId:`network-declared-rule-${b}`})]},b))},JSON.stringify(a)))})]},a.declarerId))}),(0,c.jsxs)("section",{"aria-labelledby":"network-declared","data-testid":"network-declared",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-declared",className:"text-body font-semibold",children:"Declared by plugins and the installation"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"Rules plugins and the installation need on the labels they own. The networking plugin adds them to your rules; while every ship may message every ship, they change nothing. Only their declarer changes them, and switching a plugin off withdraws its rules."}),f]})}function av({label:a,terms:b,context:d,testId:e}){let{chips:g,unknown:h}=ap(b,d);return(0,c.jsxs)("div",{className:"flex flex-col gap-1","data-testid":e,children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[g.length+h.length===0?(0,c.jsx)("span",{className:"text-body",children:"Every ship"}):null,g.map((a,b)=>(0,c.jsxs)(f.Fragment,{children:[0===b?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(as.LabelChip,{chip:a,testId:`${e}-value`,..."string"==typeof a.term?{}:{meaning:an[a.term.value]}})]},am(a.term))),h.map(a=>(0,c.jsxs)("span",{"data-testid":`${e}-unknown`,title:`${am(a)}: no longer in this fleet`,className:"inline-flex h-5.5 items-center gap-1 rounded-sm border border-tone-attention-border bg-tone-attention-bg px-1.5 text-id text-tone-attention-fg [&_svg]:size-3",children:[(0,c.jsx)(q.CircleAlert,{"aria-hidden":!0}),"A removed label"]},am(a)))]})]})}var aw=a.i(70840),ax=a.i(752562),ay=a.i(164831);let az={name:"crosshair",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]};az.node;let aA=(0,ay.default)(az);var aB=a.i(233540),aC=a.i(831856),aD=a.i(483556);function aE(a){return a.send.map(a=>a.shipId)}let aF=-Math.PI/2,aG=2*Math.PI;function aH(a){return a.filter(a=>"retired"!==a.status&&"viewer"!==a.kind).map(a=>({id:a.id,name:a.name,isOperator:"operator"===a.kind})).sort((a,b)=>Number(b.isOperator)-Number(a.isOperator)||a.name.localeCompare(b.name))}function aI(a){return Math.round(100*a)/100}var aJ=a.i(78398),aK=a.i(994777),aL=a.i(918691);let aM=["applied","draft"],aN={picked:"picked",reached:"may be messaged",unreached:"out of reach"};function aO({ships:a,search:b,sailingShipCount:d,pickedShipId:e,reachableShipIds:f,reachError:g,onPick:h,onRetry:j,against:k="applied",onAgainstChange:l}){var m;let n=(m=void 0===e?void 0:{pickedShipId:e,reachableShipIds:void 0===g?f:void 0},a.map((b,c)=>{var d,e;let f=aF+aG*c/a.length,g=1===a.length;return{ship:b,x:g?50:aI(50+38*Math.cos(f)),y:g?50:aI(50+38*Math.sin(f)),mark:(d=b.id,void 0===(e=m)?"none":d===e.pickedShipId?"picked":void 0===e.reachableShipIds?"none":e.reachableShipIds.includes(d)?"reached":"unreached")}})),o=n.find(a=>"picked"===a.mark),p=n.filter(a=>"reached"===a.mark);return(0,c.jsxs)("section",{"aria-labelledby":"network-reach","data-testid":"network-reach",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-reach",className:"text-body font-semibold",children:"Reach"}),(0,c.jsxs)("p",{className:"text-meta text-muted-foreground",children:["draft"===k?"The fleet as the draft would leave it once applied: pick a ship to see which ships the draft lets it message.":"The fleet as it stands now: pick a ship to see which ships the rules let it message."," ","Argo reaches every ship, and every ship reaches argo."]}),void 0===l?null:(0,c.jsx)(aK.Tabs,{value:k,onValueChange:a=>{let b=aM.find(b=>b===a);void 0!==b&&l(b)},children:(0,c.jsxs)(aK.TabsList,{"aria-label":"Explain reach against",children:[(0,c.jsx)(aK.TabsTrigger,{value:"applied","data-testid":"network-reach-applied",children:"Applied rules"}),(0,c.jsx)(aK.TabsTrigger,{value:"draft","data-testid":"network-reach-draft",children:"Draft"})]})}),void 0===b?null:(0,c.jsx)(aJ.Combobox,{options:b.ships.map(a=>({value:a.id,label:a.name})),value:null,onValueChange:a=>{let c=b.ships.find(b=>b.id===a);void 0!==c&&h(c.id)},toQuery:aL.asHandle,onQueryChange:b.onQueryChange,groupLabel:"Ships",emptyText:a=>`No ship matches "${a}". Retired ships are not listed.`,leadingIcon:(0,c.jsx)(aB.Search,{}),placeholder:"Find a ship to pick","aria-label":"Find a ship to pick","data-testid":"network-reach-search"}),(0,c.jsxs)("div",{className:"relative flex flex-wrap gap-2 md:mx-auto md:block md:aspect-square md:w-full md:max-w-xl","data-testid":"network-reach-graph",children:[void 0===o?null:(0,c.jsx)("svg",{"aria-hidden":!0,viewBox:"0 0 100 100",preserveAspectRatio:"none",className:"pointer-events-none absolute inset-0 hidden size-full md:block",children:p.map(a=>(0,c.jsx)("line",{x1:o.x,y1:o.y,x2:a.x,y2:a.y,vectorEffect:"non-scaling-stroke",className:"stroke-muted-foreground",strokeWidth:1.5},a.ship.id))}),n.map(a=>(0,c.jsx)(aP,{node:a,onPick:()=>{h("picked"===a.mark?void 0:a.ship.id)}},a.ship.id))]}),void 0===g?(0,c.jsx)("p",{className:"text-body",role:"status","data-testid":"network-reach-summary",children:function(a,b=a.length){let c=a.find(a=>"picked"===a.mark);if(void 0===c)return"Pick a ship to see which ships it may message.";let d=Math.max(b,a.length)-1,e=a.filter(a=>"reached"===a.mark).map(a=>a.ship.name);return a.every(a=>"picked"===a.mark||"none"===a.mark)?0===d?`${c.ship.name} is the only ship of the fleet.`:`Finding the ships ${c.ship.name} may message…`:e.length===d?`${c.ship.name} may message every other ship (${String(d)}).`:0===e.length?`${c.ship.name} may message no other ship.`:`${c.ship.name} may message ${String(e.length)} of ${String(d)} ships: ${e.join(", ")}.`}(n,d)}):(0,c.jsx)(i.InlineError,{title:"Couldn’t explain this ship’s reach",description:g,onRetry:j})]})}function aP({node:a,onPick:b}){let{ship:d,mark:e}=a;return(0,c.jsx)(aC.Button,{size:"sm",variant:"secondary","aria-pressed":"picked"===e,"aria-label":"none"===e?d.name:`${d.name}, ${aN[e]}`,icon:function(a){switch(a){case"picked":return(0,c.jsx)(aA,{"aria-hidden":!0});case"reached":return(0,c.jsx)(ax.Check,{"aria-hidden":!0});case"unreached":return(0,c.jsx)(aw.Ban,{"aria-hidden":!0});case"none":return}}(e),"data-testid":"network-reach-ship","data-mark":e,style:{left:`${String(a.x)}%`,top:`${String(a.y)}%`},className:(0,aD.classNames)("md:absolute md:-translate-x-1/2 md:-translate-y-1/2","picked"===e&&"bg-accent ring-2 ring-ring","unreached"===e&&"opacity-45"),onClick:b,children:d.name})}var aQ=a.i(659613),aR=a.i(771736);let aS={apply:{title:"Apply the draft?",description:"Every send, read and manage is checked against the draft from now on, and the rules before it are gone.",action:"Apply draft"},discard:{title:"Discard the draft?",description:"The draft is gone; the applied rules stay as they are.",action:"Discard draft"}};function aT({draft:a,appliedVersion:b,isApplying:d,applyError:e,onApply:g,isDiscarding:h,discardError:j,onDiscard:k}){let[l,m]=(0,f.useState)(null),n=d||h;return(0,c.jsxs)("section",{"aria-labelledby":"network-rules-apply","data-testid":"network-rules-apply",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules-apply",className:"text-body font-semibold",children:"Apply"}),null===a?(0,c.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-rules-apply-state",children:"No draft: the applied rules are the ones above. Save a draft to apply it."}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("p",{className:"text-body","data-testid":"network-rules-apply-state",children:["A draft is saved. Every send, read and manage is checked against the applied rules, at version ",b,", until it is applied."]}),a.savedAgainstVersion===b?null:(0,c.jsxs)("p",{className:"text-meta text-muted-foreground","data-testid":"network-rules-apply-moved",children:["The settings moved from version ",a.savedAgainstVersion," since the draft was saved."]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:d,disabled:h,"data-testid":"network-rules-apply-open",onClick:()=>{m("apply")},children:"Apply draft"}),(0,c.jsx)(aC.Button,{variant:"ghost",isLoading:h,disabled:d,"data-testid":"network-rules-discard-open",onClick:()=>{m("discard")},children:"Discard draft"})]})]}),void 0===e?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t apply the draft",description:e}),void 0===j?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t discard the draft",description:j}),(0,c.jsx)(aQ.AlertDialog,{open:null!==l,onOpenChange:a=>{a||n||m(null)},children:null===l?null:(0,c.jsxs)(aQ.AlertDialogContent,{"data-testid":`network-rules-${l}-dialog`,className:aR.dialogSurface.phoneSheet,children:[(0,c.jsxs)(aQ.AlertDialogHeader,{children:[(0,c.jsx)(aQ.AlertDialogTitle,{children:aS[l].title}),(0,c.jsx)(aQ.AlertDialogDescription,{children:aS[l].description})]}),(0,c.jsxs)(aQ.AlertDialogFooter,{children:[(0,c.jsx)(aQ.AlertDialogClose,{render:(0,c.jsx)(aC.Button,{disabled:n}),children:"Cancel"}),(0,c.jsx)(aC.Button,{variant:"apply"===l?"primary":"destructive",isLoading:n,"data-testid":`network-rules-${l}-confirm`,onClick:()=>{m(null),"apply"===l?g():k()},children:aS[l].action})]})]})})]})}let aU={argo:"argo",owner:"Owner",answer:"Answer",pluginRead:"Connected plugins read",viewerRead:"Viewer reads",installation:"Installation manages",open:"Open"};function aV(a){switch(a.rule){case"argo":return{key:a.rule,name:aU[a.rule],meaning:"argo sends to, reads and manages every ship, and every ship reaches argo.",isOn:a.isOn,turnedBy:"never"};case"owner":return{key:a.rule,name:aU[a.rule],meaning:"A ship’s owner sends to, reads and manages the ships it owns.",isOn:a.isOn,turnedBy:"never"};case"answer":return{key:a.rule,name:aU[a.rule],meaning:"A ship may always answer the sender of a message it received.",isOn:a.isOn,turnedBy:"never"};case"pluginRead":return{key:a.rule,name:aU[a.rule],meaning:"A plugin argo connected reads every ship, whatever the rules.",isOn:a.isOn,turnedBy:"never"};case"viewerRead":return{key:a.rule,name:aU[a.rule],meaning:"The viewer reads every ship.",isOn:a.isOn,turnedBy:"argo"};case"installation":return{key:a.rule,name:aU[a.rule],meaning:"The installation manages person ships and the ships they own, so a leaver is always released.",isOn:a.isOn,turnedBy:"never"};case"open":return{key:a.rule,name:aU[a.rule],meaning:"Every ship may send to, read and manage every ship.",isOn:a.isOn,turnedBy:"rules"}}}function aW({changes:a,error:b,onRetry:d}){let e;return e=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read what the draft changes",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"detail",rows:3,label:"Loading what the draft changes"}):a.every(({gained:a,lost:b})=>0===a.length&&0===b.length)?(0,c.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-draft-changes-none",children:"The draft changes no reach."}):a.filter(({gained:a,lost:b})=>a.length+b.length>0).map(({verb:a,gained:b,lost:d})=>(0,c.jsxs)("div",{className:"flex flex-col gap-2","data-testid":"network-draft-changes-verb",children:[(0,c.jsx)("h3",{className:"text-meta font-semibold",children:ag[a]}),(0,c.jsx)(aX,{title:"Gains",rows:b,testId:"network-draft-gained"}),(0,c.jsx)(aX,{title:"Loses",rows:d,testId:"network-draft-lost"})]},a)),(0,c.jsxs)("section",{"aria-labelledby":"network-draft-changes","data-testid":"network-draft-changes",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-draft-changes",className:"text-body font-semibold",children:"What the draft changes"}),e]})}function aX({title:a,rows:b,testId:d}){return 0===b.length?null:(0,c.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,c.jsxs)("p",{className:"text-meta text-muted-foreground",children:[a," ",b.length," ",1===b.length?"pair":"pairs"]}),(0,c.jsx)("ul",{className:"flex flex-col gap-1",children:b.map(a=>(0,c.jsxs)("li",{"data-testid":d,className:"flex flex-wrap items-center gap-x-2 text-body",children:[(0,c.jsx)("span",{children:a.from}),(0,c.jsx)(p.ArrowRight,{"aria-label":"to",className:"size-4 text-muted-foreground"}),(0,c.jsx)("span",{children:a.to}),(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a.rule})]},a.key))})]})}var aY=a.i(403512),aZ=a.i(951675),a$=a.i(248136),a_=a.i(387005),a0=a.i(474215),a1=a.i(819721),a2=a.i(238246),a3=a.i(860275);let a4=(0,a1.default)(async()=>{},{loadableGenerated:{modules:[259068]},ssr:!1});function a5({label:a,picked:b,owners:d,ownerChoices:e,unknown:g,groups:h,max:i,isDisabled:j,problem:k,onAdd:l,onRemove:m,testId:n,popoverTestId:o}){let[p,r]=(0,f.useState)(!1),[s,t]=(0,f.useState)(!1),u=b.length+d.length+g.length,v=new Set(d.map(a=>am(a.term))),w=[...["*","#"].map(a=>({term:{owner:a},text:ao[a]})),...e.map(a=>({term:{owner:a.shipId},text:a.name}))];return(0,c.jsxs)("div",{className:"flex flex-col gap-1","data-testid":n,children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,c.jsxs)("div",{className:"flex min-h-(--size-control-sm) flex-wrap items-center gap-1.5",children:[0===u?(0,c.jsx)("span",{className:"text-body",children:"Every ship"}):null,b.map((a,b)=>(0,c.jsxs)(f.Fragment,{children:[0===b?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(as.LabelChip,{chip:a,testId:`${n}-value`,..."string"==typeof a.term?{}:{meaning:an[a.term.value]},...j?{}:{onRemove:()=>{m(a.term)}}})]},am(a.term))),d.map((a,d)=>(0,c.jsxs)(f.Fragment,{children:[0===d&&0===b.length?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(a6,{owner:a,testId:`${n}-owner`,...!0===j?{}:{onRemove:()=>{m(a.term)}}})]},am(a.term))),g.map(a=>(0,c.jsxs)("span",{"data-testid":`${n}-unknown`,title:`${am(a)}: no longer in this fleet`,className:"inline-flex h-5.5 items-center gap-1 rounded-sm border border-tone-attention-border bg-tone-attention-bg px-1.5 text-id text-tone-attention-fg [&_svg]:size-3",children:[(0,c.jsx)(q.CircleAlert,{"aria-hidden":!0}),"string"!=typeof a&&"owner"in a?"A removed owner":"A removed label",!0===j?null:(0,c.jsx)("button",{type:"button","aria-label":"string"!=typeof a&&"owner"in a?"Remove the removed owner":"Remove the removed label",onClick:()=>{m(a)},className:"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-xs hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring",children:(0,c.jsx)(a0.X,{"aria-hidden":!0})})]},am(a))),u>=i?null:(0,c.jsxs)(a3.Popover,{open:p,onOpenChange:r,children:[(0,c.jsx)(a3.PopoverTrigger,{render:(0,c.jsx)(aC.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,c.jsx)(aY.Plus,{}),disabled:j,"data-testid":`${n}-add`}),children:"Add label"}),(0,c.jsxs)(a3.PopoverContent,{align:"start",sideOffset:6,className:"w-80 p-2","data-testid":o,children:[(0,c.jsx)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:a}),(0,c.jsx)(a4,{groups:h,pickedValueIds:b.flatMap(a=>"string"==typeof a.term?[a.term]:[]),onPick:a=>{r(!1),l(a)},terms:{picked:b.flatMap(a=>"string"==typeof a.term?[]:[a.term]),onPick:a=>{r(!1),l(a)}}}),(0,c.jsxs)("p",{className:"mt-2 flex items-center justify-between gap-2 border-t border-border px-2 pt-2 text-meta text-muted-foreground",children:["All must hold. * is any value, # the same as the other side.",(0,c.jsx)(a2.default,{href:"/labels",className:"font-medium text-foreground hover:underline",children:"Manage labels"})]})]})]}),u>=i?null:(0,c.jsxs)(a3.Popover,{open:s,onOpenChange:t,children:[(0,c.jsx)(a3.PopoverTrigger,{render:(0,c.jsx)(aC.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,c.jsx)(aY.Plus,{}),disabled:j,"data-testid":`${n}-owner-add`}),children:"Add owner"}),(0,c.jsxs)(a3.PopoverContent,{align:"start",sideOffset:6,className:"w-72 p-2","data-testid":`${o}-owner`,children:[(0,c.jsxs)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:[a," the owner"]}),(0,c.jsx)("ul",{className:"flex flex-col",children:w.map(a=>(0,c.jsx)("li",{children:(0,c.jsxs)("button",{type:"button",disabled:v.has(am(a.term)),"data-testid":`${n}-owner-option`,onClick:()=>{t(!1),l(a.term)},className:"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-body hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring disabled:text-muted-foreground disabled:hover:bg-transparent",children:[(0,c.jsx)(a_.UserRound,{"aria-hidden":!0,className:"size-(--size-icon) shrink-0 text-muted-foreground"}),a.text]})},am(a.term)))}),(0,c.jsx)("p",{className:"mt-2 border-t border-border px-2 pt-2 text-meta text-muted-foreground",children:"An owner is argo or a person’s ship. # is the same owner as the other side."})]})]})]}),void 0===k?null:(0,c.jsx)("p",{role:"status",className:"text-meta text-tone-attention-fg","data-testid":`${n}-problem`,children:k}),0===g.length?null:(0,c.jsx)("p",{role:"alert",className:"text-meta text-tone-attention-fg",children:"A label or owner here was removed from the fleet: this side matches no ship until you remove it."})]})}function a6({owner:a,onRemove:b,testId:d}){let{owner:e}=a.term,f="*"===e||"#"===e?`${a.text}. ${ao[e]}`:`${a.text}: ships it owns`;return(0,c.jsxs)("span",{role:"group","aria-label":f,title:f,"data-testid":d,className:"inline-flex h-5.5 max-w-full min-w-0 shrink-0 items-center gap-1 rounded-sm border border-border bg-secondary px-1.5 font-mono text-id whitespace-nowrap text-foreground [&_svg]:size-3 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",children:[(0,c.jsx)(a_.UserRound,{"aria-hidden":!0}),(0,c.jsxs)("span",{className:"truncate",children:[(0,c.jsx)("span",{className:"text-muted-foreground",children:"owner="}),(0,c.jsx)("span",{className:"font-medium",children:a.text.slice(6)})]}),void 0===b?null:(0,c.jsx)("button",{type:"button","aria-label":`Remove ${a.text}`,onClick:b,className:"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-xs text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring",children:(0,c.jsx)(a0.X,{"aria-hidden":!0})})]})}let a7=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}],a8=()=>crypto.randomUUID();function a9({rules:a,context:b,limits:d,isSaving:e,saveError:g,savedNote:h,onSave:j}){let[k,l]=(0,f.useState)(()=>ah(a,a8)),m=(0,af.filterGroupsOf)(b),n=b.ships.filter(a=>("operator"===a.kind||"person"===a.kind)&&"retired"!==a.status).map(a=>({shipId:a.id,name:a.name})),o=JSON.stringify(ai(k))!==JSON.stringify(a);return(0,c.jsxs)("section",{"aria-labelledby":"network-rules","data-testid":"network-rules",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules",className:"text-body font-semibold",children:"Rules"}),"all-to-all"===k.kind?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:"No rules: every ship may send to, read and manage every ship."}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"With rules, a ship may send to, read or manage another only when a rule of that verb or a built-in rule allows it."}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{variant:o?"secondary":"primary",icon:(0,c.jsx)(aY.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-on",onClick:()=>{l(aj(k,!0))},children:"Set rules"}),o?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:e,"data-testid":"network-rules-save",onClick:()=>{j(null)},children:"Save draft"}),(0,c.jsx)(aC.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(ah(a,a8))},children:"Discard changes"})]}):null]})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:0===k.rules.length?"No rule allows anything yet: once saved, only the built-in rules hold.":"A ship may send to, read or manage another only when a rule of that verb or a built-in rule allows it."}),0===k.rules.length?null:(0,c.jsx)("ul",{className:"flex flex-col gap-2",children:k.rules.map((a,f)=>(0,c.jsxs)("li",{"data-testid":"network-rule",className:"flex flex-col gap-2 rounded-md border border-border p-3 sm:flex-row sm:items-start sm:gap-3",children:[a7.map(({side:g,label:h})=>{let i,j=ap(a[g],b);return(0,c.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===g?(0,c.jsxs)("div",{className:"flex shrink-0 flex-col gap-1",children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"Verb"}),(0,c.jsxs)(a$.Select,{items:ag,value:a.verb,disabled:e,onValueChange:b=>{var c;V.some(a=>a===b)&&l(ak(k,{key:(c={rule:a.key,verb:b}).rule,change:a=>({...a,verb:c.verb})}))},children:[(0,c.jsx)(a$.SelectTrigger,{"aria-label":`Verb of rule ${String(f+1)}`,"data-testid":"network-rule-verb",size:"sm",children:(0,c.jsx)(a$.SelectValue,{})}),(0,c.jsx)(a$.SelectContent,{children:V.map(a=>(0,c.jsx)(a$.SelectItem,{value:a,children:ag[a]},a))})]})]}):null,"to"===g?(0,c.jsx)(p.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,c.jsx)(a5,{label:h,picked:j.chips,owners:j.owners,ownerChoices:n,unknown:j.unknown,groups:m,max:d.selectorMax,isDisabled:e,...void 0===(i=function(a,b){let[c]=aq(a,b.side);if(void 0===c)return ar(a,b.side)?"owner=# needs owner=# on the other side: # matches the same owner there.":void 0;let d=b.context.labels.find(a=>a.id===c.labelId)?.key??c.labelId;return`${d}=# needs ${d}=# on the other side: # matches the same value there.`}(a,{side:g,context:b}))?{}:{problem:i},testId:`network-rule-${g}`,popoverTestId:"network-rule-popover",onAdd:b=>{var c;l(ak(k,{key:(c={rule:a.key,side:g,term:b,limits:d}).rule,change:a=>{let b=a[c.side];return b.some(a=>al(a,c.term))||b.length>=c.limits.selectorMax?a:{...a,[c.side]:[...b,c.term]}}}))},onRemove:b=>{var c;l(ak(k,{key:(c={rule:a.key,side:g,term:b}).rule,change:a=>({...a,[c.side]:a[c.side].filter(a=>!al(a,c.term))})}))}})]},g)}),(0,c.jsx)(aC.Button,{variant:"ghost",size:"xs",icon:(0,c.jsx)(aZ.Trash2,{"aria-hidden":!0}),disabled:e,"aria-label":`Remove rule ${String(f+1)}`,"data-testid":"network-rule-remove",onClick:()=>{var b;l((b=a.key,"all-to-all"===k.kind?k:{kind:"rules",rules:k.rules.filter(a=>a.key!==b)}))}})]},a.key))}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[k.rules.length>=d.rulesMax?null:(0,c.jsx)(aC.Button,{size:"sm",icon:(0,c.jsx)(aY.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-add",onClick:()=>{var a;l((a={newKey:a8,limits:d},"all-to-all"===k.kind||k.rules.length>=a.limits.rulesMax?k:{kind:"rules",rules:[...k.rules,{key:a.newKey(),verb:"send",from:[],to:[]}]}))},children:"Add rule"}),(0,c.jsxs)("span",{className:"text-meta text-muted-foreground tabular-nums","data-testid":"network-rules-count",children:[k.rules.length," of ",d.rulesMax," rules"]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-border pt-3",children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:e,disabled:!o||"rules"===k.kind&&k.rules.some(a=>aq(a,"from").length+aq(a,"to").length>0||ar(a,"from")||ar(a,"to")),"data-testid":"network-rules-save",onClick:()=>{j(ai(k))},children:"Save draft"}),o?(0,c.jsx)(aC.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(ah(a,a8))},children:"Discard changes"}):null,(0,c.jsx)(aC.Button,{variant:"ghost",className:"ml-auto",disabled:e,"data-testid":"network-rules-off",onClick:()=>{l(aj(k,!1))},children:"Remove all rules"})]})]}),void 0===g?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t save the rules",description:g}),void 0===h||o?null:(0,c.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-rules-note",children:h})]})}var ba=a.i(597024);let bb={name:"file-up",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]};bb.node;let bc=(0,ay.default)(bb);var bd=a.i(145098),be=a.i(172309),bf=a.i(132865);function bg(a){return"label"in a?`${a.label}=${a.value}`:`owner=${a.owner}`}function bh(a){return"ship"===a.kind?`ship:${a.name}`:`${a.kind}:${a.key}`}var bi=a.i(37809);function bj(a){switch(a.kind){case"definer":return`${a.key} is defined by ${a.fleetDefiner} here, by ${a.fileDefiner} in the file`;case"values":return`${a.key} has ${a.fleetValues.join(", ")} here; the file gives ${a.fileValues.join(", ")}`;case"ship":return`No active ship is named ${a.name}`}}function bk({difference:a,choice:b,ships:d,onShipQueryChange:e,isDisabled:f,onChange:g}){let h=bh(a),i=`network-import-difference-${h.replace(":","-")}`;return(0,c.jsxs)("fieldset",{className:"flex flex-col gap-2 rounded-lg border border-border bg-card p-3","data-testid":"network-import-difference",children:[(0,c.jsx)("legend",{className:"sr-only",children:bj(a)}),(0,c.jsx)("p",{className:"text-body font-medium","aria-hidden":!0,children:bj(a)}),(0,c.jsx)(bi.RadioGroup,{value:b?.way,disabled:f,onValueChange:b=>{g({difference:a,way:b})},children:a.ways.map(b=>({way:b,text:function(a,b){switch(a.kind){case"definer":return"useExisting"===b?`Use the label ${a.key} as it is, defined by ${a.fleetDefiner}`:`Drop the rules on ${a.key}`;case"values":return"useExisting"===b?`Use the label ${a.key} as it is: it has every value the rules name`:`Drop the rules naming ${a.missingValues.map(b=>`${a.key}=${b}`).join(", ")}`;case"ship":return"pickShip"===b?`Pick an active ship for ${a.name}`:`Drop the rules naming owner=${a.name}`}}(a,b)})).map(({way:a,text:b})=>(0,c.jsxs)("div",{className:"flex items-start gap-2",children:[(0,c.jsx)(bi.RadioGroupItem,{id:`${i}-${a}`,value:a,className:"mt-0.5","data-testid":`network-import-way-${a}`}),(0,c.jsx)("label",{htmlFor:`${i}-${a}`,className:"min-w-0 grow cursor-pointer text-body",children:b})]},a))}),b?.way==="pickShip"?(0,c.jsx)(aJ.Combobox,{options:d.map(a=>({value:a.id,label:a.name})),value:b.shipId??null,onValueChange:b=>{let c=d.find(a=>a.id===b);g({difference:a,way:"pickShip",...void 0===c?{}:{shipId:c.id}})},onQueryChange:e,groupLabel:"Active ships",placeholder:"Type a ship name","aria-label":`The ship for ${"ship"===a.kind?a.name:""}`,"data-testid":"network-import-pick-ship"}):null]})}let bl=["Attach or paste","Check","Overview","Import"];function bm({current:a}){return(0,c.jsx)("ol",{className:"flex flex-wrap gap-x-3 gap-y-1 text-meta","aria-label":"Import steps","data-testid":"network-import-steps",children:bl.map((b,d)=>(0,c.jsxs)("li",{"aria-current":d===a?"step":void 0,className:d===a?"font-semibold text-foreground":"text-muted-foreground",children:[d+1,". ",b]},b))})}function bn(a){let{checked:b,isChecking:d,checkError:e,onCheck:g,onFileChange:h,ships:j,onShipQueryChange:k,isImporting:l,importError:m,onImport:n}=a,[o,p]=(0,f.useState)(""),[q,r]=(0,f.useState)([]),s=j.find(a=>a.isOperator),[t,u]=(0,f.useState)(s?.id),[v,w]=(0,f.useState)(!1),x=d||l,y=a=>{p(a),r([]),w(!1),h()};if(void 0===b)return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:+!!d}),(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bd.Label,{htmlFor:"network-import-attach",children:"Attach the file"}),(0,c.jsx)("input",{id:"network-import-attach",type:"file",accept:"application/json,.json",disabled:x,"data-testid":"network-import-attach",className:"text-body file:mr-3 file:rounded-md file:border file:border-border file:bg-card file:px-3 file:py-1.5",onChange:a=>{let b=a.target.files?.[0];void 0!==b&&b.text().then(y)}})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bd.Label,{htmlFor:"network-import-paste",children:"Or paste it"}),(0,c.jsx)(be.Textarea,{id:"network-import-paste",isMono:!0,rows:8,value:o,disabled:x,placeholder:'{ "format": "aeolus.network-rules", ... }',"data-testid":"network-import-paste",onChange:a=>{y(a.target.value)}})]}),void 0===e?null:(0,c.jsx)(i.InlineError,{title:"The file doesn’t check",description:`${e}. Nothing changed: fix the file and check it again.`}),(0,c.jsxs)(bf.DialogFooter,{children:[(0,c.jsx)(bf.DialogClose,{render:(0,c.jsx)(aC.Button,{type:"button",disabled:x}),children:"Cancel"}),(0,c.jsx)(aC.Button,{variant:"primary",isLoading:d,disabled:""===o.trim()||x,"data-testid":"network-import-check",onClick:()=>{g(o)},children:d?"Checking…":"Check file"})]})]});let{file:z,newLabels:A,differences:B}=b,C=z.rules??[],D=B.every(a=>{let b=q.find(b=>bh(b.difference)===bh(a));return void 0!==b&&("pickShip"!==b.way||void 0!==b.shipId)}),E=j.find(a=>a.id===t),F=D&&(0===A.length||void 0!==E)&&!x,G=q.flatMap(a=>(function(a){let{difference:b,way:c}=a;return"ship"===b.kind?"pickShip"===c?void 0===a.shipId?void 0:{kind:"ship",name:b.name,way:c,shipId:a.shipId}:{kind:"ship",name:b.name,way:"dropRules"}:{kind:b.kind,key:b.key,way:"useExisting"===c?"useExisting":"dropRules"}})(a)??[]);return v?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:3}),(0,c.jsx)(bf.DialogHeader,{children:(0,c.jsx)(bf.DialogTitle,{children:"Import into the draft?"})}),(0,c.jsxs)("ul",{className:"flex list-disc flex-col gap-1 pl-5 text-body","data-testid":"network-import-consequences",children:[(0,c.jsx)("li",{children:null===z.rules?"The draft becomes all-to-all, every ship reaching every ship.":q.some(a=>"dropRules"===a.way)?`The draft is replaced by the file’s ${String(C.length)} rules, less the ones you chose to drop.`:`The draft is replaced by the file’s ${String(C.length)} rules.`}),0===A.length?null:(0,c.jsxs)("li",{children:[A.join(", ")," ",1===A.length?"is":"are"," defined for ",E?.name??"argo","."]}),(0,c.jsx)("li",{children:"Nothing is in force until you apply the draft."})]}),void 0===m?null:(0,c.jsx)(i.InlineError,{variant:"section",title:"Couldn’t import the file",description:`${m}. Nothing was written.`,onRetry:()=>{w(!1),g(o)}}),(0,c.jsxs)(bf.DialogFooter,{children:[(0,c.jsx)(aC.Button,{type:"button",disabled:x,onClick:()=>{w(!1)},children:"Back"}),(0,c.jsx)(aC.Button,{variant:"primary",isLoading:l,disabled:x,"data-testid":"network-import-confirm",onClick:()=>{n({file:o,resolutions:G,...0===A.length||void 0===E||E.isOperator?{}:{definerShipId:E.id}})},children:l?"Importing…":"Import into the draft"})]})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:2}),(0,c.jsxs)("p",{className:"flex items-start gap-2 text-body",role:"status","data-testid":"network-import-checked",children:[(0,c.jsx)(ba.CircleCheck,{"aria-hidden":!0,className:"mt-0.5 size-(--size-icon-sm) shrink-0 text-tone-ok-fg"}),(0,c.jsxs)("span",{children:["The file checks: ",null===z.rules?"all-to-all, no rules":`${String(C.length)} rules`," and ",z.labels.length," labels, from ",z.fleet.name," at rules version ",z.rulesVersion,", exported"," ",new Date(z.exportedAt).toLocaleString(),"."]})]}),0===B.length?null:(0,c.jsxs)("section",{"aria-labelledby":"network-import-differences",className:"flex flex-col gap-2","data-testid":"network-import-differences",children:[(0,c.jsx)("h3",{id:"network-import-differences",className:"text-body font-semibold",children:1===B.length?"1 difference to resolve":`${String(B.length)} differences to resolve`}),B.map(a=>{let b=bh(a);return(0,c.jsx)(bk,{difference:a,choice:q.find(a=>bh(a.difference)===b),ships:j,onShipQueryChange:k,isDisabled:x,onChange:a=>{r([...q.filter(a=>bh(a.difference)!==b),a])}},b)})]}),0===A.length?null:(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsxs)(bd.Label,{htmlFor:"network-import-definer",children:["Define ",A.join(", ")," for"]}),(0,c.jsx)(aJ.Combobox,{id:"network-import-definer",options:j.map(a=>({value:a.id,label:a.name})),value:t??null,onValueChange:a=>{u(j.find(b=>b.id===a)?.id)},onQueryChange:k,groupLabel:"Active ships",placeholder:"Type a ship name","data-testid":"network-import-definer"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"argo never retires, so its labels never go. Another ship must be within your manage reach."})]}),(0,c.jsxs)("section",{"aria-labelledby":"network-import-rules",className:"flex flex-col gap-1.5",children:[(0,c.jsx)("h3",{id:"network-import-rules",className:"text-body font-semibold",children:"Rules in the file"}),0===C.length?(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:null===z.rules?"None: all-to-all.":"None: only the built-in and declared rules."}):(0,c.jsx)("ol",{className:"flex max-h-64 flex-col gap-1 overflow-y-auto font-mono text-code","data-testid":"network-import-rules",children:C.map((a,b)=>{let c,{verb:d,from:e,to:f}=(c=a=>0===a.length?["every ship"]:a.map(bg),{verb:a.verb,from:c(a.from),to:c(a.to)});return{place:b+1,line:`${d}: ${e.join(" ")} → ${f.join(" ")}`}}).map(({place:a,line:b})=>(0,c.jsx)("li",{children:b},a))})]}),(0,c.jsxs)(bf.DialogFooter,{className:"items-center",children:[(0,c.jsx)("span",{className:"mr-auto text-meta text-muted-foreground",children:D?null:"Resolve every difference to import."}),(0,c.jsx)(aC.Button,{type:"button",disabled:x,onClick:()=>{y(o)},children:"Back"}),(0,c.jsx)(aC.Button,{variant:"primary",disabled:!F,"data-testid":"network-import-open-confirm",onClick:()=>{w(!0)},children:"Import…"})]})]})}function bo(a){let{isOpen:b,onOpenChange:d,isChecking:e,isImporting:f}=a;return(0,c.jsx)(bf.Dialog,{open:b,onOpenChange:a=>{e||f||d(a)},children:(0,c.jsxs)(bf.DialogContent,{size:"md","data-testid":"network-import-dialog",className:aR.dialogSurface.phoneFullScreen,children:[(0,c.jsxs)(bf.DialogHeader,{children:[(0,c.jsxs)(bf.DialogTitle,{children:[(0,c.jsx)(bc,{"aria-hidden":!0,className:"mr-2 inline size-(--size-icon-sm)"}),"Import network rules"]}),(0,c.jsx)(bf.DialogDescription,{children:"Rules exported from this fleet or another land in the draft; nothing is in force until you apply it."})]}),b?(0,c.jsx)(bn,{...a}):null]})})}let bp={name:"file-down",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]};bp.node;let bq=(0,ay.default)(bp);function br({isExporting:a,exportError:b,onExport:d,exported:e,canImport:f,onImport:g}){return(0,c.jsxs)("section",{"aria-labelledby":"network-rules-file","data-testid":"network-rules-file",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules-file",className:"text-body font-semibold",children:"Export and import"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"Export writes the applied rules and the labels they use as one file, by name. Import brings a file from this fleet or another into the draft."}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{icon:(0,c.jsx)(bq,{}),isLoading:a,"data-testid":"network-rules-export",onClick:d,children:a?"Exporting…":"Export"}),f?(0,c.jsx)(aC.Button,{icon:(0,c.jsx)(bc,{}),disabled:a,"data-testid":"network-rules-import",onClick:g,children:"Import…"}):null]}),void 0===e||0===e.leftOut.length?null:(0,c.jsxs)("div",{role:"status","data-testid":"network-rules-left-out",className:"flex flex-col gap-1 rounded-lg border border-tone-waiting-border bg-tone-waiting-bg px-3.5 py-2.5 text-meta text-tone-waiting-fg",children:[(0,c.jsxs)("p",{children:[e.name," leaves out ",1===e.leftOut.length?"1 applied rule":`${String(e.leftOut.length)} applied rules`,", as each matches no ship:"]}),(0,c.jsx)("ul",{className:"list-disc pl-5",children:e.leftOut.map(({rule:a,reason:b})=>(0,c.jsxs)("li",{children:["rule ",a," ",b]},a))})]}),void 0===b?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t export the rules",description:`${b}. Nothing was downloaded.`})]})}function bs(a){switch(a.kind){case"ship":return a.name;case"account":return`Account ${a.accountId}`;case"installation":return"The installation"}}var bt=a.i(872872);function bu({refusals:a,error:b,onRetry:d,more:e,context:f,now:g}){let k;return k=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the refusals",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the refusals"}):0!==a.length||e?(0,c.jsx)("ol",{className:"flex flex-col gap-2","data-testid":"network-refusals-list",children:a.map(a=>(0,c.jsx)(bv,{refusal:a,context:f,now:g},a.id))}):(0,c.jsx)(h.EmptyState,{variant:"section",title:"No send has been refused."}),(0,c.jsxs)("section",{"aria-labelledby":"network-refusals","data-testid":"network-refusals",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-refusals",className:"text-body font-semibold",children:"Refusals"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"The sends the rules refused, newest first, with both ships’ labels as they were then. The sender was told only that its send was refused."}),k,e]})}function bv({refusal:a,context:b,now:d}){let e=new Date(a.at),{recipient:f}=a,g="ship"===f.kind?[f.ship]:f.ships;return(0,c.jsxs)("li",{"data-testid":"network-refusal",className:"flex flex-col gap-2 rounded-md border border-border px-3 py-2.5",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5",children:[(0,c.jsx)("p",{className:"text-body font-medium",children:function(a){let{sender:b,recipient:c}=a,d=`${bs(b)} tried to ${"ship"===b.kind?"message":"reach"}`;switch(c.kind){case"ship":return`${d} ${c.ship.name}.`;case"type":return`${d} the type ${c.type}: ${(0,af.listed)(c.ships.map(a=>a.name))}.`}}(a)}),(0,c.jsx)("time",{dateTime:a.at,title:(0,bt.fullDateTime)(e),className:"text-meta text-muted-foreground tabular-nums",children:(0,bt.relativeTime)(e,d)})]}),(0,c.jsxs)("dl",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bw,{side:"From",ship:{name:bs(a.sender),labels:"installation"===a.sender.kind?[]:a.sender.labels},context:b}),g.map(a=>(0,c.jsx)(bw,{side:"To",ship:a,context:b},a.id))]}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:`Refused by network settings version ${String(a.settingsVersion)}.`})]})}function bw({side:a,ship:b,context:d}){let e=(0,af.chipsOf)(b,d);return(0,c.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[(0,c.jsxs)("dt",{className:"text-meta text-muted-foreground",children:[a," ",(0,c.jsx)("span",{className:"font-medium text-foreground",children:b.name})]}),(0,c.jsx)("dd",{className:"flex min-w-0 flex-wrap items-center gap-1",children:0===e.length?(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"No labels"}):e.map(a=>(0,c.jsx)(as.LabelChip,{chip:a,testId:"network-refusal-label"},a.valueId))})]})}var bx=a.i(591003),by=a.i(38023),bz=a.i(565563),bA=a.i(301851),bB=a.i(190146),bC=a.i(447582),bD=a.i(433217),bE=a.i(514499),bF=a.i(815393),bG=a.i(281418),bH=a.i(167336),bI=a.i(210023),bJ=a.i(370025),bK=a.i(937927);function bL(){let a=(0,bE.useTRPC)(),b=(0,bK.useQueryClient)();return async()=>{await Promise.all([b.invalidateQueries({queryKey:a.fleet.networkRules.queryKey()}),b.invalidateQueries({queryKey:a.fleet.networkRulesDraftChanges.queryKey()}),b.invalidateQueries({queryKey:a.fleet.explainReach.pathKey()})])}}var bM=a.i(804049),bN=a.i(442871);function bO(a,b="applied"){let c=new URLSearchParams([...void 0===a?[]:[["reach",a]],..."draft"===b?[["against","draft"]]:[]]).toString();return""===c?"/network":`/network?${c}`}var bP=a.i(726112),bQ=a.i(328422),bR=a.i(770534),bS=a.i(110572);a.s(["NetworkPageFor",0,function({pickedShipId:a,against:b}){var k,l,m,n;let p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q=(0,e.useRouter)(),R=(0,bM.useNow)(),S=(0,by.useConsoleFrame)(),U=(0,bI.useNeedsAttention)(),W=(0,bH.useLiveFleet)(),X=(0,bz.useAccess)(),Y=X.canEditNetwork,Z=(q=(0,bE.useTRPC)(),(0,bD.useQuery)(q.fleet.networkRules.queryOptions(void 0,{enabled:Y}))),$=void 0!==Z.data&&null!==Z.data.draft,_=$?b:"applied",aa=(k=Y&&$,r=(0,bE.useTRPC)(),(0,bD.useQuery)(r.fleet.networkRulesDraftChanges.queryOptions(void 0,{enabled:k}))),ab=(0,bB.useLabelContext)(),ac=(s=(0,bE.useTRPC)(),t=(0,bD.useQuery)(s.fleet.list.queryOptions({shipKind:["operator","person"],limit:H.PAGE_SIZE_MAX},{enabled:Y})),t.data?.items.filter(bC.isInReadReach)),ad=(l=Y?a:void 0,u=(0,bE.useTRPC)(),(0,bD.useQuery)({...u.fleet.explainReach.queryOptions(void 0===l?bN.skipToken:{fromShipId:l,against:_}),select:aE})),ae=(v=(0,bE.useTRPC)(),(0,bQ.pagedListOf)((0,bP.useInfiniteQuery)(v.fleet.reachRefusals.infiniteQueryOptions({limit:bQ.CONSOLE_PAGE_SIZE},{enabled:Y,getNextPageParam:bQ.nextCursorOf})))),af=(w=(0,bE.useTRPC)(),(0,bD.useQuery)(w.fleet.declaredNetworkRules.queryOptions(void 0,{enabled:Y}))),ag=(0,bF.useListedShips)(function(a){let b=a.rules.flatMap(a=>[...a.from,...a.to].flatMap(a=>T(a)&&"*"!==a.owner&&"#"!==a.owner?[a.owner]:[])),c=a.declarers.flatMap(a=>"ship"===a.kind?[a.shipId]:[]),{draftChanges:d}=a;return[...new Set([...b,...c,...void 0===d?[]:V.flatMap(a=>[...d[a].gained,...d[a].lost]).flatMap(a=>[a.fromShipId,a.toShipId]),...void 0===a.pickedShipId?[]:[a.pickedShipId,...a.reachableShipIds??[]]])]}({rules:[...Z.data?.applied.rules??[],...Z.data?.draft?.rules??[]],declarers:af.data?.map(a=>a.declarer)??[],...void 0===aa.data?{}:{draftChanges:aa.data},...void 0===a?{}:{pickedShipId:a},...void 0===ad.data?{}:{reachableShipIds:ad.data}})),ah=[...ag?.values()??[]],ai=(x=(0,bE.useTRPC)(),y=(0,bD.useQuery)(x.fleet.shipCounts.queryOptions()),y.data?.filter(a=>"viewer"!==a.kind).reduce((a,b)=>a+b.active,0)),[aj,ak]=(0,f.useState)(""),al=(0,bG.useShipSearch)("",Y)??[],am=(0,bG.useShipSearch)(aj,Y)??[],an=aH([...new Map([...al.slice(0,1),...am].map(a=>[a.id,a])).values()]),ao=(z=(0,bE.useTRPC)(),(0,bD.useQuery)(z.fleet.builtInRules.queryOptions(void 0,{enabled:Y}))),ap=(A=(0,bE.useTRPC)(),B=(0,bK.useQueryClient)(),{setViewerRead:a=>{C.mutate({rule:"viewerRead",isOn:a})},isPending:(C=(0,bJ.useMutation)(A.fleet.setBuiltInRule.mutationOptions({onSuccess:()=>B.invalidateQueries({queryKey:A.fleet.builtInRules.queryKey()})}))).isPending,error:C.error?.message}),aq=(D=(0,bE.useTRPC)(),E=bL(),(0,bJ.useMutation)(D.fleet.saveNetworkRulesDraft.mutationOptions({onSuccess:E}))),ar=(F=(0,bE.useTRPC)(),G=(0,bK.useQueryClient)(),I=bL(),(0,bJ.useMutation)(F.fleet.applyNetworkRules.mutationOptions({onSuccess:async()=>{await Promise.all([I(),G.invalidateQueries({queryKey:F.fleet.builtInRules.queryKey()})])}}))),as=(J=(0,bE.useTRPC)(),K=bL(),(0,bJ.useMutation)(J.fleet.discardNetworkRulesDraft.mutationOptions({onSuccess:K}))),at=(L=(0,bE.useTRPCClient)(),(0,bJ.useMutation)({mutationFn:async()=>{var a;let b,c,d,{file:e,leftOut:f}=await L.fleet.exportNetworkRules.query(),g=(b=e.fleet.name.toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-|-$/g,""),`network-rules-${b}-v${String(e.rulesVersion)}.json`);return a=`${JSON.stringify(e,null,2)}
1
+ module.exports=[271915,a=>{"use strict";var b,c=a.i(187924),d=a.i(265913),e=a.i(50944),f=a.i(572131),g=a.i(88191),h=a.i(24173),i=a.i(240392),j=a.i(350808),k=a.i(139353),l=a.i(176166),m=a.i(945469);let n={argo:"You turn it on or off.",rules:"Applying rules turns it off; applying none turns it on again."};function o({rows:a,error:b,onRetry:d,isTurning:e,turnError:f,onViewerReadChange:g}){let h;return h=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the built-in rules",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the built-in rules"}):(0,c.jsx)("ul",{className:"flex flex-col divide-y divide-border",children:a.map(a=>(0,c.jsxs)("li",{"data-testid":"network-built-in-rule",className:"flex items-start justify-between gap-3 py-2 first:pt-0 last:pb-0",children:[(0,c.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,c.jsx)("span",{className:"text-body font-medium","data-testid":"network-built-in-rule-name",children:a.name}),(0,c.jsxs)("span",{className:"text-meta text-muted-foreground",children:[a.meaning," ","never"===a.turnedBy?null:n[a.turnedBy]]})]}),"argo"===a.turnedBy?(0,c.jsx)(m.Switch,{checked:a.isOn,disabled:e,"aria-label":`${a.name}: ${a.isOn?"on":"off"}`,"data-testid":"network-built-in-viewer-read",onCheckedChange:a=>{g(a)}}):(0,c.jsx)(l.Badge,{variant:"outline","data-testid":"network-built-in-rule-state",children:"never"===a.turnedBy?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(k.Lock,{"aria-hidden":!0}),"Never off"]}):a.isOn?"On":"Off"})]},a.key))}),(0,c.jsxs)("section",{"aria-labelledby":"network-built-in","data-testid":"network-built-in",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-built-in",className:"text-body font-semibold",children:"Built-in rules"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"The fleet’s own rules, beside yours and the declared ones. They hold before any rule below."}),h,void 0===f?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t turn the viewer reading",description:f})]})}var p=a.i(818783),q=a.i(793817),r=a.i(156757),s=a.i(902811);let t=r.z.enum(["messages:send","messages:receive","messages:force","messages:resend","fleet:read","fleet:commission","fleet:manage","crew:assign","crew:run","labels:define","labels:assign","fleet:network","fleet:on-behalf","fleet:person","fleet:owner","fleet:explain","fleet:connect","labels:any","fleet:verify","scopes:declare","scopes:grant","meetings:open"]),u=["messages","fleet","crew","labels","scopes","meetings"],v="[a-z][a-z0-9-]{0,31}";RegExp(`^${v}$`);let w=RegExp(`^${v}:${v}$`),x=r.z.string().regex(w,"A scope is <namespace>:<action>").refine(a=>{var b;return b=a.slice(0,a.indexOf(":")),!u.some(a=>a===b)||t.safeParse(a).success},"No such core scope");r.z.enum(["messages:resend","fleet:read","fleet:commission","fleet:manage","crew:assign","crew:run","labels:define","labels:assign","fleet:network","fleet:on-behalf","fleet:person","fleet:owner","fleet:explain","fleet:connect","labels:any","fleet:verify","meetings:open"]);let y=r.z.enum(["operator","agent","viewer","person","app","plugin"]);r.z.enum(["agent","person","app","plugin"]),r.z.enum(["DEVICE","CLOUD","SERVER","OTHER"]);let z=r.z.enum(["awaitingCrew","crewed","retired"]);r.z.enum(["ship","type","meeting"]),r.z.enum(["pending","received","handed","acknowledged","handled","notHandled","undeliverable","dismissed","abandoned"]),r.z.enum(["FleetInitialised","ShipCommissioned","OwnerSet","OwnerChanged","ShipClaimed","LeaseRevoked","CredentialRevoked","StartingPromptIssued","OperatorPasswordReset","OperatorLoginSet","MessageAccepted","LeasePushed","DeliveryReceived","DeliveryHanded","DeliveryAcknowledged","DeliveryHandled","DeliveryNotHandled","DeliveryOverdue","DeliveryUndeliverable","DeliveryReturned","ShipRetired","DeliveryAbandoned","DeliveryDismissed","ShipRenamed","ShipReported","StatementSet","TurnReported","SignInTicketIssued","FleetLimitsChanged","ViewerSessionStarted","CrewRequested","CrewRequestRemoved","CrewAssigned","CrewStatusChanged","CrewRequestExplained","CrewRequestGivenBack","LabelDefined","LabelValuesChanged","LabelRetired","LabelAssigned","LabelUnassigned","LabelDeleted","WorktreeClearRequested","WorktreeCleared","WorktreeClearRemoved","NetworkRulesSet","NetworkRulesDeclared","NetworkRulesDraftSaved","NetworkRulesDraftDiscarded","NetworkPluginRegistered","NetworkPluginUnregistered","BuiltInRuleChanged","ScopesDeclared","ScopesChanged","PluginConnected","PluginDisconnected","VerifiedFactsSet","VerifiedFactsRemoved","MeetingOpened","ParticipantAdded","MicRequested","MicRequestWithdrawn","MicGiven","MicReleased","MicTaken","MicPatternSet","ParticipantLeft","ParticipantRejoined","ParticipantRevoked","OwnershipTransferred","ModeratorNamed","MeetingEnded"]);let A=r.z.string().min(1).max(128).brand();r.z.object({iss:r.z.string(),aud:(0,s.idSchema)("fleet"),sub:A,org:r.z.string().min(1),scope:r.z.string(),group:r.z.array(r.z.string()),person_ship:(0,s.idSchema)("ship").optional(),argo:r.z.boolean().optional(),iat:r.z.number(),exp:r.z.number()}).transform((a,b)=>{let c=a.scope.split(" ").filter(a=>""!==a),d=r.z.array(x).safeParse(c);return d.success?{issuer:a.iss,fleetId:a.aud,accountId:a.sub,organisationId:a.org,scopes:d.data,groupValues:a.group,personShipId:a.person_ship??null,isArgoAllowed:a.argo??!1,issuedAt:new Date(1e3*a.iat),endsAt:new Date(1e3*a.exp)}:(b.addIssue({code:"custom",message:"scope holds a malformed or unknown scope",path:["scope"]}),r.z.NEVER)}),new TextEncoder;let B=r.z.record(r.z.string(),r.z.json()),C=["crewing","running","restarting","crashed","releasing"],D=r.z.enum(C),E=["none","needsCrew","crewedByHand",...C],F=r.z.enum(E),G=`A reason is one line of at most ${String(200)} characters`;r.z.object({shipId:(0,s.idSchema)("ship"),settings:B}),r.z.object({settingsVersion:r.z.int().min(1)}),r.z.object({shipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.object({settingsVersion:r.z.int().min(1),requestedAt:r.z.iso.datetime(),assignedTo:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable(),status:D.nullable(),reason:r.z.string().nullable(),crewedBy:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable(),attempt:r.z.int().min(0),startedAt:r.z.iso.datetime().nullable(),givenBack:r.z.array(r.z.object({trierarch:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}),settingsVersion:r.z.int().min(1),reason:r.z.string(),givenBackAt:r.z.iso.datetime()}))}).extend({settings:B}),r.z.object({shipId:(0,s.idSchema)("ship"),trierarchShipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship"),status:D,attempt:r.z.int().min(0).optional(),startedAt:r.z.iso.datetime().nullable().optional()}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship")}),r.z.strictObject({}),r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),settings:B,settingsVersion:r.z.int().min(1),requestedAt:r.z.iso.datetime(),status:D.nullable(),isFinal:r.z.boolean(),ownerShipId:(0,s.idSchema)("ship").nullable(),ownerName:r.z.string().nullable()})),r.z.object({shipId:(0,s.idSchema)("ship"),reason:r.z.string().trim().max(200,G).refine(a=>!/[\r\n]/.test(a),G).nullable()}),r.z.strictObject({}),r.z.object({shipId:(0,s.idSchema)("ship"),settingsVersion:r.z.int().min(1),reason:r.z.string().trim().min(1,G).max(200,G).refine(a=>!/[\r\n]/.test(a),G)}),r.z.strictObject({});var H=a.i(77458);function I(a){return r.z.object({cursor:a.optional(),limit:r.z.int().min(1).max(H.PAGE_SIZE_MAX).optional()})}let J=r.z.string(),K=r.z.object({id:(0,s.idSchema)("labelValue"),value:r.z.string()}),L=r.z.object({labelId:(0,s.idSchema)("label"),key:r.z.string(),valueId:(0,s.idSchema)("labelValue"),value:r.z.string()}),M=r.z.enum(["console","claudeCode","codex","trierarch","plugin","other"]),N=r.z.object({query:r.z.string().optional(),name:r.z.string().optional(),status:r.z.array(z).optional(),type:r.z.array(r.z.string()).optional(),shipKind:r.z.array(y).optional(),crewRequest:r.z.array(F).optional(),assignedTo:r.z.array((0,s.idSchema)("ship")).optional(),needsCrew:r.z.enum(["withTrierarchs","withoutTrierarchs"]).optional(),valueIds:r.z.array((0,s.idSchema)("labelValue")).optional(),shipIds:r.z.array((0,s.idSchema)("ship")).optional(),kind:r.z.array(M).optional(),pluginShipIds:r.z.array((0,s.idSchema)("ship")).optional()});r.z.object({filter:N.optional()}).optional(),r.z.object({status:r.z.array(z).optional()}).optional(),r.z.array(r.z.string());let O=r.z.object({column:r.z.enum(["ship","status","report","runsOn","seen","requested"]),direction:r.z.enum(["ascending","descending"])}),P=r.z.object({isEmpty:r.z.boolean(),value:r.z.string(),name:r.z.string(),id:(0,s.idSchema)("ship")});I(r.z.string().max(4096).transform(function(a){try{let b=atob(a.replaceAll("-","+").replaceAll("_","/"));return JSON.parse(new TextDecoder().decode(Uint8Array.from(b,a=>a.charCodeAt(0))))}catch{return}}).pipe(P)).extend({...N.shape,sort:O.optional()}).optional(),r.z.object({key:J,values:r.z.array(J)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(K)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(J)}),r.z.object({values:r.z.array(K)}),r.z.object({labelId:(0,s.idSchema)("label")}),r.z.object({key:J,value:J}),r.z.object({labelId:(0,s.idSchema)("label"),valueId:(0,s.idSchema)("labelValue")}),r.z.object({shipId:(0,s.idSchema)("ship"),valueId:(0,s.idSchema)("labelValue")}),r.z.object({});let Q=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),id:(0,s.idSchema)("ship"),name:r.z.string()}),r.z.object({kind:r.z.literal("installation")})]),R=r.z.object({id:(0,s.idSchema)("label"),key:r.z.string(),values:r.z.array(K),owner:Q});r.z.array(R.extend({shipCount:r.z.int().min(0),values:r.z.array(K.extend({shipCount:r.z.int().min(0)}))}));let S=r.z.union([(0,s.idSchema)("labelValue"),r.z.object({labelId:(0,s.idSchema)("label"),value:r.z.enum(["*","#"])}),r.z.object({owner:r.z.union([(0,s.idSchema)("ship"),r.z.enum(["*","#"])])})]);function T(a){return"string"!=typeof a&&"owner"in a}let U=r.z.array(S),V=["send","read","manage"],W=r.z.object({verb:r.z.enum(V),from:U,to:U}),X=r.z.array(W).nullable();r.z.object({rules:X}),r.z.object({savedAgainstVersion:r.z.int().min(0)}),r.z.object({version:r.z.int().min(0)}),r.z.object({applied:r.z.object({rules:X,version:r.z.int().min(0)}),draft:r.z.object({rules:X,savedAt:r.z.iso.datetime(),savedAgainstVersion:r.z.int().min(0)}).nullable()}),r.z.object({});let Y=["argo","owner","answer","pluginRead","meeting","viewerRead","installation","open"];r.z.object({rule:r.z.enum(Y),isOn:r.z.boolean()});let Z=r.z.object({rule:r.z.enum(Y),isOn:r.z.boolean()});r.z.array(Z),r.z.object({version:r.z.int().min(0)}),r.z.object({rules:r.z.array(W)}),r.z.object({rules:r.z.int().min(0)});let $=r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),shipId:(0,s.idSchema)("ship")}),r.z.object({kind:r.z.literal("installation")})]);r.z.array(r.z.object({declarer:$,rules:r.z.array(W)}));let _=r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string(),labels:r.z.array(L),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),aa=r.z.discriminatedUnion("kind",[_.extend({kind:r.z.literal("ship")}),r.z.object({kind:r.z.literal("account"),accountId:A,labels:r.z.array(L),personShip:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),r.z.object({kind:r.z.literal("installation")})]),ab=r.z.object({id:(0,s.idSchema)("reachRefusal"),at:r.z.iso.datetime(),sender:aa,askedBy:_.nullable(),recipient:r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),ship:_}),r.z.object({kind:r.z.literal("type"),type:r.z.string(),ships:r.z.array(_)})]),verb:r.z.enum(V),settingsVersion:r.z.int().min(1)});I((0,s.idSchema)("reachRefusal")),b=(0,s.idSchema)("reachRefusal"),r.z.object({items:r.z.array(ab),nextCursor:b.nullable()}),r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship").optional(),against:r.z.enum(["applied","draft"]).optional()});let ac=r.z.union([r.z.object({builtIn:r.z.enum(Y)}),r.z.object({rule:r.z.int().min(0)}),r.z.object({declared:$,index:r.z.int().min(0)})]),ad=r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rule:ac}));r.z.object({send:ad,read:ad,manage:ad});let ae=r.z.array(r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship"),rule:ac}));r.z.object({send:r.z.object({gained:ae,lost:ae}),read:r.z.object({gained:ae,lost:ae}),manage:r.z.object({gained:ae,lost:ae})});var af=a.i(565230);let ag={send:"May send to",read:"May read",manage:"May manage"};function ah(a,b){return null===a?{kind:"all-to-all"}:{kind:"rules",rules:a.map(a=>({key:b(),verb:a.verb,from:[...a.from],to:[...a.to]}))}}function ai(a){return"all-to-all"===a.kind?null:a.rules.map(a=>({verb:a.verb,from:[...a.from],to:[...a.to]}))}function aj(a,b){return b?"rules"===a.kind?a:{kind:"rules",rules:[]}:{kind:"all-to-all"}}function ak(a,b){return"all-to-all"===a.kind?a:{kind:"rules",rules:a.rules.map(a=>a.key===b.key?b.change(a):a)}}function al(a,b){return am(a)===am(b)}function am(a){return"string"==typeof a?a:T(a)?`owner=${a.owner}`:`${a.labelId}=${a.value}`}let an={"*":"Any value","#":"The same value as the other side"},ao={"*":"Any owner","#":"The same owner as the other side"};function ap(a,b){let c=[],d=[],e=[];for(let f of a){if(T(f)){let a=function(a,b){if("*"===a.owner||"#"===a.owner)return{term:a,text:`owner=${a.owner}`};let c=b.ships.find(b=>b.id===a.owner);return void 0===c?void 0:{term:a,text:`owner=${c.name}`}}(f,b);void 0===a?e.push(f):d.push(a);continue}let a=function(a,b){if("string"==typeof a){let[c]=(0,af.pickedChips)([a],b);return void 0===c?void 0:{labelId:c.labelId,key:c.key,value:c.value,mark:c.mark,ownerName:c.ownerName,term:a}}let c=b.labels.find(b=>b.id===a.labelId);if(void 0===c)return;let d=b.ownerOf.get(c.id);return{labelId:c.id,key:c.key,value:a.value,mark:d?.mark??"ship",ownerName:d?.name??(0,af.labelOwnerName)(c.owner),term:a}}(f,b);void 0===a?e.push(f):c.push(a)}return{chips:c,owners:d,unknown:e}}function aq(a,b){let c=a["from"===b?"to":"from"];return a[b].filter(a=>"string"!=typeof a&&!T(a)&&"#"===a.value&&!c.some(b=>al(b,a)))}function ar(a,b){let c=a=>a.some(a=>T(a)&&"#"===a.owner);return c(a[b])&&!c(a["from"===b?"to":"from"])}var as=a.i(136501);let at=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}];function au({declared:a,error:b,onRetry:d,context:e}){let f;return f=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the declared rules",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:2,label:"Loading the declared rules"}):0===a.length?(0,c.jsx)(h.EmptyState,{variant:"section",title:"Nothing declares rules."}):(0,c.jsx)("ul",{className:"flex flex-col gap-3",children:a.map(a=>(0,c.jsxs)("li",{"data-testid":"network-declared-plugin",className:"flex flex-col gap-2",children:[(0,c.jsxs)("h3",{className:"text-meta font-medium","data-testid":"network-declared-by",children:["Declared by ",a.declaredBy]}),(0,c.jsx)("ul",{className:"flex flex-col gap-2",children:a.rules.map(a=>(0,c.jsx)("li",{"data-testid":"network-declared-rule",className:"flex flex-col gap-2 rounded-md border border-border p-3 sm:flex-row sm:items-start sm:gap-3",children:at.map(({side:b,label:d})=>(0,c.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===b?(0,c.jsx)("span",{className:"mt-6 shrink-0 text-meta text-muted-foreground","data-testid":"network-declared-rule-verb",children:ag[a.verb]}):null,"to"===b?(0,c.jsx)(p.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,c.jsx)(av,{label:d,terms:a[b],context:e,testId:`network-declared-rule-${b}`})]},b))},JSON.stringify(a)))})]},a.declarerId))}),(0,c.jsxs)("section",{"aria-labelledby":"network-declared","data-testid":"network-declared",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-declared",className:"text-body font-semibold",children:"Declared by plugins and the installation"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"Rules plugins and the installation need on the labels they own. The networking plugin adds them to your rules; while every ship may message every ship, they change nothing. Only their declarer changes them, and switching a plugin off withdraws its rules."}),f]})}function av({label:a,terms:b,context:d,testId:e}){let{chips:g,unknown:h}=ap(b,d);return(0,c.jsxs)("div",{className:"flex flex-col gap-1","data-testid":e,children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[g.length+h.length===0?(0,c.jsx)("span",{className:"text-body",children:"Every ship"}):null,g.map((a,b)=>(0,c.jsxs)(f.Fragment,{children:[0===b?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(as.LabelChip,{chip:a,testId:`${e}-value`,..."string"==typeof a.term?{}:{meaning:an[a.term.value]}})]},am(a.term))),h.map(a=>(0,c.jsxs)("span",{"data-testid":`${e}-unknown`,title:`${am(a)}: no longer in this fleet`,className:"inline-flex h-5.5 items-center gap-1 rounded-sm border border-tone-attention-border bg-tone-attention-bg px-1.5 text-id text-tone-attention-fg [&_svg]:size-3",children:[(0,c.jsx)(q.CircleAlert,{"aria-hidden":!0}),"A removed label"]},am(a)))]})]})}var aw=a.i(70840),ax=a.i(752562),ay=a.i(164831);let az={name:"crosshair",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]};az.node;let aA=(0,ay.default)(az);var aB=a.i(233540),aC=a.i(831856),aD=a.i(483556);function aE(a){return a.send.map(a=>a.shipId)}let aF=-Math.PI/2,aG=2*Math.PI;function aH(a){return a.filter(a=>"retired"!==a.status&&"viewer"!==a.kind).map(a=>({id:a.id,name:a.name,isOperator:"operator"===a.kind})).sort((a,b)=>Number(b.isOperator)-Number(a.isOperator)||a.name.localeCompare(b.name))}function aI(a){return Math.round(100*a)/100}var aJ=a.i(78398),aK=a.i(994777),aL=a.i(918691);let aM=["applied","draft"],aN={picked:"picked",reached:"may be messaged",unreached:"out of reach"};function aO({ships:a,search:b,sailingShipCount:d,pickedShipId:e,reachableShipIds:f,reachError:g,onPick:h,onRetry:j,against:k="applied",onAgainstChange:l}){var m;let n=(m=void 0===e?void 0:{pickedShipId:e,reachableShipIds:void 0===g?f:void 0},a.map((b,c)=>{var d,e;let f=aF+aG*c/a.length,g=1===a.length;return{ship:b,x:g?50:aI(50+38*Math.cos(f)),y:g?50:aI(50+38*Math.sin(f)),mark:(d=b.id,void 0===(e=m)?"none":d===e.pickedShipId?"picked":void 0===e.reachableShipIds?"none":e.reachableShipIds.includes(d)?"reached":"unreached")}})),o=n.find(a=>"picked"===a.mark),p=n.filter(a=>"reached"===a.mark);return(0,c.jsxs)("section",{"aria-labelledby":"network-reach","data-testid":"network-reach",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-reach",className:"text-body font-semibold",children:"Reach"}),(0,c.jsxs)("p",{className:"text-meta text-muted-foreground",children:["draft"===k?"The fleet as the draft would leave it once applied: pick a ship to see which ships the draft lets it message.":"The fleet as it stands now: pick a ship to see which ships the rules let it message."," ","Argo reaches every ship, and every ship reaches argo."]}),void 0===l?null:(0,c.jsx)(aK.Tabs,{value:k,onValueChange:a=>{let b=aM.find(b=>b===a);void 0!==b&&l(b)},children:(0,c.jsxs)(aK.TabsList,{"aria-label":"Explain reach against",children:[(0,c.jsx)(aK.TabsTrigger,{value:"applied","data-testid":"network-reach-applied",children:"Applied rules"}),(0,c.jsx)(aK.TabsTrigger,{value:"draft","data-testid":"network-reach-draft",children:"Draft"})]})}),void 0===b?null:(0,c.jsx)(aJ.Combobox,{options:b.ships.map(a=>({value:a.id,label:a.name})),value:null,onValueChange:a=>{let c=b.ships.find(b=>b.id===a);void 0!==c&&h(c.id)},toQuery:aL.asHandle,onQueryChange:b.onQueryChange,groupLabel:"Ships",emptyText:a=>`No ship matches "${a}". Retired ships are not listed.`,leadingIcon:(0,c.jsx)(aB.Search,{}),placeholder:"Find a ship to pick","aria-label":"Find a ship to pick","data-testid":"network-reach-search"}),(0,c.jsxs)("div",{className:"relative flex flex-wrap gap-2 md:mx-auto md:block md:aspect-square md:w-full md:max-w-xl","data-testid":"network-reach-graph",children:[void 0===o?null:(0,c.jsx)("svg",{"aria-hidden":!0,viewBox:"0 0 100 100",preserveAspectRatio:"none",className:"pointer-events-none absolute inset-0 hidden size-full md:block",children:p.map(a=>(0,c.jsx)("line",{x1:o.x,y1:o.y,x2:a.x,y2:a.y,vectorEffect:"non-scaling-stroke",className:"stroke-muted-foreground",strokeWidth:1.5},a.ship.id))}),n.map(a=>(0,c.jsx)(aP,{node:a,onPick:()=>{h("picked"===a.mark?void 0:a.ship.id)}},a.ship.id))]}),void 0===g?(0,c.jsx)("p",{className:"text-body",role:"status","data-testid":"network-reach-summary",children:function(a,b=a.length){let c=a.find(a=>"picked"===a.mark);if(void 0===c)return"Pick a ship to see which ships it may message.";let d=Math.max(b,a.length)-1,e=a.filter(a=>"reached"===a.mark).map(a=>a.ship.name);return a.every(a=>"picked"===a.mark||"none"===a.mark)?0===d?`${c.ship.name} is the only ship of the fleet.`:`Finding the ships ${c.ship.name} may message…`:e.length===d?`${c.ship.name} may message every other ship (${String(d)}).`:0===e.length?`${c.ship.name} may message no other ship.`:`${c.ship.name} may message ${String(e.length)} of ${String(d)} ships: ${e.join(", ")}.`}(n,d)}):(0,c.jsx)(i.InlineError,{title:"Couldn’t explain this ship’s reach",description:g,onRetry:j})]})}function aP({node:a,onPick:b}){let{ship:d,mark:e}=a;return(0,c.jsx)(aC.Button,{size:"sm",variant:"secondary","aria-pressed":"picked"===e,"aria-label":"none"===e?d.name:`${d.name}, ${aN[e]}`,icon:function(a){switch(a){case"picked":return(0,c.jsx)(aA,{"aria-hidden":!0});case"reached":return(0,c.jsx)(ax.Check,{"aria-hidden":!0});case"unreached":return(0,c.jsx)(aw.Ban,{"aria-hidden":!0});case"none":return}}(e),"data-testid":"network-reach-ship","data-mark":e,style:{left:`${String(a.x)}%`,top:`${String(a.y)}%`},className:(0,aD.classNames)("md:absolute md:-translate-x-1/2 md:-translate-y-1/2","picked"===e&&"bg-accent ring-2 ring-ring","unreached"===e&&"opacity-45"),onClick:b,children:d.name})}var aQ=a.i(659613),aR=a.i(771736);let aS={apply:{title:"Apply the draft?",description:"Every send, read and manage is checked against the draft from now on, and the rules before it are gone.",action:"Apply draft"},discard:{title:"Discard the draft?",description:"The draft is gone; the applied rules stay as they are.",action:"Discard draft"}};function aT({draft:a,appliedVersion:b,isApplying:d,applyError:e,onApply:g,isDiscarding:h,discardError:j,onDiscard:k}){let[l,m]=(0,f.useState)(null),n=d||h;return(0,c.jsxs)("section",{"aria-labelledby":"network-rules-apply","data-testid":"network-rules-apply",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules-apply",className:"text-body font-semibold",children:"Apply"}),null===a?(0,c.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-rules-apply-state",children:"No draft: the applied rules are the ones above. Save a draft to apply it."}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("p",{className:"text-body","data-testid":"network-rules-apply-state",children:["A draft is saved. Every send, read and manage is checked against the applied rules, at version ",b,", until it is applied."]}),a.savedAgainstVersion===b?null:(0,c.jsxs)("p",{className:"text-meta text-muted-foreground","data-testid":"network-rules-apply-moved",children:["The settings moved from version ",a.savedAgainstVersion," since the draft was saved."]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:d,disabled:h,"data-testid":"network-rules-apply-open",onClick:()=>{m("apply")},children:"Apply draft"}),(0,c.jsx)(aC.Button,{variant:"ghost",isLoading:h,disabled:d,"data-testid":"network-rules-discard-open",onClick:()=>{m("discard")},children:"Discard draft"})]})]}),void 0===e?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t apply the draft",description:e}),void 0===j?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t discard the draft",description:j}),(0,c.jsx)(aQ.AlertDialog,{open:null!==l,onOpenChange:a=>{a||n||m(null)},children:null===l?null:(0,c.jsxs)(aQ.AlertDialogContent,{"data-testid":`network-rules-${l}-dialog`,className:aR.dialogSurface.phoneSheet,children:[(0,c.jsxs)(aQ.AlertDialogHeader,{children:[(0,c.jsx)(aQ.AlertDialogTitle,{children:aS[l].title}),(0,c.jsx)(aQ.AlertDialogDescription,{children:aS[l].description})]}),(0,c.jsxs)(aQ.AlertDialogFooter,{children:[(0,c.jsx)(aQ.AlertDialogClose,{render:(0,c.jsx)(aC.Button,{disabled:n}),children:"Cancel"}),(0,c.jsx)(aC.Button,{variant:"apply"===l?"primary":"destructive",isLoading:n,"data-testid":`network-rules-${l}-confirm`,onClick:()=>{m(null),"apply"===l?g():k()},children:aS[l].action})]})]})})]})}let aU={argo:"argo",owner:"Owner",answer:"Answer",pluginRead:"Connected plugins read",meeting:"Meeting",viewerRead:"Viewer reads",installation:"Installation manages",open:"Open"};function aV(a){switch(a.rule){case"argo":return{key:a.rule,name:aU[a.rule],meaning:"argo sends to, reads and manages every ship, and every ship reaches argo.",isOn:a.isOn,turnedBy:"never"};case"owner":return{key:a.rule,name:aU[a.rule],meaning:"A ship’s owner sends to, reads and manages the ships it owns.",isOn:a.isOn,turnedBy:"never"};case"answer":return{key:a.rule,name:aU[a.rule],meaning:"A ship may always answer the sender of a message it received.",isOn:a.isOn,turnedBy:"never"};case"pluginRead":return{key:a.rule,name:aU[a.rule],meaning:"A plugin argo connected reads every ship, whatever the rules.",isOn:a.isOn,turnedBy:"never"};case"meeting":return{key:a.rule,name:aU[a.rule],meaning:"The participants of a meeting reach each other in it, whatever the rules: its owner reached each when it joined.",isOn:a.isOn,turnedBy:"never"};case"viewerRead":return{key:a.rule,name:aU[a.rule],meaning:"The viewer reads every ship.",isOn:a.isOn,turnedBy:"argo"};case"installation":return{key:a.rule,name:aU[a.rule],meaning:"The installation manages person ships and the ships they own, so a leaver is always released.",isOn:a.isOn,turnedBy:"never"};case"open":return{key:a.rule,name:aU[a.rule],meaning:"Every ship may send to, read and manage every ship.",isOn:a.isOn,turnedBy:"rules"}}}function aW({changes:a,error:b,onRetry:d}){let e;return e=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read what the draft changes",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"detail",rows:3,label:"Loading what the draft changes"}):a.every(({gained:a,lost:b})=>0===a.length&&0===b.length)?(0,c.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-draft-changes-none",children:"The draft changes no reach."}):a.filter(({gained:a,lost:b})=>a.length+b.length>0).map(({verb:a,gained:b,lost:d})=>(0,c.jsxs)("div",{className:"flex flex-col gap-2","data-testid":"network-draft-changes-verb",children:[(0,c.jsx)("h3",{className:"text-meta font-semibold",children:ag[a]}),(0,c.jsx)(aX,{title:"Gains",rows:b,testId:"network-draft-gained"}),(0,c.jsx)(aX,{title:"Loses",rows:d,testId:"network-draft-lost"})]},a)),(0,c.jsxs)("section",{"aria-labelledby":"network-draft-changes","data-testid":"network-draft-changes",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-draft-changes",className:"text-body font-semibold",children:"What the draft changes"}),e]})}function aX({title:a,rows:b,testId:d}){return 0===b.length?null:(0,c.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,c.jsxs)("p",{className:"text-meta text-muted-foreground",children:[a," ",b.length," ",1===b.length?"pair":"pairs"]}),(0,c.jsx)("ul",{className:"flex flex-col gap-1",children:b.map(a=>(0,c.jsxs)("li",{"data-testid":d,className:"flex flex-wrap items-center gap-x-2 text-body",children:[(0,c.jsx)("span",{children:a.from}),(0,c.jsx)(p.ArrowRight,{"aria-label":"to",className:"size-4 text-muted-foreground"}),(0,c.jsx)("span",{children:a.to}),(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a.rule})]},a.key))})]})}var aY=a.i(403512),aZ=a.i(951675),a$=a.i(248136),a_=a.i(387005),a0=a.i(474215),a1=a.i(819721),a2=a.i(238246),a3=a.i(860275);let a4=(0,a1.default)(async()=>{},{loadableGenerated:{modules:[259068]},ssr:!1});function a5({label:a,picked:b,owners:d,ownerChoices:e,unknown:g,groups:h,max:i,isDisabled:j,problem:k,onAdd:l,onRemove:m,testId:n,popoverTestId:o}){let[p,r]=(0,f.useState)(!1),[s,t]=(0,f.useState)(!1),u=b.length+d.length+g.length,v=new Set(d.map(a=>am(a.term))),w=[...["*","#"].map(a=>({term:{owner:a},text:ao[a]})),...e.map(a=>({term:{owner:a.shipId},text:a.name}))];return(0,c.jsxs)("div",{className:"flex flex-col gap-1","data-testid":n,children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,c.jsxs)("div",{className:"flex min-h-(--size-control-sm) flex-wrap items-center gap-1.5",children:[0===u?(0,c.jsx)("span",{className:"text-body",children:"Every ship"}):null,b.map((a,b)=>(0,c.jsxs)(f.Fragment,{children:[0===b?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(as.LabelChip,{chip:a,testId:`${n}-value`,..."string"==typeof a.term?{}:{meaning:an[a.term.value]},...j?{}:{onRemove:()=>{m(a.term)}}})]},am(a.term))),d.map((a,d)=>(0,c.jsxs)(f.Fragment,{children:[0===d&&0===b.length?null:(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,c.jsx)(a6,{owner:a,testId:`${n}-owner`,...!0===j?{}:{onRemove:()=>{m(a.term)}}})]},am(a.term))),g.map(a=>(0,c.jsxs)("span",{"data-testid":`${n}-unknown`,title:`${am(a)}: no longer in this fleet`,className:"inline-flex h-5.5 items-center gap-1 rounded-sm border border-tone-attention-border bg-tone-attention-bg px-1.5 text-id text-tone-attention-fg [&_svg]:size-3",children:[(0,c.jsx)(q.CircleAlert,{"aria-hidden":!0}),"string"!=typeof a&&"owner"in a?"A removed owner":"A removed label",!0===j?null:(0,c.jsx)("button",{type:"button","aria-label":"string"!=typeof a&&"owner"in a?"Remove the removed owner":"Remove the removed label",onClick:()=>{m(a)},className:"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-xs hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring",children:(0,c.jsx)(a0.X,{"aria-hidden":!0})})]},am(a))),u>=i?null:(0,c.jsxs)(a3.Popover,{open:p,onOpenChange:r,children:[(0,c.jsx)(a3.PopoverTrigger,{render:(0,c.jsx)(aC.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,c.jsx)(aY.Plus,{}),disabled:j,"data-testid":`${n}-add`}),children:"Add label"}),(0,c.jsxs)(a3.PopoverContent,{align:"start",sideOffset:6,className:"w-80 p-2","data-testid":o,children:[(0,c.jsx)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:a}),(0,c.jsx)(a4,{groups:h,pickedValueIds:b.flatMap(a=>"string"==typeof a.term?[a.term]:[]),onPick:a=>{r(!1),l(a)},terms:{picked:b.flatMap(a=>"string"==typeof a.term?[]:[a.term]),onPick:a=>{r(!1),l(a)}}}),(0,c.jsxs)("p",{className:"mt-2 flex items-center justify-between gap-2 border-t border-border px-2 pt-2 text-meta text-muted-foreground",children:["All must hold. * is any value, # the same as the other side.",(0,c.jsx)(a2.default,{href:"/labels",className:"font-medium text-foreground hover:underline",children:"Manage labels"})]})]})]}),u>=i?null:(0,c.jsxs)(a3.Popover,{open:s,onOpenChange:t,children:[(0,c.jsx)(a3.PopoverTrigger,{render:(0,c.jsx)(aC.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,c.jsx)(aY.Plus,{}),disabled:j,"data-testid":`${n}-owner-add`}),children:"Add owner"}),(0,c.jsxs)(a3.PopoverContent,{align:"start",sideOffset:6,className:"w-72 p-2","data-testid":`${o}-owner`,children:[(0,c.jsxs)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:[a," the owner"]}),(0,c.jsx)("ul",{className:"flex flex-col",children:w.map(a=>(0,c.jsx)("li",{children:(0,c.jsxs)("button",{type:"button",disabled:v.has(am(a.term)),"data-testid":`${n}-owner-option`,onClick:()=>{t(!1),l(a.term)},className:"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-left text-body hover:bg-accent focus-visible:outline-2 focus-visible:outline-ring disabled:text-muted-foreground disabled:hover:bg-transparent",children:[(0,c.jsx)(a_.UserRound,{"aria-hidden":!0,className:"size-(--size-icon) shrink-0 text-muted-foreground"}),a.text]})},am(a.term)))}),(0,c.jsx)("p",{className:"mt-2 border-t border-border px-2 pt-2 text-meta text-muted-foreground",children:"An owner is argo or a person’s ship. # is the same owner as the other side."})]})]})]}),void 0===k?null:(0,c.jsx)("p",{role:"status",className:"text-meta text-tone-attention-fg","data-testid":`${n}-problem`,children:k}),0===g.length?null:(0,c.jsx)("p",{role:"alert",className:"text-meta text-tone-attention-fg",children:"A label or owner here was removed from the fleet: this side matches no ship until you remove it."})]})}function a6({owner:a,onRemove:b,testId:d}){let{owner:e}=a.term,f="*"===e||"#"===e?`${a.text}. ${ao[e]}`:`${a.text}: ships it owns`;return(0,c.jsxs)("span",{role:"group","aria-label":f,title:f,"data-testid":d,className:"inline-flex h-5.5 max-w-full min-w-0 shrink-0 items-center gap-1 rounded-sm border border-border bg-secondary px-1.5 font-mono text-id whitespace-nowrap text-foreground [&_svg]:size-3 [&_svg]:shrink-0 [&_svg]:text-muted-foreground",children:[(0,c.jsx)(a_.UserRound,{"aria-hidden":!0}),(0,c.jsxs)("span",{className:"truncate",children:[(0,c.jsx)("span",{className:"text-muted-foreground",children:"owner="}),(0,c.jsx)("span",{className:"font-medium",children:a.text.slice(6)})]}),void 0===b?null:(0,c.jsx)("button",{type:"button","aria-label":`Remove ${a.text}`,onClick:b,className:"-mr-1 ml-0.5 inline-flex size-4 items-center justify-center rounded-xs text-muted-foreground hover:bg-accent hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring",children:(0,c.jsx)(a0.X,{"aria-hidden":!0})})]})}let a7=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}],a8=()=>crypto.randomUUID();function a9({rules:a,context:b,limits:d,isSaving:e,saveError:g,savedNote:h,onSave:j}){let[k,l]=(0,f.useState)(()=>ah(a,a8)),m=(0,af.filterGroupsOf)(b),n=b.ships.filter(a=>("operator"===a.kind||"person"===a.kind)&&"retired"!==a.status).map(a=>({shipId:a.id,name:a.name})),o=JSON.stringify(ai(k))!==JSON.stringify(a);return(0,c.jsxs)("section",{"aria-labelledby":"network-rules","data-testid":"network-rules",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules",className:"text-body font-semibold",children:"Rules"}),"all-to-all"===k.kind?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:"No rules: every ship may send to, read and manage every ship."}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"With rules, a ship may send to, read or manage another only when a rule of that verb or a built-in rule allows it."}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{variant:o?"secondary":"primary",icon:(0,c.jsx)(aY.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-on",onClick:()=>{l(aj(k,!0))},children:"Set rules"}),o?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:e,"data-testid":"network-rules-save",onClick:()=>{j(null)},children:"Save draft"}),(0,c.jsx)(aC.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(ah(a,a8))},children:"Discard changes"})]}):null]})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:0===k.rules.length?"No rule allows anything yet: once saved, only the built-in rules hold.":"A ship may send to, read or manage another only when a rule of that verb or a built-in rule allows it."}),0===k.rules.length?null:(0,c.jsx)("ul",{className:"flex flex-col gap-2",children:k.rules.map((a,f)=>(0,c.jsxs)("li",{"data-testid":"network-rule",className:"flex flex-col gap-2 rounded-md border border-border p-3 sm:flex-row sm:items-start sm:gap-3",children:[a7.map(({side:g,label:h})=>{let i,j=ap(a[g],b);return(0,c.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===g?(0,c.jsxs)("div",{className:"flex shrink-0 flex-col gap-1",children:[(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"Verb"}),(0,c.jsxs)(a$.Select,{items:ag,value:a.verb,disabled:e,onValueChange:b=>{var c;V.some(a=>a===b)&&l(ak(k,{key:(c={rule:a.key,verb:b}).rule,change:a=>({...a,verb:c.verb})}))},children:[(0,c.jsx)(a$.SelectTrigger,{"aria-label":`Verb of rule ${String(f+1)}`,"data-testid":"network-rule-verb",size:"sm",children:(0,c.jsx)(a$.SelectValue,{})}),(0,c.jsx)(a$.SelectContent,{children:V.map(a=>(0,c.jsx)(a$.SelectItem,{value:a,children:ag[a]},a))})]})]}):null,"to"===g?(0,c.jsx)(p.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,c.jsx)(a5,{label:h,picked:j.chips,owners:j.owners,ownerChoices:n,unknown:j.unknown,groups:m,max:d.selectorMax,isDisabled:e,...void 0===(i=function(a,b){let[c]=aq(a,b.side);if(void 0===c)return ar(a,b.side)?"owner=# needs owner=# on the other side: # matches the same owner there.":void 0;let d=b.context.labels.find(a=>a.id===c.labelId)?.key??c.labelId;return`${d}=# needs ${d}=# on the other side: # matches the same value there.`}(a,{side:g,context:b}))?{}:{problem:i},testId:`network-rule-${g}`,popoverTestId:"network-rule-popover",onAdd:b=>{var c;l(ak(k,{key:(c={rule:a.key,side:g,term:b,limits:d}).rule,change:a=>{let b=a[c.side];return b.some(a=>al(a,c.term))||b.length>=c.limits.selectorMax?a:{...a,[c.side]:[...b,c.term]}}}))},onRemove:b=>{var c;l(ak(k,{key:(c={rule:a.key,side:g,term:b}).rule,change:a=>({...a,[c.side]:a[c.side].filter(a=>!al(a,c.term))})}))}})]},g)}),(0,c.jsx)(aC.Button,{variant:"ghost",size:"xs",icon:(0,c.jsx)(aZ.Trash2,{"aria-hidden":!0}),disabled:e,"aria-label":`Remove rule ${String(f+1)}`,"data-testid":"network-rule-remove",onClick:()=>{var b;l((b=a.key,"all-to-all"===k.kind?k:{kind:"rules",rules:k.rules.filter(a=>a.key!==b)}))}})]},a.key))}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[k.rules.length>=d.rulesMax?null:(0,c.jsx)(aC.Button,{size:"sm",icon:(0,c.jsx)(aY.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-add",onClick:()=>{var a;l((a={newKey:a8,limits:d},"all-to-all"===k.kind||k.rules.length>=a.limits.rulesMax?k:{kind:"rules",rules:[...k.rules,{key:a.newKey(),verb:"send",from:[],to:[]}]}))},children:"Add rule"}),(0,c.jsxs)("span",{className:"text-meta text-muted-foreground tabular-nums","data-testid":"network-rules-count",children:[k.rules.length," of ",d.rulesMax," rules"]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-border pt-3",children:[(0,c.jsx)(aC.Button,{variant:"primary",isLoading:e,disabled:!o||"rules"===k.kind&&k.rules.some(a=>aq(a,"from").length+aq(a,"to").length>0||ar(a,"from")||ar(a,"to")),"data-testid":"network-rules-save",onClick:()=>{j(ai(k))},children:"Save draft"}),o?(0,c.jsx)(aC.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(ah(a,a8))},children:"Discard changes"}):null,(0,c.jsx)(aC.Button,{variant:"ghost",className:"ml-auto",disabled:e,"data-testid":"network-rules-off",onClick:()=>{l(aj(k,!1))},children:"Remove all rules"})]})]}),void 0===g?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t save the rules",description:g}),void 0===h||o?null:(0,c.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-rules-note",children:h})]})}var ba=a.i(597024);let bb={name:"file-up",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]};bb.node;let bc=(0,ay.default)(bb);var bd=a.i(145098),be=a.i(172309),bf=a.i(132865);function bg(a){return"label"in a?`${a.label}=${a.value}`:`owner=${a.owner}`}function bh(a){return"ship"===a.kind?`ship:${a.name}`:`${a.kind}:${a.key}`}var bi=a.i(37809);function bj(a){switch(a.kind){case"definer":return`${a.key} is defined by ${a.fleetDefiner} here, by ${a.fileDefiner} in the file`;case"values":return`${a.key} has ${a.fleetValues.join(", ")} here; the file gives ${a.fileValues.join(", ")}`;case"ship":return`No active ship is named ${a.name}`}}function bk({difference:a,choice:b,ships:d,onShipQueryChange:e,isDisabled:f,onChange:g}){let h=bh(a),i=`network-import-difference-${h.replace(":","-")}`;return(0,c.jsxs)("fieldset",{className:"flex flex-col gap-2 rounded-lg border border-border bg-card p-3","data-testid":"network-import-difference",children:[(0,c.jsx)("legend",{className:"sr-only",children:bj(a)}),(0,c.jsx)("p",{className:"text-body font-medium","aria-hidden":!0,children:bj(a)}),(0,c.jsx)(bi.RadioGroup,{value:b?.way,disabled:f,onValueChange:b=>{g({difference:a,way:b})},children:a.ways.map(b=>({way:b,text:function(a,b){switch(a.kind){case"definer":return"useExisting"===b?`Use the label ${a.key} as it is, defined by ${a.fleetDefiner}`:`Drop the rules on ${a.key}`;case"values":return"useExisting"===b?`Use the label ${a.key} as it is: it has every value the rules name`:`Drop the rules naming ${a.missingValues.map(b=>`${a.key}=${b}`).join(", ")}`;case"ship":return"pickShip"===b?`Pick an active ship for ${a.name}`:`Drop the rules naming owner=${a.name}`}}(a,b)})).map(({way:a,text:b})=>(0,c.jsxs)("div",{className:"flex items-start gap-2",children:[(0,c.jsx)(bi.RadioGroupItem,{id:`${i}-${a}`,value:a,className:"mt-0.5","data-testid":`network-import-way-${a}`}),(0,c.jsx)("label",{htmlFor:`${i}-${a}`,className:"min-w-0 grow cursor-pointer text-body",children:b})]},a))}),b?.way==="pickShip"?(0,c.jsx)(aJ.Combobox,{options:d.map(a=>({value:a.id,label:a.name})),value:b.shipId??null,onValueChange:b=>{let c=d.find(a=>a.id===b);g({difference:a,way:"pickShip",...void 0===c?{}:{shipId:c.id}})},onQueryChange:e,groupLabel:"Active ships",placeholder:"Type a ship name","aria-label":`The ship for ${"ship"===a.kind?a.name:""}`,"data-testid":"network-import-pick-ship"}):null]})}let bl=["Attach or paste","Check","Overview","Import"];function bm({current:a}){return(0,c.jsx)("ol",{className:"flex flex-wrap gap-x-3 gap-y-1 text-meta","aria-label":"Import steps","data-testid":"network-import-steps",children:bl.map((b,d)=>(0,c.jsxs)("li",{"aria-current":d===a?"step":void 0,className:d===a?"font-semibold text-foreground":"text-muted-foreground",children:[d+1,". ",b]},b))})}function bn(a){let{checked:b,isChecking:d,checkError:e,onCheck:g,onFileChange:h,ships:j,onShipQueryChange:k,isImporting:l,importError:m,onImport:n}=a,[o,p]=(0,f.useState)(""),[q,r]=(0,f.useState)([]),s=j.find(a=>a.isOperator),[t,u]=(0,f.useState)(s?.id),[v,w]=(0,f.useState)(!1),x=d||l,y=a=>{p(a),r([]),w(!1),h()};if(void 0===b)return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:+!!d}),(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bd.Label,{htmlFor:"network-import-attach",children:"Attach the file"}),(0,c.jsx)("input",{id:"network-import-attach",type:"file",accept:"application/json,.json",disabled:x,"data-testid":"network-import-attach",className:"text-body file:mr-3 file:rounded-md file:border file:border-border file:bg-card file:px-3 file:py-1.5",onChange:a=>{let b=a.target.files?.[0];void 0!==b&&b.text().then(y)}})]}),(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bd.Label,{htmlFor:"network-import-paste",children:"Or paste it"}),(0,c.jsx)(be.Textarea,{id:"network-import-paste",isMono:!0,rows:8,value:o,disabled:x,placeholder:'{ "format": "aeolus.network-rules", ... }',"data-testid":"network-import-paste",onChange:a=>{y(a.target.value)}})]}),void 0===e?null:(0,c.jsx)(i.InlineError,{title:"The file doesn’t check",description:`${e}. Nothing changed: fix the file and check it again.`}),(0,c.jsxs)(bf.DialogFooter,{children:[(0,c.jsx)(bf.DialogClose,{render:(0,c.jsx)(aC.Button,{type:"button",disabled:x}),children:"Cancel"}),(0,c.jsx)(aC.Button,{variant:"primary",isLoading:d,disabled:""===o.trim()||x,"data-testid":"network-import-check",onClick:()=>{g(o)},children:d?"Checking…":"Check file"})]})]});let{file:z,newLabels:A,differences:B}=b,C=z.rules??[],D=B.every(a=>{let b=q.find(b=>bh(b.difference)===bh(a));return void 0!==b&&("pickShip"!==b.way||void 0!==b.shipId)}),E=j.find(a=>a.id===t),F=D&&(0===A.length||void 0!==E)&&!x,G=q.flatMap(a=>(function(a){let{difference:b,way:c}=a;return"ship"===b.kind?"pickShip"===c?void 0===a.shipId?void 0:{kind:"ship",name:b.name,way:c,shipId:a.shipId}:{kind:"ship",name:b.name,way:"dropRules"}:{kind:b.kind,key:b.key,way:"useExisting"===c?"useExisting":"dropRules"}})(a)??[]);return v?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:3}),(0,c.jsx)(bf.DialogHeader,{children:(0,c.jsx)(bf.DialogTitle,{children:"Import into the draft?"})}),(0,c.jsxs)("ul",{className:"flex list-disc flex-col gap-1 pl-5 text-body","data-testid":"network-import-consequences",children:[(0,c.jsx)("li",{children:null===z.rules?"The draft becomes all-to-all, every ship reaching every ship.":q.some(a=>"dropRules"===a.way)?`The draft is replaced by the file’s ${String(C.length)} rules, less the ones you chose to drop.`:`The draft is replaced by the file’s ${String(C.length)} rules.`}),0===A.length?null:(0,c.jsxs)("li",{children:[A.join(", ")," ",1===A.length?"is":"are"," defined for ",E?.name??"argo","."]}),(0,c.jsx)("li",{children:"Nothing is in force until you apply the draft."})]}),void 0===m?null:(0,c.jsx)(i.InlineError,{variant:"section",title:"Couldn’t import the file",description:`${m}. Nothing was written.`,onRetry:()=>{w(!1),g(o)}}),(0,c.jsxs)(bf.DialogFooter,{children:[(0,c.jsx)(aC.Button,{type:"button",disabled:x,onClick:()=>{w(!1)},children:"Back"}),(0,c.jsx)(aC.Button,{variant:"primary",isLoading:l,disabled:x,"data-testid":"network-import-confirm",onClick:()=>{n({file:o,resolutions:G,...0===A.length||void 0===E||E.isOperator?{}:{definerShipId:E.id}})},children:l?"Importing…":"Import into the draft"})]})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(bm,{current:2}),(0,c.jsxs)("p",{className:"flex items-start gap-2 text-body",role:"status","data-testid":"network-import-checked",children:[(0,c.jsx)(ba.CircleCheck,{"aria-hidden":!0,className:"mt-0.5 size-(--size-icon-sm) shrink-0 text-tone-ok-fg"}),(0,c.jsxs)("span",{children:["The file checks: ",null===z.rules?"all-to-all, no rules":`${String(C.length)} rules`," and ",z.labels.length," labels, from ",z.fleet.name," at rules version ",z.rulesVersion,", exported"," ",new Date(z.exportedAt).toLocaleString(),"."]})]}),0===B.length?null:(0,c.jsxs)("section",{"aria-labelledby":"network-import-differences",className:"flex flex-col gap-2","data-testid":"network-import-differences",children:[(0,c.jsx)("h3",{id:"network-import-differences",className:"text-body font-semibold",children:1===B.length?"1 difference to resolve":`${String(B.length)} differences to resolve`}),B.map(a=>{let b=bh(a);return(0,c.jsx)(bk,{difference:a,choice:q.find(a=>bh(a.difference)===b),ships:j,onShipQueryChange:k,isDisabled:x,onChange:a=>{r([...q.filter(a=>bh(a.difference)!==b),a])}},b)})]}),0===A.length?null:(0,c.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,c.jsxs)(bd.Label,{htmlFor:"network-import-definer",children:["Define ",A.join(", ")," for"]}),(0,c.jsx)(aJ.Combobox,{id:"network-import-definer",options:j.map(a=>({value:a.id,label:a.name})),value:t??null,onValueChange:a=>{u(j.find(b=>b.id===a)?.id)},onQueryChange:k,groupLabel:"Active ships",placeholder:"Type a ship name","data-testid":"network-import-definer"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"argo never retires, so its labels never go. Another ship must be within your manage reach."})]}),(0,c.jsxs)("section",{"aria-labelledby":"network-import-rules",className:"flex flex-col gap-1.5",children:[(0,c.jsx)("h3",{id:"network-import-rules",className:"text-body font-semibold",children:"Rules in the file"}),0===C.length?(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:null===z.rules?"None: all-to-all.":"None: only the built-in and declared rules."}):(0,c.jsx)("ol",{className:"flex max-h-64 flex-col gap-1 overflow-y-auto font-mono text-code","data-testid":"network-import-rules",children:C.map((a,b)=>{let c,{verb:d,from:e,to:f}=(c=a=>0===a.length?["every ship"]:a.map(bg),{verb:a.verb,from:c(a.from),to:c(a.to)});return{place:b+1,line:`${d}: ${e.join(" ")} → ${f.join(" ")}`}}).map(({place:a,line:b})=>(0,c.jsx)("li",{children:b},a))})]}),(0,c.jsxs)(bf.DialogFooter,{className:"items-center",children:[(0,c.jsx)("span",{className:"mr-auto text-meta text-muted-foreground",children:D?null:"Resolve every difference to import."}),(0,c.jsx)(aC.Button,{type:"button",disabled:x,onClick:()=>{y(o)},children:"Back"}),(0,c.jsx)(aC.Button,{variant:"primary",disabled:!F,"data-testid":"network-import-open-confirm",onClick:()=>{w(!0)},children:"Import…"})]})]})}function bo(a){let{isOpen:b,onOpenChange:d,isChecking:e,isImporting:f}=a;return(0,c.jsx)(bf.Dialog,{open:b,onOpenChange:a=>{e||f||d(a)},children:(0,c.jsxs)(bf.DialogContent,{size:"md","data-testid":"network-import-dialog",className:aR.dialogSurface.phoneFullScreen,children:[(0,c.jsxs)(bf.DialogHeader,{children:[(0,c.jsxs)(bf.DialogTitle,{children:[(0,c.jsx)(bc,{"aria-hidden":!0,className:"mr-2 inline size-(--size-icon-sm)"}),"Import network rules"]}),(0,c.jsx)(bf.DialogDescription,{children:"Rules exported from this fleet or another land in the draft; nothing is in force until you apply it."})]}),b?(0,c.jsx)(bn,{...a}):null]})})}let bp={name:"file-down",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]};bp.node;let bq=(0,ay.default)(bp);function br({isExporting:a,exportError:b,onExport:d,exported:e,canImport:f,onImport:g}){return(0,c.jsxs)("section",{"aria-labelledby":"network-rules-file","data-testid":"network-rules-file",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-rules-file",className:"text-body font-semibold",children:"Export and import"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"Export writes the applied rules and the labels they use as one file, by name. Import brings a file from this fleet or another into the draft."}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(aC.Button,{icon:(0,c.jsx)(bq,{}),isLoading:a,"data-testid":"network-rules-export",onClick:d,children:a?"Exporting…":"Export"}),f?(0,c.jsx)(aC.Button,{icon:(0,c.jsx)(bc,{}),disabled:a,"data-testid":"network-rules-import",onClick:g,children:"Import…"}):null]}),void 0===e||0===e.leftOut.length?null:(0,c.jsxs)("div",{role:"status","data-testid":"network-rules-left-out",className:"flex flex-col gap-1 rounded-lg border border-tone-waiting-border bg-tone-waiting-bg px-3.5 py-2.5 text-meta text-tone-waiting-fg",children:[(0,c.jsxs)("p",{children:[e.name," leaves out ",1===e.leftOut.length?"1 applied rule":`${String(e.leftOut.length)} applied rules`,", as each matches no ship:"]}),(0,c.jsx)("ul",{className:"list-disc pl-5",children:e.leftOut.map(({rule:a,reason:b})=>(0,c.jsxs)("li",{children:["rule ",a," ",b]},a))})]}),void 0===b?null:(0,c.jsx)(i.InlineError,{variant:"field",title:"Couldn’t export the rules",description:`${b}. Nothing was downloaded.`})]})}function bs(a){switch(a.kind){case"ship":return a.name;case"account":return`Account ${a.accountId}`;case"installation":return"The installation"}}var bt=a.i(872872);function bu({refusals:a,error:b,onRetry:d,more:e,context:f,now:g}){let k;return k=void 0!==b?(0,c.jsx)(i.InlineError,{title:"Couldn’t read the refusals",description:b,onRetry:d}):void 0===a?(0,c.jsx)(j.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the refusals"}):0!==a.length||e?(0,c.jsx)("ol",{className:"flex flex-col gap-2","data-testid":"network-refusals-list",children:a.map(a=>(0,c.jsx)(bv,{refusal:a,context:f,now:g},a.id))}):(0,c.jsx)(h.EmptyState,{variant:"section",title:"No send has been refused."}),(0,c.jsxs)("section",{"aria-labelledby":"network-refusals","data-testid":"network-refusals",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,c.jsx)("h2",{id:"network-refusals",className:"text-body font-semibold",children:"Refusals"}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:"The sends the rules refused, newest first, with both ships’ labels as they were then. The sender was told only that its send was refused."}),k,e]})}function bv({refusal:a,context:b,now:d}){let e=new Date(a.at),{recipient:f}=a,g="ship"===f.kind?[f.ship]:f.ships;return(0,c.jsxs)("li",{"data-testid":"network-refusal",className:"flex flex-col gap-2 rounded-md border border-border px-3 py-2.5",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5",children:[(0,c.jsx)("p",{className:"text-body font-medium",children:function(a){let{sender:b,recipient:c}=a,d=`${bs(b)} tried to ${"ship"===b.kind?"message":"reach"}`;switch(c.kind){case"ship":return`${d} ${c.ship.name}.`;case"type":return`${d} the type ${c.type}: ${(0,af.listed)(c.ships.map(a=>a.name))}.`}}(a)}),(0,c.jsx)("time",{dateTime:a.at,title:(0,bt.fullDateTime)(e),className:"text-meta text-muted-foreground tabular-nums",children:(0,bt.relativeTime)(e,d)})]}),(0,c.jsxs)("dl",{className:"flex flex-col gap-1.5",children:[(0,c.jsx)(bw,{side:"From",ship:{name:bs(a.sender),labels:"installation"===a.sender.kind?[]:a.sender.labels},context:b}),g.map(a=>(0,c.jsx)(bw,{side:"To",ship:a,context:b},a.id))]}),(0,c.jsx)("p",{className:"text-meta text-muted-foreground",children:`Refused by network settings version ${String(a.settingsVersion)}.`})]})}function bw({side:a,ship:b,context:d}){let e=(0,af.chipsOf)(b,d);return(0,c.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[(0,c.jsxs)("dt",{className:"text-meta text-muted-foreground",children:[a," ",(0,c.jsx)("span",{className:"font-medium text-foreground",children:b.name})]}),(0,c.jsx)("dd",{className:"flex min-w-0 flex-wrap items-center gap-1",children:0===e.length?(0,c.jsx)("span",{className:"text-meta text-muted-foreground",children:"No labels"}):e.map(a=>(0,c.jsx)(as.LabelChip,{chip:a,testId:"network-refusal-label"},a.valueId))})]})}var bx=a.i(591003),by=a.i(38023),bz=a.i(565563),bA=a.i(301851),bB=a.i(190146),bC=a.i(447582),bD=a.i(433217),bE=a.i(514499),bF=a.i(815393),bG=a.i(281418),bH=a.i(167336),bI=a.i(210023),bJ=a.i(370025),bK=a.i(937927);function bL(){let a=(0,bE.useTRPC)(),b=(0,bK.useQueryClient)();return async()=>{await Promise.all([b.invalidateQueries({queryKey:a.fleet.networkRules.queryKey()}),b.invalidateQueries({queryKey:a.fleet.networkRulesDraftChanges.queryKey()}),b.invalidateQueries({queryKey:a.fleet.explainReach.pathKey()})])}}var bM=a.i(804049),bN=a.i(442871);function bO(a,b="applied"){let c=new URLSearchParams([...void 0===a?[]:[["reach",a]],..."draft"===b?[["against","draft"]]:[]]).toString();return""===c?"/network":`/network?${c}`}var bP=a.i(726112),bQ=a.i(328422),bR=a.i(770534),bS=a.i(110572);a.s(["NetworkPageFor",0,function({pickedShipId:a,against:b}){var k,l,m,n;let p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q=(0,e.useRouter)(),R=(0,bM.useNow)(),S=(0,by.useConsoleFrame)(),U=(0,bI.useNeedsAttention)(),W=(0,bH.useLiveFleet)(),X=(0,bz.useAccess)(),Y=X.canEditNetwork,Z=(q=(0,bE.useTRPC)(),(0,bD.useQuery)(q.fleet.networkRules.queryOptions(void 0,{enabled:Y}))),$=void 0!==Z.data&&null!==Z.data.draft,_=$?b:"applied",aa=(k=Y&&$,r=(0,bE.useTRPC)(),(0,bD.useQuery)(r.fleet.networkRulesDraftChanges.queryOptions(void 0,{enabled:k}))),ab=(0,bB.useLabelContext)(),ac=(s=(0,bE.useTRPC)(),t=(0,bD.useQuery)(s.fleet.list.queryOptions({shipKind:["operator","person"],limit:H.PAGE_SIZE_MAX},{enabled:Y})),t.data?.items.filter(bC.isInReadReach)),ad=(l=Y?a:void 0,u=(0,bE.useTRPC)(),(0,bD.useQuery)({...u.fleet.explainReach.queryOptions(void 0===l?bN.skipToken:{fromShipId:l,against:_}),select:aE})),ae=(v=(0,bE.useTRPC)(),(0,bQ.pagedListOf)((0,bP.useInfiniteQuery)(v.fleet.reachRefusals.infiniteQueryOptions({limit:bQ.CONSOLE_PAGE_SIZE},{enabled:Y,getNextPageParam:bQ.nextCursorOf})))),af=(w=(0,bE.useTRPC)(),(0,bD.useQuery)(w.fleet.declaredNetworkRules.queryOptions(void 0,{enabled:Y}))),ag=(0,bF.useListedShips)(function(a){let b=a.rules.flatMap(a=>[...a.from,...a.to].flatMap(a=>T(a)&&"*"!==a.owner&&"#"!==a.owner?[a.owner]:[])),c=a.declarers.flatMap(a=>"ship"===a.kind?[a.shipId]:[]),{draftChanges:d}=a;return[...new Set([...b,...c,...void 0===d?[]:V.flatMap(a=>[...d[a].gained,...d[a].lost]).flatMap(a=>[a.fromShipId,a.toShipId]),...void 0===a.pickedShipId?[]:[a.pickedShipId,...a.reachableShipIds??[]]])]}({rules:[...Z.data?.applied.rules??[],...Z.data?.draft?.rules??[]],declarers:af.data?.map(a=>a.declarer)??[],...void 0===aa.data?{}:{draftChanges:aa.data},...void 0===a?{}:{pickedShipId:a},...void 0===ad.data?{}:{reachableShipIds:ad.data}})),ah=[...ag?.values()??[]],ai=(x=(0,bE.useTRPC)(),y=(0,bD.useQuery)(x.fleet.shipCounts.queryOptions()),y.data?.filter(a=>"viewer"!==a.kind).reduce((a,b)=>a+b.active,0)),[aj,ak]=(0,f.useState)(""),al=(0,bG.useShipSearch)("",Y)??[],am=(0,bG.useShipSearch)(aj,Y)??[],an=aH([...new Map([...al.slice(0,1),...am].map(a=>[a.id,a])).values()]),ao=(z=(0,bE.useTRPC)(),(0,bD.useQuery)(z.fleet.builtInRules.queryOptions(void 0,{enabled:Y}))),ap=(A=(0,bE.useTRPC)(),B=(0,bK.useQueryClient)(),{setViewerRead:a=>{C.mutate({rule:"viewerRead",isOn:a})},isPending:(C=(0,bJ.useMutation)(A.fleet.setBuiltInRule.mutationOptions({onSuccess:()=>B.invalidateQueries({queryKey:A.fleet.builtInRules.queryKey()})}))).isPending,error:C.error?.message}),aq=(D=(0,bE.useTRPC)(),E=bL(),(0,bJ.useMutation)(D.fleet.saveNetworkRulesDraft.mutationOptions({onSuccess:E}))),ar=(F=(0,bE.useTRPC)(),G=(0,bK.useQueryClient)(),I=bL(),(0,bJ.useMutation)(F.fleet.applyNetworkRules.mutationOptions({onSuccess:async()=>{await Promise.all([I(),G.invalidateQueries({queryKey:F.fleet.builtInRules.queryKey()})])}}))),as=(J=(0,bE.useTRPC)(),K=bL(),(0,bJ.useMutation)(J.fleet.discardNetworkRulesDraft.mutationOptions({onSuccess:K}))),at=(L=(0,bE.useTRPCClient)(),(0,bJ.useMutation)({mutationFn:async()=>{var a;let b,c,d,{file:e,leftOut:f}=await L.fleet.exportNetworkRules.query(),g=(b=e.fleet.name.toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-|-$/g,""),`network-rules-${b}-v${String(e.rulesVersion)}.json`);return a=`${JSON.stringify(e,null,2)}
2
2
  `,c=URL.createObjectURL(new Blob([a],{type:"application/json"})),(d=document.createElement("a")).href=c,d.download=g,d.click(),URL.revokeObjectURL(c),{name:g,leftOut:f}}})),av=(M=(0,bE.useTRPC)(),(0,bJ.useMutation)(M.fleet.checkNetworkRulesFile.mutationOptions())),aw=(N=(0,bE.useTRPC)(),O=(0,bK.useQueryClient)(),P=bL(),(0,bJ.useMutation)(N.fleet.importNetworkRules.mutationOptions({onSuccess:async()=>{await Promise.all([P(),O.invalidateQueries({queryKey:N.fleet.labels.queryKey()})])}}))),[ax,ay]=(0,f.useState)(!1),az=()=>{av.reset(),aw.reset()},{networkRulesMax:aA,shipLabelsMax:aB}=(0,bA.useConsoleConstants)();if((0,bS.useSignInWhenSessionEnds)([U.error,W.error]),Y)if(Z.isError)p=(0,c.jsx)(i.InlineError,{title:"Couldn’t read the network",description:Z.error.message,onRetry:()=>{Z.refetch()}});else if(void 0===Z.data||void 0===ab||void 0===ac)p=(0,c.jsx)(j.LoadingSkeleton,{variant:"detail",rows:4,label:"Loading the network"});else{let b,d,e,f={...ab,ships:[...ah,...ac]};p=(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(o,{rows:void 0===ao.data?void 0:ao.data.map(aV),error:ao.error?.message,onRetry:()=>{ao.refetch()},isTurning:ap.isPending,turnError:ap.error,onViewerReadChange:ap.setViewerRead}),(0,c.jsx)(a9,{rules:(Z.data.draft??Z.data.applied).rules,context:f,limits:{rulesMax:aA,selectorMax:aB},isSaving:aq.isPending,saveError:aq.error?.message,savedNote:void 0===aq.data?void 0:"Draft saved. Nothing changes until it is applied.",onSave:a=>{aq.mutate({rules:a})}},JSON.stringify(Z.data.draft??Z.data.applied)),null===Z.data.draft?null:(0,c.jsx)(aW,{changes:void 0===aa.data?void 0:(m=aa.data,b=new Map(ah.map(a=>[a.id,a.name])),d=a=>a.map(({fromShipId:a,toShipId:c,rule:d})=>({key:`${a}>${c}`,from:b.get(a)??a,to:b.get(c)??c,rule:function(a,b){if("builtIn"in a)return`Built-in: ${aU[a.builtIn]}`;if("rule"in a)return`Rule ${String(a.rule+1)}`;let c="installation"===a.declared.kind?"the installation":b.get(a.declared.shipId)??a.declared.shipId;return`Declared by ${c}, rule ${String(a.index+1)}`}(d,b)})).sort((a,b)=>a.from.localeCompare(b.from)||a.to.localeCompare(b.to)),V.map(a=>({verb:a,gained:d(m[a].gained),lost:d(m[a].lost)}))),error:aa.error?.message,onRetry:()=>{aa.refetch()}}),(0,c.jsx)(aT,{draft:Z.data.draft,appliedVersion:Z.data.applied.version,isApplying:ar.isPending,applyError:ar.error?.message,onApply:()=>{ar.mutate({version:Z.data.applied.version})},isDiscarding:as.isPending,discardError:as.error?.message,onDiscard:()=>{as.mutate()}}),(0,c.jsx)(br,{isExporting:at.isPending,exportError:at.error?.message,exported:at.data,onExport:()=>{at.mutate(void 0,{onSuccess:({name:a,leftOut:b})=>{(0,g.showToast)({title:"Rules exported",description:0===b.length?`Saved as ${a}.`:`Saved as ${a}, leaving out ${String(b.length)}: see Export and import.`,tone:"success"})}})},canImport:X.canDefineLabels,onImport:()=>{az(),ay(!0)}}),(0,c.jsx)(bo,{isOpen:ax,onOpenChange:a=>{ay(a),a||az()},checked:av.data,isChecking:av.isPending,checkError:av.error?.message,onCheck:a=>{aw.reset(),av.mutate({file:a})},onFileChange:az,ships:an,onShipQueryChange:ak,isImporting:aw.isPending,importError:aw.error?.message,onImport:a=>{aw.mutate(a,{onSuccess:({definedLabels:a})=>{ay(!1),az(),(0,g.showToast)({title:"Imported into the draft",description:`${0===a.length?"":`Defined ${a.join(", ")}. `}Look at what the draft changes, then apply it.`,tone:"success"})}})}}),(0,c.jsx)(au,{declared:void 0===af.data?void 0:(n=af.data,e=new Map(ah.map(a=>[a.id,a.name])),n.filter(({rules:a})=>a.length>0).map(({declarer:a,rules:b})=>"installation"===a.kind?{declarerId:"installation",declaredBy:"the installation",rules:b}:{declarerId:a.shipId,declaredBy:e.get(a.shipId)??a.shipId,rules:b}).sort((a,b)=>a.declaredBy.localeCompare(b.declaredBy))),error:af.error?.message,onRetry:()=>{af.refetch()},context:f}),(0,c.jsx)(aO,{ships:aH(ah),search:{ships:an,onQueryChange:ak},...void 0===ai?{}:{sailingShipCount:ai},pickedShipId:a,reachableShipIds:ad.data,reachError:ad.error?.message,onPick:a=>{Q.replace(bO(a,_),{scroll:!1})},against:_,...$?{onAgainstChange:b=>{Q.replace(bO(a,b),{scroll:!1})}}:{},onRetry:()=>{ad.refetch()}}),(0,c.jsx)(bu,{refusals:ae.items,error:ae.isFailed?ae.error?.message:void 0,onRetry:ae.retry,more:ae.hasMore?(0,c.jsx)(bR.LoadMore,{what:"older refusals",isLoading:ae.isLoadingMore,isFailed:ae.isLoadMoreFailed,onLoad:ae.loadMore,area:"network-refusals"}):null,context:f,now:R})]})}else p=(0,c.jsx)(h.EmptyState,{icon:(0,c.jsx)(d.Network,{"aria-hidden":!0}),title:"Only a session holding fleet:network sees the network rules"});return(0,c.jsx)(bx.ListPage,{...S,title:"Network",description:"Who may send to, read or manage whom. The fleet checks the applied rules on every send; a draft changes nothing until it is applied.",live:W.live,children:p})}],271915)}];
3
3
 
4
4
  //# sourceMappingURL=packages_console_app_%28console%29_network_network-page_tsx_0qc3h-9._.js.map