@aeolus-fleet/console 0.27.0 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/packages/console/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/console/.next/build-manifest.json +3 -3
- package/.next/standalone/packages/console/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/[cause]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/fleet-health/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/inbox/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/labels/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/labels/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/labels/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-attention/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/needs-crew/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/network/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/network/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/network/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/settings/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/settings/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/ships/[shipId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/[squadronId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/blueprints/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page/react-loadable-manifest.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/squadrons/templates/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/[shipId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page/server-reference-manifest.json +16 -16
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/(console)/trierarchs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/packages/console/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/packages/console/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/console/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/console/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/console/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/api/reads/[read]/route.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/sign-in/failed/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/sign-in/page.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/app/version/route.js.nft.json +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/[root-of-the-server]__06f_104._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/[root-of-the-server]__1cfwaji._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/_1uqphll._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0mxb_server_app_(console)_squadrons_blueprints_[name]_page_actions_170owr_.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0mxb_server_app_(console)_squadrons_templates_[name]_page_actions_09abrr0.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_fleet-health_page_actions_1gb6-fk.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_needs-crew_page_actions_08gu8-f.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_network_page_actions_1muuv-j.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_settings_page_actions_0b6qztr.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_ships_[shipId]_page_actions_0g2nd1p.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_squadrons_page_actions_1x3afts.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/0ysl_console__next-internal_server_app_(console)_trierarchs_page_actions_1ow37mz.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/1eui__next-internal_server_app_(console)_fleet-health_[cause]_page_actions_1kltvcl.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/1eui__next-internal_server_app_(console)_needs-attention_page_actions_1jfgclw.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/1eui__next-internal_server_app_(console)_squadrons_[squadronId]_page_actions_1lzqlye.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/1eui__next-internal_server_app_(console)_trierarchs_[shipId]_page_actions_0l7bxva.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/_065633k._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{_050ulkd._.js → _0dgwyy6._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/_0eeox-9._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{_1vc4auf._.js → _0ljoc6_._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/_15_xzod._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/_1_9jlty._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{_1j1ejbw._.js → _1calzjj._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/_1u0h4gj._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_common_dist_1_gq_cl._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_18f93ie._.js → packages_console_095mmim._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_2004f3v._.js → packages_console_13ry5_2._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_0969g9_._.js → packages_console_1myu9eb._.js} +2 -2
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_1clix79._.js → packages_console_1pds_ub._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console__next-internal_server_app_(console)_inbox_page_actions_0q9_xye.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console__next-internal_server_app_(console)_labels_page_actions_0tk7mqs.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console__next-internal_server_app_(console)_page_actions_1ftjjyq.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_app_(console)_network_network-page_tsx_0qc3h-9._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_app_(console)_ships_[shipId]_ship-page_tsx_0oahz0r._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_components_organisms_crew-line-dialog_tsx_1qorkk0._.js → packages_console_components_organisms_crew-line-dialog_tsx_1tmwb3z._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_features_ship_ui_organisms_message-sheet_tsx_08bg9ly._.js +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_0ditu5u._.js → packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_11piudw._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_13oketj._.js → packages_console_features_squadrons_organisms_form-squadron-dialog_tsx_1_2jov8._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/{packages_console_features_trierarchs_organisms_clear-worktree-dialog_tsx_1vigea_._.js → packages_console_features_trierarchs_organisms_clear-worktree-dialog_tsx_0dogayz._.js} +1 -1
- package/.next/standalone/packages/console/.next/server/chunks/ssr/packages_console_lib_1b-azvo._.js +1 -1
- package/.next/standalone/packages/console/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/packages/console/.next/server/pages/500.html +1 -1
- package/.next/standalone/packages/console/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/console/.next/server/server-reference-manifest.json +17 -17
- package/.next/standalone/packages/console/.next/static/chunks/0k_f9ghdbhdlh.js +1 -0
- package/.next/standalone/packages/console/.next/static/chunks/{40js517zsadm9.js → 1gmxwgg3tuq9j.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{323r-smxvi-fc.js → 1l5d_-f5_4n13.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{2600yzum9pa4e.js → 1lu3lt0jl2qe-.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{2qc_m8dbgxc8w.js → 2chqk2x196ti0.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/2j2d4nw9_nas6.js +1 -0
- package/.next/standalone/packages/console/.next/static/chunks/{38klmgk3bgj3s.js → 2l7g6epwsx9wf.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{25l_2rj6pvegd.js → 2y5xx24gswylp.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{41ur4zm093e1l.js → 318sjnwsspety.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{2fkwzi80oyuv-.js → 36n7fei4v2kye.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{2n_dccp7oi2ad.js → 3f5v4p3jz0k1g.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/3n6d3yt_vtnne.js +1 -0
- package/.next/standalone/packages/console/.next/static/chunks/{3kvklsjp8y-7e.js → 3o8213x94m4o3.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{0o8q0d16-yt3a.js → 3qrq-wd28w60w.js} +1 -1
- package/.next/standalone/packages/console/.next/static/chunks/{20l4-ecv_oo2h.js → 420usygo4rcxp.js} +1 -1
- package/.next/standalone/packages/console/package.json +3 -3
- package/README.md +2 -2
- package/package.json +3 -3
- package/.next/standalone/packages/console/.next/static/chunks/061rac_vo9o5d.js +0 -1
- package/.next/standalone/packages/console/.next/static/chunks/0sagpcmh6omoj.js +0 -1
- package/.next/standalone/packages/console/.next/static/chunks/18rsibme2venq.js +0 -1
- /package/.next/standalone/packages/console/.next/static/{ZV7FLBaZ7IVExYMj-OJbA → Idv688KqeLyROC1itAuuQ}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/console/.next/static/{ZV7FLBaZ7IVExYMj-OJbA → Idv688KqeLyROC1itAuuQ}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/packages/console/.next/static/{ZV7FLBaZ7IVExYMj-OJbA → Idv688KqeLyROC1itAuuQ}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[71915,a=>{"use strict";var b=a.i(87924),c=a.i(65913),d=a.i(38246),e=a.i(50944),f=a.i(12068),g=a.i(24173),h=a.i(40392),i=a.i(50808),j=a.i(39353),k=a.i(76166),l=a.i(45469);let m={argo:"You turn it on or off.",plugin:"The networking plugin turns it off while your rules apply, and on for all-to-all."};function n({rows:a,error:c,onRetry:d,isTurning:e,turnError:f,onViewerReadChange:g}){let o;return o=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the built-in rules",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the built-in rules"}):(0,b.jsx)("ul",{className:"flex flex-col divide-y divide-border",children:a.map(a=>(0,b.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,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-body font-medium","data-testid":"network-built-in-rule-name",children:a.name}),(0,b.jsxs)("span",{className:"text-meta text-muted-foreground",children:[a.meaning," ","never"===a.turnedBy?null:m[a.turnedBy]]})]}),"argo"===a.turnedBy?(0,b.jsx)(l.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,b.jsx)(k.Badge,{variant:"outline","data-testid":"network-built-in-rule-state",children:"never"===a.turnedBy?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(j.Lock,{"aria-hidden":!0}),"Never off"]}):a.isOn?"On":"Off"})]},a.key))}),(0,b.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,b.jsx)("h2",{id:"network-built-in",className:"text-body font-semibold",children:"Built-in rules"}),(0,b.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."}),o,void 0===f?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t turn the viewer reading",description:f})]})}var o=a.i(18783),p=a.i(93817),q=a.i(72131),r=a.i(56757),s=a.i(2811);let t=r.z.string(),u=r.z.object({id:(0,s.idSchema)("labelValue"),value:r.z.string()}),v=r.z.object({labelId:(0,s.idSchema)("label"),key:r.z.string(),valueId:(0,s.idSchema)("labelValue"),value:r.z.string()});r.z.object({valueIds:r.z.array((0,s.idSchema)("labelValue")).optional()}).optional(),r.z.object({key:t,values:r.z.array(t)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(u)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(t)}),r.z.object({values:r.z.array(u)}),r.z.object({labelId:(0,s.idSchema)("label")}),r.z.object({key:t,value:t}),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 w=r.z.object({id:(0,s.idSchema)("label"),key:r.z.string(),values:r.z.array(u),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()})});r.z.array(w);let x=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 y(a){return"string"!=typeof a&&"owner"in a}let z=r.z.array(x),A=["send","read","manage"],B=r.z.object({verb:r.z.enum(A),from:z,to:z});r.z.object({rules:r.z.array(B)});let C=["argo","owner","answer","viewerRead","open"];r.z.object({rule:r.z.enum(C),verb:r.z.enum(A).optional(),isOn:r.z.boolean()}).refine(a=>"open"===a.rule==(void 0!==a.verb),{message:"open names its verb, and no other built-in rule names one",path:["verb"]});let D=r.z.union([r.z.object({rule:r.z.enum(["argo","owner","answer","viewerRead"]),isOn:r.z.boolean()}),r.z.object({rule:r.z.literal("open"),verb:r.z.enum(A),isOn:r.z.boolean()})]);r.z.array(D),r.z.object({version:r.z.int().min(1)}),r.z.object({rules:r.z.array(B)}),r.z.object({rules:r.z.int().min(0)}),r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rules:r.z.array(B)})),r.z.object({whileUnavailable:r.z.enum(["block-all","open-all","keep-latest"]),notRespondingAfterSeconds:r.z.int().min(60).max(86400)});let E=r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string(),labels:r.z.array(v),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),F=r.z.object({id:(0,s.idSchema)("reachRefusal"),at:r.z.iso.datetime(),sender:E,askedBy:E.nullable(),recipient:r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),ship:E}),r.z.object({kind:r.z.literal("type"),type:r.z.string(),ships:r.z.array(E)})]),verb:r.z.enum(A),settingsVersion:r.z.int().min(1),whilePluginUnavailable:r.z.enum(["block-all","keep-latest"]).nullable()});r.z.array(F),r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship").optional()});let G=r.z.union([r.z.object({builtIn:r.z.enum(C)}),r.z.object({plugin:r.z.int().min(0)}),r.z.object({declared:(0,s.idSchema)("ship"),index:r.z.int().min(0)})]),H=r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rule:G}));r.z.object({send:H,read:H,manage:H});var I=a.i(65230);let J={send:"May send to",read:"May read",manage:"May manage"};function K(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 L(a){return"all-to-all"===a.kind?null:a.rules.map(a=>({verb:a.verb,from:[...a.from],to:[...a.to]}))}function M(a,b){return b?"rules"===a.kind?a:{kind:"rules",rules:[]}:{kind:"all-to-all"}}function N(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 O(a,b){return P(a)===P(b)}function P(a){return"string"==typeof a?a:y(a)?`owner=${a.owner}`:`${a.labelId}=${a.value}`}let Q={"*":"Any value","#":"The same value as the other side"},R={"*":"Any owner","#":"The same owner as the other side"};function S(a,b){let c=[],d=[],e=[];for(let f of a){if(y(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,I.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??c.owner.name,term:a}}(f,b);void 0===a?e.push(f):c.push(a)}return{chips:c,owners:d,unknown:e}}function T(a,b){let c=a["from"===b?"to":"from"];return a[b].filter(a=>"string"!=typeof a&&!y(a)&&"#"===a.value&&!c.some(b=>O(b,a)))}function U(a,b){let c=a=>a.some(a=>y(a)&&"#"===a.owner);return c(a[b])&&!c(a["from"===b?"to":"from"])}var V=a.i(36501);let W=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}];function X({declared:a,error:c,onRetry:d,context:e}){let f;return f=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the declared rules",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:2,label:"Loading the declared rules"}):0===a.length?(0,b.jsx)(g.EmptyState,{variant:"section",title:"No plugin declares rules."}):(0,b.jsx)("ul",{className:"flex flex-col gap-3",children:a.map(a=>(0,b.jsxs)("li",{"data-testid":"network-declared-plugin",className:"flex flex-col gap-2",children:[(0,b.jsxs)("h3",{className:"text-meta font-medium","data-testid":"network-declared-by",children:["Declared by ",a.declaredBy]}),(0,b.jsx)("ul",{className:"flex flex-col gap-2",children:a.rules.map(a=>(0,b.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:W.map(({side:c,label:d})=>(0,b.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===c?(0,b.jsx)("span",{className:"mt-6 shrink-0 text-meta text-muted-foreground","data-testid":"network-declared-rule-verb",children:J[a.verb]}):null,"to"===c?(0,b.jsx)(o.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,b.jsx)(Y,{label:d,terms:a[c],context:e,testId:`network-declared-rule-${c}`})]},c))},JSON.stringify(a)))})]},a.shipId))}),(0,b.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,b.jsx)("h2",{id:"network-declared",className:"text-body font-semibold",children:"Declared by plugins"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"Rules plugins 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 the plugin changes them, and switching it off withdraws them."}),f]})}function Y({label:a,terms:c,context:d,testId:e}){let{chips:f,unknown:g}=S(c,d);return(0,b.jsxs)("div",{className:"flex flex-col gap-1","data-testid":e,children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[f.length+g.length===0?(0,b.jsx)("span",{className:"text-body",children:"Every ship"}):null,f.map((a,c)=>(0,b.jsxs)(q.Fragment,{children:[0===c?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(V.LabelChip,{chip:a,testId:`${e}-value`,..."string"==typeof a.term?{}:{meaning:Q[a.term.value]}})]},P(a.term))),g.map(a=>(0,b.jsxs)("span",{"data-testid":`${e}-unknown`,title:`${P(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,b.jsx)(p.CircleAlert,{"aria-hidden":!0}),"A removed label"]},P(a)))]})]})}var Z=a.i(70840),$=a.i(52562),_=a.i(64831);let aa={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"}]]};aa.node;let ab=(0,_.default)(aa);var ac=a.i(80487);function ad(a){return a.send.map(a=>a.shipId)}let ae=-Math.PI/2,af=2*Math.PI;function ag(a){return Math.round(100*a)/100}let ah={picked:"picked",reached:"may be messaged",unreached:"out of reach"};function ai({ships:a,pickedShipId:c,reachableShipIds:d,reachError:e,onPick:f,onRetry:g}){var i;let j=(i=void 0===c?void 0:{pickedShipId:c,reachableShipIds:void 0===e?d:void 0},a.map((b,c)=>{var d,e;let f=ae+af*c/a.length,g=1===a.length;return{ship:b,x:g?50:ag(50+38*Math.cos(f)),y:g?50:ag(50+38*Math.sin(f)),mark:(d=b.id,void 0===(e=i)?"none":d===e.pickedShipId?"picked":void 0===e.reachableShipIds?"none":e.reachableShipIds.includes(d)?"reached":"unreached")}})),k=j.find(a=>"picked"===a.mark),l=j.filter(a=>"reached"===a.mark);return(0,b.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,b.jsx)("h2",{id:"network-reach",className:"text-body font-semibold",children:"Reach"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"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."}),(0,b.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===k?null:(0,b.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:l.map(a=>(0,b.jsx)("line",{x1:k.x,y1:k.y,x2:a.x,y2:a.y,vectorEffect:"non-scaling-stroke",className:"stroke-muted-foreground",strokeWidth:1.5},a.ship.id))}),j.map(a=>(0,b.jsx)(aj,{node:a,onPick:()=>{f("picked"===a.mark?void 0:a.ship.id)}},a.ship.id))]}),void 0===e?(0,b.jsx)("p",{className:"text-body",role:"status","data-testid":"network-reach-summary",children:function(a){let b=a.find(a=>"picked"===a.mark);if(void 0===b)return"Pick a ship to see which ships it may message.";let c=a.length-1,d=a.filter(a=>"reached"===a.mark).map(a=>a.ship.name);return a.every(a=>"picked"===a.mark||"none"===a.mark)?0===c?`${b.ship.name} is the only ship of the fleet.`:`Finding the ships ${b.ship.name} may message…`:d.length===c?`${b.ship.name} may message every other ship (${String(c)}).`:0===d.length?`${b.ship.name} may message no other ship.`:`${b.ship.name} may message ${String(d.length)} of ${String(c)} ships: ${d.join(", ")}.`}(j)}):(0,b.jsx)(h.InlineError,{title:"Couldn’t explain this ship’s reach",description:e,onRetry:g})]})}function aj({node:a,onPick:c}){let{ship:d,mark:e}=a;return(0,b.jsx)(f.Button,{size:"sm",variant:"secondary","aria-pressed":"picked"===e,"aria-label":"none"===e?d.name:`${d.name}, ${ah[e]}`,icon:function(a){switch(a){case"picked":return(0,b.jsx)(ab,{"aria-hidden":!0});case"reached":return(0,b.jsx)($.Check,{"aria-hidden":!0});case"unreached":return(0,b.jsx)(Z.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,ac.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:c,children:d.name})}let ak={"block-all":{name:"Block all",meaning:"Only argo and answers to a received message get through."},"open-all":{name:"Open all",meaning:"Every ship may message every ship."},"keep-latest":{name:"Keep the latest rules",meaning:"The rules it supplied last stay in force."}};var al=a.i(75297),am=a.i(45098),an=a.i(48136);function ao({declaration:a,options:c,bounds:d,isSaving:e,saveError:g,savedNote:i,onSave:j}){let[k,l]=(0,q.useState)(a.whileUnavailable),[m,n]=(0,q.useState)(String(a.notRespondingAfterSeconds)),o=(0,q.useId)(),p=function(a,b){if(!/^\d+$/.test(a.trim()))return"A whole number of seconds.";let c=Number(a.trim());return c<b.min?`At least ${String(b.min)} seconds.`:c>b.max?`At most ${String(b.max)} seconds.`:void 0}(m,d),r=k!==a.whileUnavailable||m.trim()!==String(a.notRespondingAfterSeconds),s=Object.fromEntries(c.map(a=>[a,ak[a].name]));return(0,b.jsxs)("section",{"aria-labelledby":"network-declaration","data-testid":"network-declaration",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,b.jsx)("h2",{id:"network-declaration",className:"text-body font-semibold",children:"While the networking plugin does not respond"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"The fleet judges the plugin not responding when its ship makes no call for this long, and then applies what you choose here, at every send."}),(0,b.jsxs)("form",{className:"flex flex-col gap-3",onSubmit:a=>{a.preventDefault(),void 0===p&&j({whileUnavailable:k,notRespondingAfterSeconds:Number(m.trim())})},children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-body font-medium",children:"What holds"}),(0,b.jsxs)(an.Select,{items:s,value:k,disabled:e,onValueChange:a=>{let b=c.find(b=>b===a);void 0!==b&&l(b)},children:[(0,b.jsx)(an.SelectTrigger,{"aria-label":"What holds while the plugin does not respond","data-testid":"network-declaration-while",className:"h-(--size-control) text-body",children:(0,b.jsx)(an.SelectValue,{})}),(0,b.jsx)(an.SelectContent,{children:c.map(a=>(0,b.jsx)(an.SelectItem,{value:a,children:ak[a].name},a))})]}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-declaration-meaning",children:ak[k].meaning})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(am.Label,{htmlFor:o,children:"Not responding after (seconds)"}),(0,b.jsx)(al.Input,{id:o,inputMode:"numeric",className:"w-40",value:m,disabled:e,"aria-invalid":void 0!==p,"aria-describedby":`${o}-hint`,"data-testid":"network-declaration-seconds",onChange:a=>{n(a.target.value)}}),(0,b.jsx)("p",{id:`${o}-hint`,className:void 0===p?"text-meta text-muted-foreground":"text-meta text-destructive",children:p??`From ${String(d.min)} to ${String(d.max)} seconds.`})]}),(0,b.jsx)("div",{children:(0,b.jsx)(f.Button,{type:"submit",variant:"primary",isLoading:e,disabled:!r||void 0!==p,"data-testid":"network-declaration-save",children:"Save"})})]}),void 0===g?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t save",description:g}),void 0===i||r?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-declaration-note",children:i})]})}var ap=a.i(3512),aq=a.i(51675),ar=a.i(59613),as=a.i(2374),at=a.i(87005),au=a.i(74215),av=a.i(19721),aw=a.i(60275);let ax=(0,av.default)(async()=>{},{loadableGenerated:{modules:[59068]},ssr:!1});function ay({label:a,picked:c,owners:e,ownerChoices:g,unknown:h,groups:i,max:j,isDisabled:k,problem:l,onAdd:m,onRemove:n,testId:o,popoverTestId:r}){let[s,t]=(0,q.useState)(!1),[u,v]=(0,q.useState)(!1),w=c.length+e.length+h.length,x=new Set(e.map(a=>P(a.term))),y=[...["*","#"].map(a=>({term:{owner:a},text:R[a]})),...g.map(a=>({term:{owner:a.shipId},text:a.name}))];return(0,b.jsxs)("div",{className:"flex flex-col gap-1","data-testid":o,children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,b.jsxs)("div",{className:"flex min-h-(--size-control-sm) flex-wrap items-center gap-1.5",children:[0===w?(0,b.jsx)("span",{className:"text-body",children:"Every ship"}):null,c.map((a,c)=>(0,b.jsxs)(q.Fragment,{children:[0===c?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(V.LabelChip,{chip:a,testId:`${o}-value`,..."string"==typeof a.term?{}:{meaning:Q[a.term.value]},...k?{}:{onRemove:()=>{n(a.term)}}})]},P(a.term))),e.map((a,d)=>(0,b.jsxs)(q.Fragment,{children:[0===d&&0===c.length?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(az,{owner:a,testId:`${o}-owner`,...!0===k?{}:{onRemove:()=>{n(a.term)}}})]},P(a.term))),h.map(a=>(0,b.jsxs)("span",{"data-testid":`${o}-unknown`,title:`${P(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,b.jsx)(p.CircleAlert,{"aria-hidden":!0}),"string"!=typeof a&&"owner"in a?"A removed owner":"A removed label",!0===k?null:(0,b.jsx)("button",{type:"button","aria-label":"string"!=typeof a&&"owner"in a?"Remove the removed owner":"Remove the removed label",onClick:()=>{n(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,b.jsx)(au.X,{"aria-hidden":!0})})]},P(a))),w>=j?null:(0,b.jsxs)(aw.Popover,{open:s,onOpenChange:t,children:[(0,b.jsx)(aw.PopoverTrigger,{render:(0,b.jsx)(f.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,b.jsx)(ap.Plus,{}),disabled:k,"data-testid":`${o}-add`}),children:"Add label"}),(0,b.jsxs)(aw.PopoverContent,{align:"start",sideOffset:6,className:"w-80 p-2","data-testid":r,children:[(0,b.jsx)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:a}),(0,b.jsx)(ax,{groups:i,pickedValueIds:c.flatMap(a=>"string"==typeof a.term?[a.term]:[]),onPick:a=>{t(!1),m(a)},terms:{picked:c.flatMap(a=>"string"==typeof a.term?[]:[a.term]),onPick:a=>{t(!1),m(a)}}}),(0,b.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,b.jsx)(d.default,{href:"/labels",className:"font-medium text-foreground hover:underline",children:"Manage labels"})]})]})]}),w>=j?null:(0,b.jsxs)(aw.Popover,{open:u,onOpenChange:v,children:[(0,b.jsx)(aw.PopoverTrigger,{render:(0,b.jsx)(f.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,b.jsx)(ap.Plus,{}),disabled:k,"data-testid":`${o}-owner-add`}),children:"Add owner"}),(0,b.jsxs)(aw.PopoverContent,{align:"start",sideOffset:6,className:"w-72 p-2","data-testid":`${r}-owner`,children:[(0,b.jsxs)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:[a," the owner"]}),(0,b.jsx)("ul",{className:"flex flex-col",children:y.map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",disabled:x.has(P(a.term)),"data-testid":`${o}-owner-option`,onClick:()=>{v(!1),m(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,b.jsx)(at.UserRound,{"aria-hidden":!0,className:"size-(--size-icon) shrink-0 text-muted-foreground"}),a.text]})},P(a.term)))}),(0,b.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===l?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-tone-attention-fg","data-testid":`${o}-problem`,children:l}),0===h.length?null:(0,b.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 az({owner:a,onRemove:c,testId:d}){let{owner:e}=a.term,f="*"===e||"#"===e?`${a.text}. ${R[e]}`:`${a.text}: ships it owns`;return(0,b.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,b.jsx)(at.UserRound,{"aria-hidden":!0}),(0,b.jsxs)("span",{className:"truncate",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"owner="}),(0,b.jsx)("span",{className:"font-medium",children:a.text.slice(6)})]}),void 0===c?null:(0,b.jsx)("button",{type:"button","aria-label":`Remove ${a.text}`,onClick:c,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,b.jsx)(au.X,{"aria-hidden":!0})})]})}let aA=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}],aB=()=>crypto.randomUUID();function aC({rules:a,context:c,limits:d,isSaving:e,saveError:g,savedNote:i,onSave:j}){let[k,l]=(0,q.useState)(()=>K(a,aB)),[m,n]=(0,q.useState)(!1),p=(0,I.filterGroupsOf)(c),r=c.ships.filter(a=>("operator"===a.kind||"person"===a.kind)&&"retired"!==a.status).map(a=>({shipId:a.id,name:a.name})),s=JSON.stringify(L(k))!==JSON.stringify(a);return(0,b.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,b.jsx)("h2",{id:"network-rules",className:"text-body font-semibold",children:"Rules"}),"all-to-all"===k.kind?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:"No rules: every ship may send to, read and manage every ship."}),(0,b.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,b.jsx)("div",{children:(0,b.jsx)(f.Button,{variant:"primary",icon:(0,b.jsx)(ap.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-on",onClick:()=>{l(M(k,!0))},children:"Set rules"})})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.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,b.jsx)("ul",{className:"flex flex-col gap-2",children:k.rules.map((a,g)=>(0,b.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:[aA.map(({side:f,label:h})=>{let i,j=S(a[f],c);return(0,b.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===f?(0,b.jsxs)("div",{className:"flex shrink-0 flex-col gap-1",children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"Verb"}),(0,b.jsxs)(an.Select,{items:J,value:a.verb,disabled:e,onValueChange:b=>{var c;A.some(a=>a===b)&&l(N(k,{key:(c={rule:a.key,verb:b}).rule,change:a=>({...a,verb:c.verb})}))},children:[(0,b.jsx)(an.SelectTrigger,{"aria-label":`Verb of rule ${String(g+1)}`,"data-testid":"network-rule-verb",size:"sm",children:(0,b.jsx)(an.SelectValue,{})}),(0,b.jsx)(an.SelectContent,{children:A.map(a=>(0,b.jsx)(an.SelectItem,{value:a,children:J[a]},a))})]})]}):null,"to"===f?(0,b.jsx)(o.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,b.jsx)(ay,{label:h,picked:j.chips,owners:j.owners,ownerChoices:r,unknown:j.unknown,groups:p,max:d.selectorMax,isDisabled:e,...void 0===(i=function(a,b){let[c]=T(a,b.side);if(void 0===c)return U(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:f,context:c}))?{}:{problem:i},testId:`network-rule-${f}`,popoverTestId:"network-rule-popover",onAdd:b=>{var c;l(N(k,{key:(c={rule:a.key,side:f,term:b,limits:d}).rule,change:a=>{let b=a[c.side];return b.some(a=>O(a,c.term))||b.length>=c.limits.selectorMax?a:{...a,[c.side]:[...b,c.term]}}}))},onRemove:b=>{var c;l(N(k,{key:(c={rule:a.key,side:f,term:b}).rule,change:a=>({...a,[c.side]:a[c.side].filter(a=>!O(a,c.term))})}))}})]},f)}),(0,b.jsx)(f.Button,{variant:"ghost",size:"xs",icon:(0,b.jsx)(aq.Trash2,{"aria-hidden":!0}),disabled:e,"aria-label":`Remove rule ${String(g+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,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[k.rules.length>=d.rulesMax?null:(0,b.jsx)(f.Button,{size:"sm",icon:(0,b.jsx)(ap.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-add",onClick:()=>{var a;l((a={newKey:aB,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,b.jsxs)("span",{className:"text-meta text-muted-foreground tabular-nums","data-testid":"network-rules-count",children:[k.rules.length," of ",d.rulesMax," rules"]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-border pt-3",children:[(0,b.jsx)(f.Button,{variant:"primary",isLoading:e,disabled:!s||"rules"===k.kind&&k.rules.some(a=>T(a,"from").length+T(a,"to").length>0||U(a,"from")||U(a,"to")),"data-testid":"network-rules-save",onClick:()=>{j(L(k))},children:"Save rules"}),s?(0,b.jsx)(f.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(K(a,aB))},children:"Discard changes"}):null,(0,b.jsx)(f.Button,{variant:"ghost",className:"ml-auto",disabled:e,"data-testid":"network-rules-off",onClick:()=>{null===a?l(M(k,!1)):n(!0)},children:"Remove all rules"})]})]}),void 0===g?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t save the rules",description:g}),void 0===i||s?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-rules-note",children:i}),(0,b.jsx)(ar.AlertDialog,{open:m,onOpenChange:a=>{a||e||n(!1)},children:(0,b.jsxs)(ar.AlertDialogContent,{"data-testid":"network-rules-off-dialog",className:as.dialogSurface.phoneSheet,children:[(0,b.jsxs)(ar.AlertDialogHeader,{children:[(0,b.jsx)(ar.AlertDialogTitle,{children:"Remove all rules?"}),(0,b.jsx)(ar.AlertDialogDescription,{children:"Every ship may send to, read and manage every ship again from now on. The rules are gone: to have them back, set them again."})]}),(0,b.jsxs)(ar.AlertDialogFooter,{children:[(0,b.jsx)(ar.AlertDialogClose,{render:(0,b.jsx)(f.Button,{disabled:e}),children:"Cancel"}),(0,b.jsx)(f.Button,{variant:"destructive",isLoading:e,"data-testid":"network-rules-off-confirm",onClick:()=>{n(!1),j(null)},children:"Remove all rules"})]})]})})]})}var aD=a.i(72872);function aE({refusals:a,error:c,onRetry:d,context:e,now:f}){let j;return j=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the refusals",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the refusals"}):0===a.length?(0,b.jsx)(g.EmptyState,{variant:"section",title:"No send has been refused."}):(0,b.jsx)("ol",{className:"flex flex-col gap-2","data-testid":"network-refusals-list",children:a.map(a=>(0,b.jsx)(aF,{refusal:a,context:e,now:f},a.id))}),(0,b.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,b.jsx)("h2",{id:"network-refusals",className:"text-body font-semibold",children:"Refusals"}),(0,b.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."}),j]})}function aF({refusal:a,context:c,now:d}){let e,f=new Date(a.at),{recipient:g}=a,h="ship"===g.kind?[g.ship]:g.ships;return(0,b.jsxs)("li",{"data-testid":"network-refusal",className:"flex flex-col gap-2 rounded-md border border-border px-3 py-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5",children:[(0,b.jsx)("p",{className:"text-body font-medium",children:function(a){let{sender:b,recipient:c}=a;switch(c.kind){case"ship":return`${b.name} tried to message ${c.ship.name}.`;case"type":return`${b.name} tried to message the type ${c.type}: ${(0,I.listed)(c.ships.map(a=>a.name))}.`}}(a)}),(0,b.jsx)("time",{dateTime:a.at,title:(0,aD.fullDateTime)(f),className:"text-meta text-muted-foreground tabular-nums",children:(0,aD.relativeTime)(f,d)})]}),(0,b.jsxs)("dl",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(aG,{side:"From",ship:a.sender,context:c}),h.map(a=>(0,b.jsx)(aG,{side:"To",ship:a,context:c},a.id))]}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:(e=`Refused by network settings version ${String(a.settingsVersion)}`,null===a.whilePluginUnavailable?`${e}.`:`${e} while the networking plugin was not responding: ${ak[a.whilePluginUnavailable].name}.`)})]})}function aG({side:a,ship:c,context:d}){let e=(0,I.chipsOf)(c,d);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[(0,b.jsxs)("dt",{className:"text-meta text-muted-foreground",children:[a," ",(0,b.jsx)("span",{className:"font-medium text-foreground",children:c.name})]}),(0,b.jsx)("dd",{className:"flex min-w-0 flex-wrap items-center gap-1",children:0===e.length?(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"No labels"}):e.map(a=>(0,b.jsx)(V.LabelChip,{chip:a,testId:"network-refusal-label"},a.valueId))})]})}var aH=a.i(91003),aI=a.i(38023),aJ=a.i(65563),aK=a.i(1851),aL=a.i(90146),aM=a.i(67336),aN=a.i(10023),aO=a.i(28562),aP=a.i(68450),aQ=a.i(34159),aR=a.i(70025),aS=a.i(33217),aT=a.i(37927),aU=a.i(14499);let aV={send:"Every ship may send to every ship.",read:"Every ship may read every ship.",manage:"Every ship may manage every ship."};function aW(a){switch(a.rule){case"argo":return{key:a.rule,name:"argo",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:"Owner",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:"Answer",meaning:"A ship may always answer the sender of a message it received.",isOn:a.isOn,turnedBy:"never"};case"viewerRead":return{key:a.rule,name:"Viewer reads",meaning:"The viewer reads every ship.",isOn:a.isOn,turnedBy:"argo"};case"open":return{key:`open-${a.verb}`,name:`Open for ${a.verb}`,meaning:aV[a.verb],isOn:a.isOn,turnedBy:"plugin"}}}var aX=a.i(42871),aY=a.i(10572);a.s(["NetworkPageFor",0,function({pickedShipId:a}){var j,k;let l,m,o,p,q,r,s,t,u=(0,e.useRouter)(),v=(0,aP.useNow)(),w=(0,aI.useConsoleFrame)(),x=(0,aN.useNeedsAttention)(),y=(0,aM.useLiveFleet)(),z=(0,aJ.useAccess)(),A=(0,aQ.usePluginNav)(),B=(0,aO.useHasNetwork)(),C=(0,aO.useNetwork)(),D=(0,aL.useLabelContext)(),E=(0,aL.useFleetSnapshot)(),F=(j=B?a:void 0,m=(0,aU.useTRPC)(),(0,aS.useQuery)({...m.fleet.explainReach.queryOptions(void 0===j?aX.skipToken:{fromShipId:j}),select:ad})),G=(o=(0,aU.useTRPC)(),(0,aS.useQuery)(o.fleet.reachRefusals.queryOptions(void 0,{enabled:B}))),H=(p=(0,aU.useTRPC)(),(0,aS.useQuery)(p.fleet.declaredNetworkRules.queryOptions(void 0,{enabled:B}))),I=(q=(0,aU.useTRPC)(),(0,aS.useQuery)(q.fleet.builtInRules.queryOptions(void 0,{enabled:B}))),J=(r=(0,aU.useTRPC)(),s=(0,aT.useQueryClient)(),{setViewerRead:a=>{t.mutate({rule:"viewerRead",isOn:a})},isPending:(t=(0,aR.useMutation)(r.fleet.setBuiltInRule.mutationOptions({onSuccess:()=>s.invalidateQueries({queryKey:r.fleet.builtInRules.queryKey()})}))).isPending,error:t.error?.message}),K=(0,aO.useSaveNetworkRules)(),L=(0,aO.useSaveNetworkDeclaration)(),{networkRulesMax:M,shipLabelsMax:N,whileUnavailable:O,notRespondingAfterMinSeconds:P,notRespondingAfterMaxSeconds:Q}=(0,aK.useConsoleConstants)();if((0,aY.useSignInWhenSessionEnds)([x.error,y.error]),B)if(C.isError)l=(0,b.jsx)(h.InlineError,{title:"Couldn’t read the network",description:C.error.message,onRetry:()=>{C.refetch()}});else if(void 0===C.data||void 0===D||void 0===E.data)l=(0,b.jsx)(i.LoadingSkeleton,{variant:"detail",rows:4,label:"Loading the network"});else{let c;l=(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(n,{rows:void 0===I.data?void 0:I.data.map(aW),error:I.error?.message,onRetry:()=>{I.refetch()},isTurning:J.isPending,turnError:J.error,onViewerReadChange:J.setViewerRead}),(0,b.jsx)(aC,{rules:C.data.rules,context:D,limits:{rulesMax:M,selectorMax:N},isSaving:K.isPending,saveError:K.error?.message,savedNote:void 0===K.data?void 0:function(a){switch(a){case"supplied":return"Saved. The fleet enforces them from now on.";case"waiting":return"Saved. The fleet does not answer yet: the networking plugin supplies them as soon as it does.";case"not-connected":case"unregistered":return"Saved."}}(K.data.supply),onSave:a=>{K.mutate(a)}},JSON.stringify(C.data.rules)),(0,b.jsx)(X,{declared:void 0===H.data?void 0:(k=H.data,c=new Map(E.data.map(a=>[a.id,a.name])),k.filter(({rules:a})=>a.length>0).map(({shipId:a,rules:b})=>({shipId:a,declaredBy:c.get(a)??a,rules:b})).sort((a,b)=>a.declaredBy.localeCompare(b.declaredBy))),error:H.error?.message,onRetry:()=>{H.refetch()},context:D}),(0,b.jsx)(ao,{declaration:C.data.declaration,options:O,bounds:{min:P,max:Q},isSaving:L.isPending,saveError:L.error?.message,savedNote:void 0===L.data?void 0:function(a){switch(a){case"supplied":return"Saved. The networking plugin registered again with it.";case"waiting":return"Saved. The fleet does not answer yet: the networking plugin registers again with it as soon as it does.";case"not-connected":case"unregistered":return"Saved."}}(L.data.supply),onSave:a=>{L.mutate(a)}},JSON.stringify(C.data.declaration)),(0,b.jsx)(ai,{ships:E.data.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)),pickedShipId:a,reachableShipIds:F.data,reachError:F.error?.message,onPick:a=>{u.replace(void 0===a?"/network":`/network?reach=${a}`,{scroll:!1})},onRetry:()=>{F.refetch()}}),(0,b.jsx)(aE,{refusals:G.data,error:G.error?.message,onRetry:()=>{G.refetch()},context:D,now:v})]})}else l=(0,b.jsx)(g.EmptyState,{icon:(0,b.jsx)(c.Network,{"aria-hidden":!0}),title:z.canEditNetwork?"The networking plugin is not connected":"Only argo sees the network rules",description:z.canEditNetwork?"Connect it in Settings. Until it supplies rules, every ship may message every ship.":void 0,action:z.canEditNetwork&&A.hasSettings?(0,b.jsx)(f.Button,{nativeButton:!1,render:(0,b.jsx)(d.default,{href:"/settings"}),"data-testid":"network-open-settings",children:"Open Settings"}):void 0});return(0,b.jsx)(aH.ListPage,{...w,title:"Network",description:"Who may send to, read or manage whom. The networking plugin supplies these rules to the fleet, which checks them on every send. Only argo sees this page.",live:y.live,children:l})}],71915)}];
|
|
1
|
+
module.exports=[71915,a=>{"use strict";var b=a.i(87924),c=a.i(65913),d=a.i(38246),e=a.i(50944),f=a.i(12068),g=a.i(24173),h=a.i(40392),i=a.i(50808),j=a.i(39353),k=a.i(76166),l=a.i(45469);let m={argo:"You turn it on or off.",plugin:"The networking plugin turns it off while your rules apply, and on for all-to-all."};function n({rows:a,error:c,onRetry:d,isTurning:e,turnError:f,onViewerReadChange:g}){let o;return o=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the built-in rules",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the built-in rules"}):(0,b.jsx)("ul",{className:"flex flex-col divide-y divide-border",children:a.map(a=>(0,b.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,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:"text-body font-medium","data-testid":"network-built-in-rule-name",children:a.name}),(0,b.jsxs)("span",{className:"text-meta text-muted-foreground",children:[a.meaning," ","never"===a.turnedBy?null:m[a.turnedBy]]})]}),"argo"===a.turnedBy?(0,b.jsx)(l.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,b.jsx)(k.Badge,{variant:"outline","data-testid":"network-built-in-rule-state",children:"never"===a.turnedBy?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(j.Lock,{"aria-hidden":!0}),"Never off"]}):a.isOn?"On":"Off"})]},a.key))}),(0,b.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,b.jsx)("h2",{id:"network-built-in",className:"text-body font-semibold",children:"Built-in rules"}),(0,b.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."}),o,void 0===f?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t turn the viewer reading",description:f})]})}var o=a.i(18783),p=a.i(93817),q=a.i(72131),r=a.i(56757),s=a.i(2811);let t=r.z.string(),u=r.z.object({id:(0,s.idSchema)("labelValue"),value:r.z.string()}),v=r.z.object({labelId:(0,s.idSchema)("label"),key:r.z.string(),valueId:(0,s.idSchema)("labelValue"),value:r.z.string()});r.z.object({valueIds:r.z.array((0,s.idSchema)("labelValue")).optional()}).optional(),r.z.object({key:t,values:r.z.array(t)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(u)}),r.z.object({labelId:(0,s.idSchema)("label"),values:r.z.array(t)}),r.z.object({values:r.z.array(u)}),r.z.object({labelId:(0,s.idSchema)("label")}),r.z.object({key:t,value:t}),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 w=r.z.object({id:(0,s.idSchema)("label"),key:r.z.string(),values:r.z.array(u),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()})});r.z.array(w);let x=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 y(a){return"string"!=typeof a&&"owner"in a}let z=r.z.array(x),A=["send","read","manage"],B=r.z.object({verb:r.z.enum(A),from:z,to:z});r.z.object({rules:r.z.array(B)});let C=["argo","owner","answer","pluginRead","viewerRead","open"];r.z.object({rule:r.z.enum(C),verb:r.z.enum(A).optional(),isOn:r.z.boolean()}).refine(a=>"open"===a.rule==(void 0!==a.verb),{message:"open names its verb, and no other built-in rule names one",path:["verb"]});let D=r.z.union([r.z.object({rule:r.z.enum(["argo","owner","answer","pluginRead","viewerRead"]),isOn:r.z.boolean()}),r.z.object({rule:r.z.literal("open"),verb:r.z.enum(A),isOn:r.z.boolean()})]);r.z.array(D),r.z.object({shipId:(0,s.idSchema)("ship"),registeredAt:r.z.iso.datetime()}).nullable(),r.z.object({version:r.z.int().min(1)}),r.z.object({rules:r.z.array(B)}),r.z.object({rules:r.z.int().min(0)}),r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rules:r.z.array(B)})),r.z.object({whileUnavailable:r.z.enum(["block-all","open-all","keep-latest"]),notRespondingAfterSeconds:r.z.int().min(60).max(86400)});let E=r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string(),labels:r.z.array(v),owner:r.z.object({id:(0,s.idSchema)("ship"),name:r.z.string()}).nullable()}),F=r.z.object({id:(0,s.idSchema)("reachRefusal"),at:r.z.iso.datetime(),sender:E,askedBy:E.nullable(),recipient:r.z.discriminatedUnion("kind",[r.z.object({kind:r.z.literal("ship"),ship:E}),r.z.object({kind:r.z.literal("type"),type:r.z.string(),ships:r.z.array(E)})]),verb:r.z.enum(A),settingsVersion:r.z.int().min(1),whilePluginUnavailable:r.z.enum(["block-all","keep-latest"]).nullable()});r.z.array(F),r.z.object({fromShipId:(0,s.idSchema)("ship"),toShipId:(0,s.idSchema)("ship").optional()});let G=r.z.union([r.z.object({builtIn:r.z.enum(C)}),r.z.object({plugin:r.z.int().min(0)}),r.z.object({declared:(0,s.idSchema)("ship"),index:r.z.int().min(0)})]),H=r.z.array(r.z.object({shipId:(0,s.idSchema)("ship"),rule:G}));r.z.object({send:H,read:H,manage:H});var I=a.i(65230);let J={send:"May send to",read:"May read",manage:"May manage"};function K(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 L(a){return"all-to-all"===a.kind?null:a.rules.map(a=>({verb:a.verb,from:[...a.from],to:[...a.to]}))}function M(a,b){return b?"rules"===a.kind?a:{kind:"rules",rules:[]}:{kind:"all-to-all"}}function N(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 O(a,b){return P(a)===P(b)}function P(a){return"string"==typeof a?a:y(a)?`owner=${a.owner}`:`${a.labelId}=${a.value}`}let Q={"*":"Any value","#":"The same value as the other side"},R={"*":"Any owner","#":"The same owner as the other side"};function S(a,b){let c=[],d=[],e=[];for(let f of a){if(y(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,I.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??c.owner.name,term:a}}(f,b);void 0===a?e.push(f):c.push(a)}return{chips:c,owners:d,unknown:e}}function T(a,b){let c=a["from"===b?"to":"from"];return a[b].filter(a=>"string"!=typeof a&&!y(a)&&"#"===a.value&&!c.some(b=>O(b,a)))}function U(a,b){let c=a=>a.some(a=>y(a)&&"#"===a.owner);return c(a[b])&&!c(a["from"===b?"to":"from"])}var V=a.i(36501);let W=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}];function X({declared:a,error:c,onRetry:d,context:e}){let f;return f=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the declared rules",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:2,label:"Loading the declared rules"}):0===a.length?(0,b.jsx)(g.EmptyState,{variant:"section",title:"No plugin declares rules."}):(0,b.jsx)("ul",{className:"flex flex-col gap-3",children:a.map(a=>(0,b.jsxs)("li",{"data-testid":"network-declared-plugin",className:"flex flex-col gap-2",children:[(0,b.jsxs)("h3",{className:"text-meta font-medium","data-testid":"network-declared-by",children:["Declared by ",a.declaredBy]}),(0,b.jsx)("ul",{className:"flex flex-col gap-2",children:a.rules.map(a=>(0,b.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:W.map(({side:c,label:d})=>(0,b.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===c?(0,b.jsx)("span",{className:"mt-6 shrink-0 text-meta text-muted-foreground","data-testid":"network-declared-rule-verb",children:J[a.verb]}):null,"to"===c?(0,b.jsx)(o.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,b.jsx)(Y,{label:d,terms:a[c],context:e,testId:`network-declared-rule-${c}`})]},c))},JSON.stringify(a)))})]},a.shipId))}),(0,b.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,b.jsx)("h2",{id:"network-declared",className:"text-body font-semibold",children:"Declared by plugins"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"Rules plugins 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 the plugin changes them, and switching it off withdraws them."}),f]})}function Y({label:a,terms:c,context:d,testId:e}){let{chips:f,unknown:g}=S(c,d);return(0,b.jsxs)("div",{className:"flex flex-col gap-1","data-testid":e,children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-1.5",children:[f.length+g.length===0?(0,b.jsx)("span",{className:"text-body",children:"Every ship"}):null,f.map((a,c)=>(0,b.jsxs)(q.Fragment,{children:[0===c?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(V.LabelChip,{chip:a,testId:`${e}-value`,..."string"==typeof a.term?{}:{meaning:Q[a.term.value]}})]},P(a.term))),g.map(a=>(0,b.jsxs)("span",{"data-testid":`${e}-unknown`,title:`${P(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,b.jsx)(p.CircleAlert,{"aria-hidden":!0}),"A removed label"]},P(a)))]})]})}var Z=a.i(70840),$=a.i(52562),_=a.i(64831);let aa={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"}]]};aa.node;let ab=(0,_.default)(aa);var ac=a.i(80487);function ad(a){return a.send.map(a=>a.shipId)}let ae=-Math.PI/2,af=2*Math.PI;function ag(a){return Math.round(100*a)/100}let ah={picked:"picked",reached:"may be messaged",unreached:"out of reach"};function ai({ships:a,pickedShipId:c,reachableShipIds:d,reachError:e,onPick:f,onRetry:g}){var i;let j=(i=void 0===c?void 0:{pickedShipId:c,reachableShipIds:void 0===e?d:void 0},a.map((b,c)=>{var d,e;let f=ae+af*c/a.length,g=1===a.length;return{ship:b,x:g?50:ag(50+38*Math.cos(f)),y:g?50:ag(50+38*Math.sin(f)),mark:(d=b.id,void 0===(e=i)?"none":d===e.pickedShipId?"picked":void 0===e.reachableShipIds?"none":e.reachableShipIds.includes(d)?"reached":"unreached")}})),k=j.find(a=>"picked"===a.mark),l=j.filter(a=>"reached"===a.mark);return(0,b.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,b.jsx)("h2",{id:"network-reach",className:"text-body font-semibold",children:"Reach"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"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."}),(0,b.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===k?null:(0,b.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:l.map(a=>(0,b.jsx)("line",{x1:k.x,y1:k.y,x2:a.x,y2:a.y,vectorEffect:"non-scaling-stroke",className:"stroke-muted-foreground",strokeWidth:1.5},a.ship.id))}),j.map(a=>(0,b.jsx)(aj,{node:a,onPick:()=>{f("picked"===a.mark?void 0:a.ship.id)}},a.ship.id))]}),void 0===e?(0,b.jsx)("p",{className:"text-body",role:"status","data-testid":"network-reach-summary",children:function(a){let b=a.find(a=>"picked"===a.mark);if(void 0===b)return"Pick a ship to see which ships it may message.";let c=a.length-1,d=a.filter(a=>"reached"===a.mark).map(a=>a.ship.name);return a.every(a=>"picked"===a.mark||"none"===a.mark)?0===c?`${b.ship.name} is the only ship of the fleet.`:`Finding the ships ${b.ship.name} may message…`:d.length===c?`${b.ship.name} may message every other ship (${String(c)}).`:0===d.length?`${b.ship.name} may message no other ship.`:`${b.ship.name} may message ${String(d.length)} of ${String(c)} ships: ${d.join(", ")}.`}(j)}):(0,b.jsx)(h.InlineError,{title:"Couldn’t explain this ship’s reach",description:e,onRetry:g})]})}function aj({node:a,onPick:c}){let{ship:d,mark:e}=a;return(0,b.jsx)(f.Button,{size:"sm",variant:"secondary","aria-pressed":"picked"===e,"aria-label":"none"===e?d.name:`${d.name}, ${ah[e]}`,icon:function(a){switch(a){case"picked":return(0,b.jsx)(ab,{"aria-hidden":!0});case"reached":return(0,b.jsx)($.Check,{"aria-hidden":!0});case"unreached":return(0,b.jsx)(Z.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,ac.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:c,children:d.name})}let ak={"block-all":{name:"Block all",meaning:"Only argo and answers to a received message get through."},"open-all":{name:"Open all",meaning:"Every ship may message every ship."},"keep-latest":{name:"Keep the latest rules",meaning:"The rules it supplied last stay in force."}};var al=a.i(75297),am=a.i(45098),an=a.i(48136);function ao({declaration:a,options:c,bounds:d,isSaving:e,saveError:g,savedNote:i,onSave:j}){let[k,l]=(0,q.useState)(a.whileUnavailable),[m,n]=(0,q.useState)(String(a.notRespondingAfterSeconds)),o=(0,q.useId)(),p=function(a,b){if(!/^\d+$/.test(a.trim()))return"A whole number of seconds.";let c=Number(a.trim());return c<b.min?`At least ${String(b.min)} seconds.`:c>b.max?`At most ${String(b.max)} seconds.`:void 0}(m,d),r=k!==a.whileUnavailable||m.trim()!==String(a.notRespondingAfterSeconds),s=Object.fromEntries(c.map(a=>[a,ak[a].name]));return(0,b.jsxs)("section",{"aria-labelledby":"network-declaration","data-testid":"network-declaration",className:"flex flex-col gap-3 rounded-lg border border-border bg-card p-4",children:[(0,b.jsx)("h2",{id:"network-declaration",className:"text-body font-semibold",children:"While the networking plugin does not respond"}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:"The fleet judges the plugin not responding when its ship makes no call for this long, and then applies what you choose here, at every send."}),(0,b.jsxs)("form",{className:"flex flex-col gap-3",onSubmit:a=>{a.preventDefault(),void 0===p&&j({whileUnavailable:k,notRespondingAfterSeconds:Number(m.trim())})},children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-body font-medium",children:"What holds"}),(0,b.jsxs)(an.Select,{items:s,value:k,disabled:e,onValueChange:a=>{let b=c.find(b=>b===a);void 0!==b&&l(b)},children:[(0,b.jsx)(an.SelectTrigger,{"aria-label":"What holds while the plugin does not respond","data-testid":"network-declaration-while",className:"h-(--size-control) text-body",children:(0,b.jsx)(an.SelectValue,{})}),(0,b.jsx)(an.SelectContent,{children:c.map(a=>(0,b.jsx)(an.SelectItem,{value:a,children:ak[a].name},a))})]}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground","data-testid":"network-declaration-meaning",children:ak[k].meaning})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(am.Label,{htmlFor:o,children:"Not responding after (seconds)"}),(0,b.jsx)(al.Input,{id:o,inputMode:"numeric",className:"w-40",value:m,disabled:e,"aria-invalid":void 0!==p,"aria-describedby":`${o}-hint`,"data-testid":"network-declaration-seconds",onChange:a=>{n(a.target.value)}}),(0,b.jsx)("p",{id:`${o}-hint`,className:void 0===p?"text-meta text-muted-foreground":"text-meta text-destructive",children:p??`From ${String(d.min)} to ${String(d.max)} seconds.`})]}),(0,b.jsx)("div",{children:(0,b.jsx)(f.Button,{type:"submit",variant:"primary",isLoading:e,disabled:!r||void 0!==p,"data-testid":"network-declaration-save",children:"Save"})})]}),void 0===g?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t save",description:g}),void 0===i||r?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-declaration-note",children:i})]})}var ap=a.i(3512),aq=a.i(51675),ar=a.i(59613),as=a.i(2374),at=a.i(87005),au=a.i(74215),av=a.i(19721),aw=a.i(60275);let ax=(0,av.default)(async()=>{},{loadableGenerated:{modules:[59068]},ssr:!1});function ay({label:a,picked:c,owners:e,ownerChoices:g,unknown:h,groups:i,max:j,isDisabled:k,problem:l,onAdd:m,onRemove:n,testId:o,popoverTestId:r}){let[s,t]=(0,q.useState)(!1),[u,v]=(0,q.useState)(!1),w=c.length+e.length+h.length,x=new Set(e.map(a=>P(a.term))),y=[...["*","#"].map(a=>({term:{owner:a},text:R[a]})),...g.map(a=>({term:{owner:a.shipId},text:a.name}))];return(0,b.jsxs)("div",{className:"flex flex-col gap-1","data-testid":o,children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:a}),(0,b.jsxs)("div",{className:"flex min-h-(--size-control-sm) flex-wrap items-center gap-1.5",children:[0===w?(0,b.jsx)("span",{className:"text-body",children:"Every ship"}):null,c.map((a,c)=>(0,b.jsxs)(q.Fragment,{children:[0===c?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(V.LabelChip,{chip:a,testId:`${o}-value`,..."string"==typeof a.term?{}:{meaning:Q[a.term.value]},...k?{}:{onRemove:()=>{n(a.term)}}})]},P(a.term))),e.map((a,d)=>(0,b.jsxs)(q.Fragment,{children:[0===d&&0===c.length?null:(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"and"}),(0,b.jsx)(az,{owner:a,testId:`${o}-owner`,...!0===k?{}:{onRemove:()=>{n(a.term)}}})]},P(a.term))),h.map(a=>(0,b.jsxs)("span",{"data-testid":`${o}-unknown`,title:`${P(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,b.jsx)(p.CircleAlert,{"aria-hidden":!0}),"string"!=typeof a&&"owner"in a?"A removed owner":"A removed label",!0===k?null:(0,b.jsx)("button",{type:"button","aria-label":"string"!=typeof a&&"owner"in a?"Remove the removed owner":"Remove the removed label",onClick:()=>{n(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,b.jsx)(au.X,{"aria-hidden":!0})})]},P(a))),w>=j?null:(0,b.jsxs)(aw.Popover,{open:s,onOpenChange:t,children:[(0,b.jsx)(aw.PopoverTrigger,{render:(0,b.jsx)(f.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,b.jsx)(ap.Plus,{}),disabled:k,"data-testid":`${o}-add`}),children:"Add label"}),(0,b.jsxs)(aw.PopoverContent,{align:"start",sideOffset:6,className:"w-80 p-2","data-testid":r,children:[(0,b.jsx)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:a}),(0,b.jsx)(ax,{groups:i,pickedValueIds:c.flatMap(a=>"string"==typeof a.term?[a.term]:[]),onPick:a=>{t(!1),m(a)},terms:{picked:c.flatMap(a=>"string"==typeof a.term?[]:[a.term]),onPick:a=>{t(!1),m(a)}}}),(0,b.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,b.jsx)(d.default,{href:"/labels",className:"font-medium text-foreground hover:underline",children:"Manage labels"})]})]})]}),w>=j?null:(0,b.jsxs)(aw.Popover,{open:u,onOpenChange:v,children:[(0,b.jsx)(aw.PopoverTrigger,{render:(0,b.jsx)(f.Button,{type:"button",variant:"ghost",size:"xs",icon:(0,b.jsx)(ap.Plus,{}),disabled:k,"data-testid":`${o}-owner-add`}),children:"Add owner"}),(0,b.jsxs)(aw.PopoverContent,{align:"start",sideOffset:6,className:"w-72 p-2","data-testid":`${r}-owner`,children:[(0,b.jsxs)("span",{className:"block px-2 pt-1 pb-2 text-body font-medium",children:[a," the owner"]}),(0,b.jsx)("ul",{className:"flex flex-col",children:y.map(a=>(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",disabled:x.has(P(a.term)),"data-testid":`${o}-owner-option`,onClick:()=>{v(!1),m(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,b.jsx)(at.UserRound,{"aria-hidden":!0,className:"size-(--size-icon) shrink-0 text-muted-foreground"}),a.text]})},P(a.term)))}),(0,b.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===l?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-tone-attention-fg","data-testid":`${o}-problem`,children:l}),0===h.length?null:(0,b.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 az({owner:a,onRemove:c,testId:d}){let{owner:e}=a.term,f="*"===e||"#"===e?`${a.text}. ${R[e]}`:`${a.text}: ships it owns`;return(0,b.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,b.jsx)(at.UserRound,{"aria-hidden":!0}),(0,b.jsxs)("span",{className:"truncate",children:[(0,b.jsx)("span",{className:"text-muted-foreground",children:"owner="}),(0,b.jsx)("span",{className:"font-medium",children:a.text.slice(6)})]}),void 0===c?null:(0,b.jsx)("button",{type:"button","aria-label":`Remove ${a.text}`,onClick:c,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,b.jsx)(au.X,{"aria-hidden":!0})})]})}let aA=[{side:"from",label:"From ships with"},{side:"to",label:"To ships with"}],aB=()=>crypto.randomUUID();function aC({rules:a,context:c,limits:d,isSaving:e,saveError:g,savedNote:i,onSave:j}){let[k,l]=(0,q.useState)(()=>K(a,aB)),[m,n]=(0,q.useState)(!1),p=(0,I.filterGroupsOf)(c),r=c.ships.filter(a=>("operator"===a.kind||"person"===a.kind)&&"retired"!==a.status).map(a=>({shipId:a.id,name:a.name})),s=JSON.stringify(L(k))!==JSON.stringify(a);return(0,b.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,b.jsx)("h2",{id:"network-rules",className:"text-body font-semibold",children:"Rules"}),"all-to-all"===k.kind?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:"text-body","data-testid":"network-rules-state",children:"No rules: every ship may send to, read and manage every ship."}),(0,b.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,b.jsx)("div",{children:(0,b.jsx)(f.Button,{variant:"primary",icon:(0,b.jsx)(ap.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-on",onClick:()=>{l(M(k,!0))},children:"Set rules"})})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.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,b.jsx)("ul",{className:"flex flex-col gap-2",children:k.rules.map((a,g)=>(0,b.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:[aA.map(({side:f,label:h})=>{let i,j=S(a[f],c);return(0,b.jsxs)("div",{className:"flex min-w-0 grow basis-0 items-start gap-3",children:["to"===f?(0,b.jsxs)("div",{className:"flex shrink-0 flex-col gap-1",children:[(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"Verb"}),(0,b.jsxs)(an.Select,{items:J,value:a.verb,disabled:e,onValueChange:b=>{var c;A.some(a=>a===b)&&l(N(k,{key:(c={rule:a.key,verb:b}).rule,change:a=>({...a,verb:c.verb})}))},children:[(0,b.jsx)(an.SelectTrigger,{"aria-label":`Verb of rule ${String(g+1)}`,"data-testid":"network-rule-verb",size:"sm",children:(0,b.jsx)(an.SelectValue,{})}),(0,b.jsx)(an.SelectContent,{children:A.map(a=>(0,b.jsx)(an.SelectItem,{value:a,children:J[a]},a))})]})]}):null,"to"===f?(0,b.jsx)(o.ArrowRight,{"aria-hidden":!0,className:"mt-6 hidden size-(--size-icon) shrink-0 text-muted-foreground sm:block"}):null,(0,b.jsx)(ay,{label:h,picked:j.chips,owners:j.owners,ownerChoices:r,unknown:j.unknown,groups:p,max:d.selectorMax,isDisabled:e,...void 0===(i=function(a,b){let[c]=T(a,b.side);if(void 0===c)return U(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:f,context:c}))?{}:{problem:i},testId:`network-rule-${f}`,popoverTestId:"network-rule-popover",onAdd:b=>{var c;l(N(k,{key:(c={rule:a.key,side:f,term:b,limits:d}).rule,change:a=>{let b=a[c.side];return b.some(a=>O(a,c.term))||b.length>=c.limits.selectorMax?a:{...a,[c.side]:[...b,c.term]}}}))},onRemove:b=>{var c;l(N(k,{key:(c={rule:a.key,side:f,term:b}).rule,change:a=>({...a,[c.side]:a[c.side].filter(a=>!O(a,c.term))})}))}})]},f)}),(0,b.jsx)(f.Button,{variant:"ghost",size:"xs",icon:(0,b.jsx)(aq.Trash2,{"aria-hidden":!0}),disabled:e,"aria-label":`Remove rule ${String(g+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,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[k.rules.length>=d.rulesMax?null:(0,b.jsx)(f.Button,{size:"sm",icon:(0,b.jsx)(ap.Plus,{"aria-hidden":!0}),disabled:e,"data-testid":"network-rules-add",onClick:()=>{var a;l((a={newKey:aB,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,b.jsxs)("span",{className:"text-meta text-muted-foreground tabular-nums","data-testid":"network-rules-count",children:[k.rules.length," of ",d.rulesMax," rules"]})]}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2 border-t border-border pt-3",children:[(0,b.jsx)(f.Button,{variant:"primary",isLoading:e,disabled:!s||"rules"===k.kind&&k.rules.some(a=>T(a,"from").length+T(a,"to").length>0||U(a,"from")||U(a,"to")),"data-testid":"network-rules-save",onClick:()=>{j(L(k))},children:"Save rules"}),s?(0,b.jsx)(f.Button,{disabled:e,"data-testid":"network-rules-discard",onClick:()=>{l(K(a,aB))},children:"Discard changes"}):null,(0,b.jsx)(f.Button,{variant:"ghost",className:"ml-auto",disabled:e,"data-testid":"network-rules-off",onClick:()=>{null===a?l(M(k,!1)):n(!0)},children:"Remove all rules"})]})]}),void 0===g?null:(0,b.jsx)(h.InlineError,{variant:"field",title:"Couldn’t save the rules",description:g}),void 0===i||s?null:(0,b.jsx)("p",{role:"status",className:"text-meta text-muted-foreground","data-testid":"network-rules-note",children:i}),(0,b.jsx)(ar.AlertDialog,{open:m,onOpenChange:a=>{a||e||n(!1)},children:(0,b.jsxs)(ar.AlertDialogContent,{"data-testid":"network-rules-off-dialog",className:as.dialogSurface.phoneSheet,children:[(0,b.jsxs)(ar.AlertDialogHeader,{children:[(0,b.jsx)(ar.AlertDialogTitle,{children:"Remove all rules?"}),(0,b.jsx)(ar.AlertDialogDescription,{children:"Every ship may send to, read and manage every ship again from now on. The rules are gone: to have them back, set them again."})]}),(0,b.jsxs)(ar.AlertDialogFooter,{children:[(0,b.jsx)(ar.AlertDialogClose,{render:(0,b.jsx)(f.Button,{disabled:e}),children:"Cancel"}),(0,b.jsx)(f.Button,{variant:"destructive",isLoading:e,"data-testid":"network-rules-off-confirm",onClick:()=>{n(!1),j(null)},children:"Remove all rules"})]})]})})]})}var aD=a.i(72872);function aE({refusals:a,error:c,onRetry:d,context:e,now:f}){let j;return j=void 0!==c?(0,b.jsx)(h.InlineError,{title:"Couldn’t read the refusals",description:c,onRetry:d}):void 0===a?(0,b.jsx)(i.LoadingSkeleton,{variant:"list",rows:3,label:"Loading the refusals"}):0===a.length?(0,b.jsx)(g.EmptyState,{variant:"section",title:"No send has been refused."}):(0,b.jsx)("ol",{className:"flex flex-col gap-2","data-testid":"network-refusals-list",children:a.map(a=>(0,b.jsx)(aF,{refusal:a,context:e,now:f},a.id))}),(0,b.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,b.jsx)("h2",{id:"network-refusals",className:"text-body font-semibold",children:"Refusals"}),(0,b.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."}),j]})}function aF({refusal:a,context:c,now:d}){let e,f=new Date(a.at),{recipient:g}=a,h="ship"===g.kind?[g.ship]:g.ships;return(0,b.jsxs)("li",{"data-testid":"network-refusal",className:"flex flex-col gap-2 rounded-md border border-border px-3 py-2.5",children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-3 gap-y-0.5",children:[(0,b.jsx)("p",{className:"text-body font-medium",children:function(a){let{sender:b,recipient:c}=a;switch(c.kind){case"ship":return`${b.name} tried to message ${c.ship.name}.`;case"type":return`${b.name} tried to message the type ${c.type}: ${(0,I.listed)(c.ships.map(a=>a.name))}.`}}(a)}),(0,b.jsx)("time",{dateTime:a.at,title:(0,aD.fullDateTime)(f),className:"text-meta text-muted-foreground tabular-nums",children:(0,aD.relativeTime)(f,d)})]}),(0,b.jsxs)("dl",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(aG,{side:"From",ship:a.sender,context:c}),h.map(a=>(0,b.jsx)(aG,{side:"To",ship:a,context:c},a.id))]}),(0,b.jsx)("p",{className:"text-meta text-muted-foreground",children:(e=`Refused by network settings version ${String(a.settingsVersion)}`,null===a.whilePluginUnavailable?`${e}.`:`${e} while the networking plugin was not responding: ${ak[a.whilePluginUnavailable].name}.`)})]})}function aG({side:a,ship:c,context:d}){let e=(0,I.chipsOf)(c,d);return(0,b.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1",children:[(0,b.jsxs)("dt",{className:"text-meta text-muted-foreground",children:[a," ",(0,b.jsx)("span",{className:"font-medium text-foreground",children:c.name})]}),(0,b.jsx)("dd",{className:"flex min-w-0 flex-wrap items-center gap-1",children:0===e.length?(0,b.jsx)("span",{className:"text-meta text-muted-foreground",children:"No labels"}):e.map(a=>(0,b.jsx)(V.LabelChip,{chip:a,testId:"network-refusal-label"},a.valueId))})]})}var aH=a.i(91003),aI=a.i(38023),aJ=a.i(65563),aK=a.i(1851),aL=a.i(90146),aM=a.i(67336),aN=a.i(10023),aO=a.i(28562),aP=a.i(68450),aQ=a.i(34159),aR=a.i(70025),aS=a.i(33217),aT=a.i(37927),aU=a.i(14499);let aV={send:"Every ship may send to every ship.",read:"Every ship may read every ship.",manage:"Every ship may manage every ship."};function aW(a){switch(a.rule){case"argo":return{key:a.rule,name:"argo",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:"Owner",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:"Answer",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:"Connected plugins read",meaning:"A plugin argo connected reads every ship, whatever the rules.",isOn:a.isOn,turnedBy:"never"};case"viewerRead":return{key:a.rule,name:"Viewer reads",meaning:"The viewer reads every ship.",isOn:a.isOn,turnedBy:"argo"};case"open":return{key:`open-${a.verb}`,name:`Open for ${a.verb}`,meaning:aV[a.verb],isOn:a.isOn,turnedBy:"plugin"}}}var aX=a.i(42871),aY=a.i(10572);a.s(["NetworkPageFor",0,function({pickedShipId:a}){var j,k;let l,m,o,p,q,r,s,t,u=(0,e.useRouter)(),v=(0,aP.useNow)(),w=(0,aI.useConsoleFrame)(),x=(0,aN.useNeedsAttention)(),y=(0,aM.useLiveFleet)(),z=(0,aJ.useAccess)(),A=(0,aQ.usePluginNav)(),B=(0,aO.useHasNetwork)(),C=(0,aO.useNetwork)(),D=(0,aL.useLabelContext)(),E=(0,aL.useFleetSnapshot)(),F=(j=B?a:void 0,m=(0,aU.useTRPC)(),(0,aS.useQuery)({...m.fleet.explainReach.queryOptions(void 0===j?aX.skipToken:{fromShipId:j}),select:ad})),G=(o=(0,aU.useTRPC)(),(0,aS.useQuery)(o.fleet.reachRefusals.queryOptions(void 0,{enabled:B}))),H=(p=(0,aU.useTRPC)(),(0,aS.useQuery)(p.fleet.declaredNetworkRules.queryOptions(void 0,{enabled:B}))),I=(q=(0,aU.useTRPC)(),(0,aS.useQuery)(q.fleet.builtInRules.queryOptions(void 0,{enabled:B}))),J=(r=(0,aU.useTRPC)(),s=(0,aT.useQueryClient)(),{setViewerRead:a=>{t.mutate({rule:"viewerRead",isOn:a})},isPending:(t=(0,aR.useMutation)(r.fleet.setBuiltInRule.mutationOptions({onSuccess:()=>s.invalidateQueries({queryKey:r.fleet.builtInRules.queryKey()})}))).isPending,error:t.error?.message}),K=(0,aO.useSaveNetworkRules)(),L=(0,aO.useSaveNetworkDeclaration)(),{networkRulesMax:M,shipLabelsMax:N,whileUnavailable:O,notRespondingAfterMinSeconds:P,notRespondingAfterMaxSeconds:Q}=(0,aK.useConsoleConstants)();if((0,aY.useSignInWhenSessionEnds)([x.error,y.error]),B)if(C.isError)l=(0,b.jsx)(h.InlineError,{title:"Couldn’t read the network",description:C.error.message,onRetry:()=>{C.refetch()}});else if(void 0===C.data||void 0===D||void 0===E.data)l=(0,b.jsx)(i.LoadingSkeleton,{variant:"detail",rows:4,label:"Loading the network"});else{let c;l=(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(n,{rows:void 0===I.data?void 0:I.data.map(aW),error:I.error?.message,onRetry:()=>{I.refetch()},isTurning:J.isPending,turnError:J.error,onViewerReadChange:J.setViewerRead}),(0,b.jsx)(aC,{rules:C.data.rules,context:D,limits:{rulesMax:M,selectorMax:N},isSaving:K.isPending,saveError:K.error?.message,savedNote:void 0===K.data?void 0:function(a){switch(a){case"supplied":return"Saved. The fleet enforces them from now on.";case"waiting":return"Saved. The fleet does not answer yet: the networking plugin supplies them as soon as it does.";case"not-connected":case"unregistered":return"Saved."}}(K.data.supply),onSave:a=>{K.mutate(a)}},JSON.stringify(C.data.rules)),(0,b.jsx)(X,{declared:void 0===H.data?void 0:(k=H.data,c=new Map(E.data.map(a=>[a.id,a.name])),k.filter(({rules:a})=>a.length>0).map(({shipId:a,rules:b})=>({shipId:a,declaredBy:c.get(a)??a,rules:b})).sort((a,b)=>a.declaredBy.localeCompare(b.declaredBy))),error:H.error?.message,onRetry:()=>{H.refetch()},context:D}),(0,b.jsx)(ao,{declaration:C.data.declaration,options:O,bounds:{min:P,max:Q},isSaving:L.isPending,saveError:L.error?.message,savedNote:void 0===L.data?void 0:function(a){switch(a){case"supplied":return"Saved. The networking plugin registered again with it.";case"waiting":return"Saved. The fleet does not answer yet: the networking plugin registers again with it as soon as it does.";case"not-connected":case"unregistered":return"Saved."}}(L.data.supply),onSave:a=>{L.mutate(a)}},JSON.stringify(C.data.declaration)),(0,b.jsx)(ai,{ships:E.data.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)),pickedShipId:a,reachableShipIds:F.data,reachError:F.error?.message,onPick:a=>{u.replace(void 0===a?"/network":`/network?reach=${a}`,{scroll:!1})},onRetry:()=>{F.refetch()}}),(0,b.jsx)(aE,{refusals:G.data,error:G.error?.message,onRetry:()=>{G.refetch()},context:D,now:v})]})}else l=(0,b.jsx)(g.EmptyState,{icon:(0,b.jsx)(c.Network,{"aria-hidden":!0}),title:z.canEditNetwork?"The networking plugin is not connected":"Only argo sees the network rules",description:z.canEditNetwork?"Connect it in Settings. Until it supplies rules, every ship may message every ship.":void 0,action:z.canEditNetwork&&A.hasSettings?(0,b.jsx)(f.Button,{nativeButton:!1,render:(0,b.jsx)(d.default,{href:"/settings"}),"data-testid":"network-open-settings",children:"Open Settings"}):void 0});return(0,b.jsx)(aH.ListPage,{...w,title:"Network",description:"Who may send to, read or manage whom. The networking plugin supplies these rules to the fleet, which checks them on every send. Only argo sees this page.",live:y.live,children:l})}],71915)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_console_app_%28console%29_network_network-page_tsx_0qc3h-9._.js.map
|