@burdenoff/microfe-adaptercloud 2026.802.2 → 2026.825.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.
Files changed (23) hide show
  1. package/dist/adaptercloud/components/viz/TopologyGraph.d.ts +1 -0
  2. package/dist/adaptercloud/components/viz/TopologyGraph.d.ts.map +1 -1
  3. package/dist/adaptercloud/components/viz/TopologyGraph.js.map +1 -1
  4. package/dist/adaptercloud/hooks/useAdapterCloudApi.d.ts +7 -0
  5. package/dist/adaptercloud/hooks/useAdapterCloudApi.d.ts.map +1 -1
  6. package/dist/adaptercloud/hooks/useAdapterCloudApi.js +52 -7
  7. package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
  8. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.d.ts.map +1 -1
  9. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js +147 -135
  10. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -1
  11. package/dist/adaptercloud/pages/connections/connectionSync.d.ts +4 -0
  12. package/dist/adaptercloud/pages/connections/connectionSync.d.ts.map +1 -0
  13. package/dist/adaptercloud/pages/connections/connectionSync.js +8 -0
  14. package/dist/adaptercloud/pages/connections/connectionSync.js.map +1 -0
  15. package/dist/adaptercloud/pages/topology/TopologyPage.d.ts +1 -1
  16. package/dist/adaptercloud/pages/topology/TopologyPage.d.ts.map +1 -1
  17. package/dist/adaptercloud/pages/topology/TopologyPage.js +185 -188
  18. package/dist/adaptercloud/pages/topology/TopologyPage.js.map +1 -1
  19. package/dist/adaptercloud/pages/topology/topologyImpact.d.ts +8 -0
  20. package/dist/adaptercloud/pages/topology/topologyImpact.d.ts.map +1 -0
  21. package/dist/adaptercloud/pages/topology/topologyImpact.js +17 -0
  22. package/dist/adaptercloud/pages/topology/topologyImpact.js.map +1 -0
  23. package/package.json +2 -2
@@ -5,21 +5,22 @@ import { StatusBadge as i } from "../../components/StatusBadge.js";
5
5
  import { DataState as a } from "../../components/DataState.js";
6
6
  import { TopologyGraph as o } from "../../components/viz/TopologyGraph.js";
7
7
  import "../../components/viz/index.js";
8
- import { useResources as s, useTopology as ee } from "../../hooks/useAdapterCloudApi.js";
9
- import { useCallback as c, useMemo as l, useState as u } from "react";
10
- import { useI18n as te } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
- import { ArrowRight as d, Boxes as f, GitBranch as p, Layers as m, RefreshCw as h, Search as g, Waypoints as _, X as v } from "lucide-react";
12
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
13
- import { GlassCard as x } from "@burdenoff/fe-libs/ui";
8
+ import { useTopology as s, useTopologyResources as c } from "../../hooks/useAdapterCloudApi.js";
9
+ import { countTransitiveDependents as l } from "./topologyImpact.js";
10
+ import { useCallback as u, useMemo as d, useState as f } from "react";
11
+ import { useI18n as p } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
+ import { ArrowRight as m, Boxes as h, GitBranch as g, Layers as _, RefreshCw as v, Search as y, Waypoints as b, X as x } from "lucide-react";
13
+ import { jsx as S, jsxs as C } from "react/jsx-runtime";
14
+ import { GlassCard as w } from "@burdenoff/fe-libs/ui";
14
15
  //#region src/adaptercloud/pages/topology/TopologyPage.tsx
15
- var S = [
16
+ var T = [
16
17
  "DEPENDS_ON",
17
18
  "CONNECTS_TO",
18
19
  "ROUTES_TO",
19
20
  "REPLICATES_TO",
20
21
  "CONTAINS"
21
22
  ];
22
- function C(e, t) {
23
+ function ee(e, t) {
23
24
  let n = e.toLowerCase();
24
25
  if (/^(gke|k8s|kubernetes|eks|aks)\./.test(n)) return "Kubernetes";
25
26
  if (/^(iot|edge)\./.test(n)) return "Edge / IoT";
@@ -36,352 +37,348 @@ function C(e, t) {
36
37
  }
37
38
  return "Other";
38
39
  }
39
- function w() {
40
- let { navigateTo: w } = e(), { t: T } = te(), E = c((e, t) => {
41
- let n = T(e);
40
+ function E() {
41
+ let { navigateTo: E } = e(), { t: D } = p(), O = u((e, t) => {
42
+ let n = D(e);
42
43
  return n === e ? t : n;
43
- }, [T]), D = s({ pagination: { limit: 100 } }), O = ee(), [k, A] = u(""), [j, M] = u(""), [N, P] = u(null), F = l(() => D.data?.items ?? [], [D.data]), I = l(() => O.data ?? [], [O.data]), L = l(() => F.map((e) => ({
44
+ }, [D]), k = c(), A = s(), [j, M] = f(""), [N, P] = f(""), [F, I] = f(null), L = d(() => k.data ?? [], [k.data]), R = d(() => A.data ?? [], [A.data]), z = d(() => L.map((e) => ({
44
45
  id: e.id,
45
46
  label: e.name,
46
47
  type: e.resourceType,
47
48
  state: e.state,
48
- group: C(e.resourceType, e.connection?.name)
49
- })), [F]), R = l(() => new Set(L.map((e) => e.id)), [L]), z = l(() => new Map(F.map((e) => [e.id, e.state])), [F]), B = l(() => new Map(L.map((e) => [e.id, e])), [L]), V = l(() => I.filter((e) => R.has(e.fromResourceId) && R.has(e.toResourceId)).map((e) => ({
49
+ group: ee(e.resourceType, e.connection?.name)
50
+ })), [L]), B = d(() => new Set(z.map((e) => e.id)), [z]), V = d(() => new Map(L.map((e) => [e.id, e.state])), [L]), H = d(() => new Map(z.map((e) => [e.id, e])), [z]), U = d(() => R.filter((e) => B.has(e.fromResourceId) && B.has(e.toResourceId)).map((e) => ({
50
51
  id: e.id,
51
52
  from: e.fromResourceId,
52
53
  to: e.toResourceId,
53
54
  kind: e.kind,
54
- drifted: z.get(e.fromResourceId) === "DRIFTED" || z.get(e.toResourceId) === "DRIFTED"
55
+ bidirectional: e.bidirectional,
56
+ drifted: V.get(e.fromResourceId) === "DRIFTED" || V.get(e.toResourceId) === "DRIFTED"
55
57
  })), [
56
- I,
57
58
  R,
58
- z
59
- ]), H = l(() => {
59
+ B,
60
+ V
61
+ ]), W = d(() => {
60
62
  let e = /* @__PURE__ */ new Map();
61
- for (let t of V) {
63
+ for (let t of U) {
62
64
  let n = e.get(t.from) ?? [];
63
- n.push(t.to), e.set(t.from, n);
65
+ if (n.push(t.to), e.set(t.from, n), t.bidirectional) {
66
+ let n = e.get(t.to) ?? [];
67
+ n.push(t.from), e.set(t.to, n);
68
+ }
64
69
  }
65
70
  return e;
66
- }, [V]), U = k.trim().toLowerCase(), W = l(() => U ? L.filter((e) => e.label.toLowerCase().includes(U) || (e.type ?? "").toLowerCase().includes(U)) : L, [L, U]), G = l(() => new Set(W.map((e) => e.id)), [W]), K = l(() => V.filter((e) => G.has(e.from) && G.has(e.to) && (j === "" || e.kind === j)), [
67
- V,
68
- G,
69
- j
70
- ]), q = l(() => {
71
+ }, [U]), G = j.trim().toLowerCase(), K = d(() => G ? z.filter((e) => e.label.toLowerCase().includes(G) || (e.type ?? "").toLowerCase().includes(G)) : z, [z, G]), q = d(() => new Set(K.map((e) => e.id)), [K]), J = d(() => U.filter((e) => q.has(e.from) && q.has(e.to) && (N === "" || e.kind === N)), [
72
+ U,
73
+ q,
74
+ N
75
+ ]), Y = d(() => {
71
76
  let e = {};
72
- for (let t of V) e[t.kind ?? ""] = (e[t.kind ?? ""] ?? 0) + 1;
77
+ for (let t of U) e[t.kind ?? ""] = (e[t.kind ?? ""] ?? 0) + 1;
73
78
  return e;
74
- }, [V]), J = l(() => {
75
- if (!N) return null;
76
- let e = B.get(N);
77
- if (!e) return null;
78
- let t = H.get(N)?.length ?? 0, n = /* @__PURE__ */ new Set(), r = [...H.get(N) ?? []];
79
- for (; r.length;) {
80
- let e = r.pop();
81
- if (!(e === void 0 || e === N || n.has(e))) {
82
- n.add(e);
83
- for (let t of H.get(e) ?? []) r.push(t);
84
- }
85
- }
86
- return {
79
+ }, [U]), X = d(() => {
80
+ if (!F) return null;
81
+ let e = H.get(F);
82
+ return e ? {
87
83
  node: e,
88
- dependencies: t,
89
- blastRadius: n.size
90
- };
84
+ dependencies: W.get(F)?.length ?? 0,
85
+ blastRadius: l(F, U)
86
+ } : null;
91
87
  }, [
92
- N,
93
- B,
94
- H
95
- ]), Y = l(() => new Set(L.map((e) => e.group)).size, [L]), X = c((e) => {
96
- P((t) => t === e ? null : e);
97
- }, []), Z = D.isLoading || O.isLoading, Q = D.isError || O.isError, $ = c(() => {
98
- D.refetch(), O.refetch();
99
- }, [D, O]);
100
- return /* @__PURE__ */ b(t, {
101
- title: E("adaptercloud.topology.title", "Estate Topology"),
102
- description: E("adaptercloud.topology.subtitle", "A live dependency map of your entire infrastructure — every system in one graph."),
103
- actions: /* @__PURE__ */ b("button", {
88
+ F,
89
+ H,
90
+ W,
91
+ U
92
+ ]), te = d(() => new Set(z.map((e) => e.group)).size, [z]), ne = u((e) => {
93
+ I((t) => t === e ? null : e);
94
+ }, []), Z = k.isLoading || A.isLoading, Q = k.isError || A.isError, $ = u(() => {
95
+ k.refetch(), A.refetch();
96
+ }, [k, A]);
97
+ return /* @__PURE__ */ C(t, {
98
+ title: O("adaptercloud.topology.title", "Estate Topology"),
99
+ description: O("adaptercloud.topology.subtitle", "A live dependency map of your entire infrastructure — every system in one graph."),
100
+ actions: /* @__PURE__ */ C("button", {
104
101
  type: "button",
105
102
  onClick: $,
106
103
  className: "inline-flex items-center gap-2 rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-accent",
107
- children: [/* @__PURE__ */ y(h, { className: "h-4 w-4" }), E("adaptercloud.common.refresh", "Refresh")]
104
+ children: [/* @__PURE__ */ S(v, { className: "h-4 w-4" }), O("adaptercloud.common.refresh", "Refresh")]
108
105
  }),
109
- children: [/* @__PURE__ */ b("div", {
106
+ children: [/* @__PURE__ */ C("div", {
110
107
  className: "mb-6 flex flex-wrap items-center gap-3",
111
108
  children: [
112
- /* @__PURE__ */ b("div", {
109
+ /* @__PURE__ */ C("div", {
113
110
  className: "relative w-full sm:w-64",
114
111
  children: [
115
- /* @__PURE__ */ y(g, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }),
116
- /* @__PURE__ */ y("input", {
112
+ /* @__PURE__ */ S(y, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-secondary" }),
113
+ /* @__PURE__ */ S("input", {
117
114
  type: "text",
118
- value: k,
119
- onChange: (e) => A(e.target.value),
120
- "aria-label": E("adaptercloud.topology.searchNodes", "Search nodes"),
121
- placeholder: E("adaptercloud.topology.searchPlaceholder", "Search nodes…"),
115
+ value: j,
116
+ onChange: (e) => M(e.target.value),
117
+ "aria-label": O("adaptercloud.topology.searchNodes", "Search nodes"),
118
+ placeholder: O("adaptercloud.topology.searchPlaceholder", "Search nodes…"),
122
119
  className: "w-full rounded-lg border border-border-subtle bg-bg-surface py-2 pl-9 pr-9 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]"
123
120
  }),
124
- k && /* @__PURE__ */ y("button", {
121
+ j && /* @__PURE__ */ S("button", {
125
122
  type: "button",
126
- onClick: () => A(""),
127
- "aria-label": E("adaptercloud.topology.clearSearch", "Clear search"),
123
+ onClick: () => M(""),
124
+ "aria-label": O("adaptercloud.topology.clearSearch", "Clear search"),
128
125
  className: "absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-text-secondary transition-colors hover:text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
129
- children: /* @__PURE__ */ y(v, { className: "h-4 w-4" })
126
+ children: /* @__PURE__ */ S(x, { className: "h-4 w-4" })
130
127
  })
131
128
  ]
132
129
  }),
133
- /* @__PURE__ */ b("select", {
134
- value: j,
135
- onChange: (e) => M(e.target.value),
136
- "aria-label": E("adaptercloud.topology.filterByKind", "Filter by edge kind"),
130
+ /* @__PURE__ */ C("select", {
131
+ value: N,
132
+ onChange: (e) => P(e.target.value),
133
+ "aria-label": O("adaptercloud.topology.filterByKind", "Filter by edge kind"),
137
134
  className: "w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] sm:w-auto",
138
- children: [/* @__PURE__ */ y("option", {
135
+ children: [/* @__PURE__ */ S("option", {
139
136
  value: "",
140
- children: E("adaptercloud.topology.allKinds", "All edge kinds")
141
- }), S.map((e) => /* @__PURE__ */ y("option", {
137
+ children: O("adaptercloud.topology.allKinds", "All edge kinds")
138
+ }), T.map((e) => /* @__PURE__ */ S("option", {
142
139
  value: e,
143
140
  children: n(e)
144
141
  }, e))]
145
142
  }),
146
- !Z && !Q && L.length > 0 && /* @__PURE__ */ b("div", {
143
+ !Z && !Q && z.length > 0 && /* @__PURE__ */ C("div", {
147
144
  className: "ml-auto flex flex-wrap items-center gap-4 text-xs text-text-secondary",
148
145
  children: [
149
- /* @__PURE__ */ b("span", {
146
+ /* @__PURE__ */ C("span", {
150
147
  className: "inline-flex items-center gap-1.5",
151
148
  children: [
152
- /* @__PURE__ */ y(f, { className: "h-3.5 w-3.5" }),
153
- /* @__PURE__ */ y("span", {
149
+ /* @__PURE__ */ S(h, { className: "h-3.5 w-3.5" }),
150
+ /* @__PURE__ */ S("span", {
154
151
  className: "tabular-nums font-medium text-text-primary",
155
- children: L.length
152
+ children: z.length
156
153
  }),
157
154
  " ",
158
- E("adaptercloud.topology.nodes", "nodes")
155
+ O("adaptercloud.topology.nodes", "nodes")
159
156
  ]
160
157
  }),
161
- /* @__PURE__ */ b("span", {
158
+ /* @__PURE__ */ C("span", {
162
159
  className: "inline-flex items-center gap-1.5",
163
160
  children: [
164
- /* @__PURE__ */ y(p, { className: "h-3.5 w-3.5" }),
165
- /* @__PURE__ */ y("span", {
161
+ /* @__PURE__ */ S(g, { className: "h-3.5 w-3.5" }),
162
+ /* @__PURE__ */ S("span", {
166
163
  className: "tabular-nums font-medium text-text-primary",
167
- children: V.length
164
+ children: U.length
168
165
  }),
169
166
  " ",
170
- E("adaptercloud.topology.edges", "edges")
167
+ O("adaptercloud.topology.edges", "edges")
171
168
  ]
172
169
  }),
173
- /* @__PURE__ */ b("span", {
170
+ /* @__PURE__ */ C("span", {
174
171
  className: "inline-flex items-center gap-1.5",
175
172
  children: [
176
- /* @__PURE__ */ y(m, { className: "h-3.5 w-3.5" }),
177
- /* @__PURE__ */ y("span", {
173
+ /* @__PURE__ */ S(_, { className: "h-3.5 w-3.5" }),
174
+ /* @__PURE__ */ S("span", {
178
175
  className: "tabular-nums font-medium text-text-primary",
179
- children: Y
176
+ children: te
180
177
  }),
181
178
  " ",
182
- E("adaptercloud.topology.zones", "zones")
179
+ O("adaptercloud.topology.zones", "zones")
183
180
  ]
184
181
  })
185
182
  ]
186
183
  })
187
184
  ]
188
- }), /* @__PURE__ */ y(a, {
185
+ }), /* @__PURE__ */ S(a, {
189
186
  isLoading: Z,
190
187
  isError: Q,
191
- isEmpty: L.length === 0,
192
- error: D.error ?? O.error,
188
+ isEmpty: z.length === 0,
189
+ error: k.error ?? A.error,
193
190
  onRetry: $,
194
- emptyTitle: E("adaptercloud.topology.emptyTitle", "No topology yet"),
195
- emptyDescription: E("adaptercloud.topology.emptyDescription", "No topology yet — register resources and their dependencies to see them mapped here."),
196
- emptyIcon: /* @__PURE__ */ y(_, { className: "h-10 w-10" }),
197
- emptyAction: /* @__PURE__ */ y("button", {
191
+ emptyTitle: O("adaptercloud.topology.emptyTitle", "No topology yet"),
192
+ emptyDescription: O("adaptercloud.topology.emptyDescription", "No topology yet — register resources and their dependencies to see them mapped here."),
193
+ emptyIcon: /* @__PURE__ */ S(b, { className: "h-10 w-10" }),
194
+ emptyAction: /* @__PURE__ */ S("button", {
198
195
  type: "button",
199
- onClick: () => w("/resources"),
196
+ onClick: () => E("/resources"),
200
197
  className: "rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:opacity-90",
201
- children: E("adaptercloud.topology.goToResources", "Go to resources")
198
+ children: O("adaptercloud.topology.goToResources", "Go to resources")
202
199
  }),
203
- children: /* @__PURE__ */ b("div", {
200
+ children: /* @__PURE__ */ C("div", {
204
201
  className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_20rem]",
205
- children: [/* @__PURE__ */ b("div", {
202
+ children: [/* @__PURE__ */ C("div", {
206
203
  className: "min-w-0 space-y-4",
207
204
  children: [
208
- V.length === 0 && /* @__PURE__ */ y("p", {
205
+ U.length === 0 && /* @__PURE__ */ S("p", {
209
206
  className: "rounded-lg border border-border-subtle bg-bg-sunken/50 px-4 py-3 text-sm text-text-secondary",
210
- children: E("adaptercloud.topology.noEdges", "No dependency edges recorded yet — nodes are shown grouped by zone. Add dependencies from a resource to connect the graph.")
207
+ children: O("adaptercloud.topology.noEdges", "No dependency edges recorded yet — nodes are shown grouped by zone. Add dependencies from a resource to connect the graph.")
211
208
  }),
212
- W.length > 0 ? /* @__PURE__ */ y(o, {
213
- nodes: W,
214
- edges: K,
215
- selectedId: N,
216
- onSelect: X
217
- }) : /* @__PURE__ */ b("div", {
209
+ K.length > 0 ? /* @__PURE__ */ S(o, {
210
+ nodes: K,
211
+ edges: J,
212
+ selectedId: F,
213
+ onSelect: ne
214
+ }) : /* @__PURE__ */ C("div", {
218
215
  className: "flex min-h-[200px] flex-col items-center justify-center gap-2 rounded-xl border border-border-subtle bg-bg-surface p-8 text-center",
219
- children: [/* @__PURE__ */ y(g, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ y("p", {
216
+ children: [/* @__PURE__ */ S(y, { className: "h-8 w-8 text-text-secondary" }), /* @__PURE__ */ S("p", {
220
217
  className: "text-sm text-text-secondary",
221
- children: E("adaptercloud.topology.noMatches", "No nodes match your search.")
218
+ children: O("adaptercloud.topology.noMatches", "No nodes match your search.")
222
219
  })]
223
220
  }),
224
- /* @__PURE__ */ b(x, {
221
+ /* @__PURE__ */ C(w, {
225
222
  className: "p-4",
226
- children: [/* @__PURE__ */ y("h3", {
223
+ children: [/* @__PURE__ */ S("h3", {
227
224
  className: "mb-3 text-sm font-semibold text-text-primary",
228
- children: E("adaptercloud.topology.legend", "Legend")
229
- }), /* @__PURE__ */ b("div", {
225
+ children: O("adaptercloud.topology.legend", "Legend")
226
+ }), /* @__PURE__ */ C("div", {
230
227
  className: "grid gap-4 sm:grid-cols-2",
231
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
228
+ children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
232
229
  className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
233
- children: E("adaptercloud.topology.edgeSignals", "Edge signals")
234
- }), /* @__PURE__ */ b("ul", {
230
+ children: O("adaptercloud.topology.edgeSignals", "Edge signals")
231
+ }), /* @__PURE__ */ C("ul", {
235
232
  className: "space-y-1.5 text-xs text-text-secondary",
236
233
  children: [
237
- /* @__PURE__ */ b("li", {
234
+ /* @__PURE__ */ C("li", {
238
235
  className: "flex items-center gap-2",
239
- children: [/* @__PURE__ */ y("span", {
236
+ children: [/* @__PURE__ */ S("span", {
240
237
  className: "h-0.5 w-6 shrink-0 rounded bg-border-strong",
241
238
  "aria-hidden": !0
242
- }), E("adaptercloud.topology.dependency", "Dependency")]
239
+ }), O("adaptercloud.topology.dependency", "Dependency")]
243
240
  }),
244
- /* @__PURE__ */ b("li", {
241
+ /* @__PURE__ */ C("li", {
245
242
  className: "flex items-center gap-2",
246
- children: [/* @__PURE__ */ y("span", {
243
+ children: [/* @__PURE__ */ S("span", {
247
244
  className: "h-0.5 w-6 shrink-0 rounded bg-accent-blue",
248
245
  "aria-hidden": !0
249
- }), E("adaptercloud.topology.selectedPath", "Selected node path")]
246
+ }), O("adaptercloud.topology.selectedPath", "Selected node path")]
250
247
  }),
251
- /* @__PURE__ */ b("li", {
248
+ /* @__PURE__ */ C("li", {
252
249
  className: "flex items-center gap-2",
253
- children: [/* @__PURE__ */ y("span", {
250
+ children: [/* @__PURE__ */ S("span", {
254
251
  className: "h-0.5 w-6 shrink-0 rounded bg-status-warning-text",
255
252
  "aria-hidden": !0
256
- }), E("adaptercloud.topology.drift", "Drift (endpoint drifted)")]
253
+ }), O("adaptercloud.topology.drift", "Drift (endpoint drifted)")]
257
254
  })
258
255
  ]
259
- })] }), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
256
+ })] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
260
257
  className: "mb-2 text-xs font-medium uppercase tracking-wide text-text-secondary",
261
- children: E("adaptercloud.topology.edgeKinds", "Edge kinds")
262
- }), /* @__PURE__ */ y("ul", {
258
+ children: O("adaptercloud.topology.edgeKinds", "Edge kinds")
259
+ }), /* @__PURE__ */ S("ul", {
263
260
  className: "flex flex-wrap gap-1.5",
264
- children: S.map((e) => /* @__PURE__ */ y("li", { children: /* @__PURE__ */ b("span", {
261
+ children: T.map((e) => /* @__PURE__ */ S("li", { children: /* @__PURE__ */ C("span", {
265
262
  className: "inline-flex items-center gap-1.5 rounded-full bg-bg-sunken px-2.5 py-0.5 text-xs text-text-secondary",
266
- children: [n(e), /* @__PURE__ */ y("span", {
263
+ children: [n(e), /* @__PURE__ */ S("span", {
267
264
  className: "tabular-nums font-medium text-text-primary",
268
- children: q[e] ?? 0
265
+ children: Y[e] ?? 0
269
266
  })]
270
267
  }) }, e))
271
268
  })] })]
272
269
  })]
273
270
  })
274
271
  ]
275
- }), /* @__PURE__ */ y("aside", {
272
+ }), /* @__PURE__ */ S("aside", {
276
273
  className: "lg:sticky lg:top-6 lg:h-fit",
277
- children: /* @__PURE__ */ y(x, {
274
+ children: /* @__PURE__ */ S(w, {
278
275
  className: "p-5",
279
- children: J ? /* @__PURE__ */ b("div", {
276
+ children: X ? /* @__PURE__ */ C("div", {
280
277
  className: "space-y-5",
281
278
  children: [
282
- /* @__PURE__ */ b("div", {
279
+ /* @__PURE__ */ C("div", {
283
280
  className: "flex items-start justify-between gap-3",
284
- children: [/* @__PURE__ */ b("div", {
281
+ children: [/* @__PURE__ */ C("div", {
285
282
  className: "flex min-w-0 items-center gap-2.5",
286
- children: [/* @__PURE__ */ y("span", {
283
+ children: [/* @__PURE__ */ S("span", {
287
284
  className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-bg-sunken",
288
- children: /* @__PURE__ */ y(_, { className: "h-4.5 w-4.5 text-accent-blue" })
289
- }), /* @__PURE__ */ b("div", {
285
+ children: /* @__PURE__ */ S(b, { className: "h-4.5 w-4.5 text-accent-blue" })
286
+ }), /* @__PURE__ */ C("div", {
290
287
  className: "min-w-0",
291
- children: [/* @__PURE__ */ y("h3", {
288
+ children: [/* @__PURE__ */ S("h3", {
292
289
  className: "truncate text-base font-semibold text-text-primary",
293
- children: J.node.label
294
- }), /* @__PURE__ */ y("p", {
290
+ children: X.node.label
291
+ }), /* @__PURE__ */ S("p", {
295
292
  className: "text-xs text-text-secondary",
296
- children: E("adaptercloud.topology.inspector", "Inspector")
293
+ children: O("adaptercloud.topology.inspector", "Inspector")
297
294
  })]
298
295
  })]
299
- }), /* @__PURE__ */ y("button", {
296
+ }), /* @__PURE__ */ S("button", {
300
297
  type: "button",
301
- onClick: () => P(null),
302
- "aria-label": E("adaptercloud.topology.closeInspector", "Close inspector"),
298
+ onClick: () => I(null),
299
+ "aria-label": O("adaptercloud.topology.closeInspector", "Close inspector"),
303
300
  className: "rounded p-1 text-text-secondary transition-colors hover:bg-accent hover:text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]",
304
- children: /* @__PURE__ */ y(v, { className: "h-4 w-4" })
301
+ children: /* @__PURE__ */ S(x, { className: "h-4 w-4" })
305
302
  })]
306
303
  }),
307
- /* @__PURE__ */ b("dl", {
304
+ /* @__PURE__ */ C("dl", {
308
305
  className: "space-y-3 text-sm",
309
306
  children: [
310
- /* @__PURE__ */ b("div", {
307
+ /* @__PURE__ */ C("div", {
311
308
  className: "flex items-center justify-between gap-3",
312
- children: [/* @__PURE__ */ y("dt", {
309
+ children: [/* @__PURE__ */ S("dt", {
313
310
  className: "text-text-secondary",
314
- children: E("adaptercloud.topology.type", "Type")
315
- }), /* @__PURE__ */ y("dd", {
311
+ children: O("adaptercloud.topology.type", "Type")
312
+ }), /* @__PURE__ */ S("dd", {
316
313
  className: "truncate font-mono text-xs text-text-primary",
317
- children: J.node.type ?? "—"
314
+ children: X.node.type ?? "—"
318
315
  })]
319
316
  }),
320
- /* @__PURE__ */ b("div", {
317
+ /* @__PURE__ */ C("div", {
321
318
  className: "flex items-center justify-between gap-3",
322
- children: [/* @__PURE__ */ y("dt", {
319
+ children: [/* @__PURE__ */ S("dt", {
323
320
  className: "text-text-secondary",
324
- children: E("adaptercloud.topology.zone", "Zone")
325
- }), /* @__PURE__ */ y("dd", {
321
+ children: O("adaptercloud.topology.zone", "Zone")
322
+ }), /* @__PURE__ */ S("dd", {
326
323
  className: "text-text-primary",
327
- children: J.node.group
324
+ children: X.node.group
328
325
  })]
329
326
  }),
330
- /* @__PURE__ */ b("div", {
327
+ /* @__PURE__ */ C("div", {
331
328
  className: "flex items-center justify-between gap-3",
332
- children: [/* @__PURE__ */ y("dt", {
329
+ children: [/* @__PURE__ */ S("dt", {
333
330
  className: "text-text-secondary",
334
- children: E("adaptercloud.topology.state", "State")
335
- }), /* @__PURE__ */ y("dd", { children: /* @__PURE__ */ y(i, {
336
- status: J.node.state ?? "",
337
- label: J.node.state ? r[J.node.state] : void 0
331
+ children: O("adaptercloud.topology.state", "State")
332
+ }), /* @__PURE__ */ S("dd", { children: /* @__PURE__ */ S(i, {
333
+ status: X.node.state ?? "",
334
+ label: X.node.state ? r[X.node.state] : void 0
338
335
  }) })]
339
336
  })
340
337
  ]
341
338
  }),
342
- /* @__PURE__ */ b("div", {
339
+ /* @__PURE__ */ C("div", {
343
340
  className: "grid grid-cols-2 gap-3",
344
- children: [/* @__PURE__ */ b("div", {
341
+ children: [/* @__PURE__ */ C("div", {
345
342
  className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3",
346
- children: [/* @__PURE__ */ y("p", {
343
+ children: [/* @__PURE__ */ S("p", {
347
344
  className: "text-2xl font-bold tabular-nums text-text-primary",
348
- children: J.dependencies
349
- }), /* @__PURE__ */ y("p", {
345
+ children: X.dependencies
346
+ }), /* @__PURE__ */ S("p", {
350
347
  className: "mt-0.5 text-xs text-text-secondary",
351
- children: E("adaptercloud.topology.dependencies", "Dependencies")
348
+ children: O("adaptercloud.topology.dependencies", "Dependencies")
352
349
  })]
353
- }), /* @__PURE__ */ b("div", {
350
+ }), /* @__PURE__ */ C("div", {
354
351
  className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3",
355
- children: [/* @__PURE__ */ y("p", {
352
+ children: [/* @__PURE__ */ S("p", {
356
353
  className: "text-2xl font-bold tabular-nums text-text-primary",
357
- children: J.blastRadius
358
- }), /* @__PURE__ */ y("p", {
354
+ children: X.blastRadius
355
+ }), /* @__PURE__ */ S("p", {
359
356
  className: "mt-0.5 text-xs text-text-secondary",
360
- children: E("adaptercloud.topology.blastRadius", "Blast radius")
357
+ children: O("adaptercloud.topology.blastRadius", "Dependent impact")
361
358
  })]
362
359
  })]
363
360
  }),
364
- /* @__PURE__ */ b("button", {
361
+ /* @__PURE__ */ C("button", {
365
362
  type: "button",
366
- onClick: () => w(`/resources/${J.node.id}`),
363
+ onClick: () => E(`/resources/${X.node.id}`),
367
364
  className: "inline-flex w-full items-center justify-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:opacity-90",
368
- children: [E("adaptercloud.topology.viewResource", "View resource"), /* @__PURE__ */ y(d, { className: "h-4 w-4" })]
365
+ children: [O("adaptercloud.topology.viewResource", "View resource"), /* @__PURE__ */ S(m, { className: "h-4 w-4" })]
369
366
  })
370
367
  ]
371
- }) : /* @__PURE__ */ b("div", {
368
+ }) : /* @__PURE__ */ C("div", {
372
369
  className: "flex flex-col items-center gap-3 py-8 text-center",
373
370
  children: [
374
- /* @__PURE__ */ y("span", {
371
+ /* @__PURE__ */ S("span", {
375
372
  className: "flex h-11 w-11 items-center justify-center rounded-full bg-bg-sunken",
376
- children: /* @__PURE__ */ y(_, { className: "h-5 w-5 text-text-secondary" })
373
+ children: /* @__PURE__ */ S(b, { className: "h-5 w-5 text-text-secondary" })
377
374
  }),
378
- /* @__PURE__ */ y("p", {
375
+ /* @__PURE__ */ S("p", {
379
376
  className: "text-sm font-medium text-text-primary",
380
- children: E("adaptercloud.topology.inspectorTitle", "Inspector")
377
+ children: O("adaptercloud.topology.inspectorTitle", "Inspector")
381
378
  }),
382
- /* @__PURE__ */ y("p", {
379
+ /* @__PURE__ */ S("p", {
383
380
  className: "max-w-[16rem] text-xs text-text-secondary",
384
- children: E("adaptercloud.topology.inspectorHint", "Select any node in the graph to see its type, state, dependencies and downstream blast radius.")
381
+ children: O("adaptercloud.topology.inspectorHint", "Select any node to see its direct prerequisites and the transitive dependents that may be affected if it changes.")
385
382
  })
386
383
  ]
387
384
  })
@@ -392,6 +389,6 @@ function w() {
392
389
  });
393
390
  }
394
391
  //#endregion
395
- export { w as TopologyPage };
392
+ export { E as TopologyPage };
396
393
 
397
394
  //# sourceMappingURL=TopologyPage.js.map