@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.
- package/dist/adaptercloud/components/viz/TopologyGraph.d.ts +1 -0
- package/dist/adaptercloud/components/viz/TopologyGraph.d.ts.map +1 -1
- package/dist/adaptercloud/components/viz/TopologyGraph.js.map +1 -1
- package/dist/adaptercloud/hooks/useAdapterCloudApi.d.ts +7 -0
- package/dist/adaptercloud/hooks/useAdapterCloudApi.d.ts.map +1 -1
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js +52 -7
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.d.ts.map +1 -1
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js +147 -135
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/connections/connectionSync.d.ts +4 -0
- package/dist/adaptercloud/pages/connections/connectionSync.d.ts.map +1 -0
- package/dist/adaptercloud/pages/connections/connectionSync.js +8 -0
- package/dist/adaptercloud/pages/connections/connectionSync.js.map +1 -0
- package/dist/adaptercloud/pages/topology/TopologyPage.d.ts +1 -1
- package/dist/adaptercloud/pages/topology/TopologyPage.d.ts.map +1 -1
- package/dist/adaptercloud/pages/topology/TopologyPage.js +185 -188
- package/dist/adaptercloud/pages/topology/TopologyPage.js.map +1 -1
- package/dist/adaptercloud/pages/topology/topologyImpact.d.ts +8 -0
- package/dist/adaptercloud/pages/topology/topologyImpact.d.ts.map +1 -0
- package/dist/adaptercloud/pages/topology/topologyImpact.js +17 -0
- package/dist/adaptercloud/pages/topology/topologyImpact.js.map +1 -0
- 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 {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
40
|
-
let { navigateTo:
|
|
41
|
-
let n =
|
|
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
|
-
}, [
|
|
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:
|
|
49
|
-
})), [
|
|
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
|
-
|
|
55
|
+
bidirectional: e.bidirectional,
|
|
56
|
+
drifted: V.get(e.fromResourceId) === "DRIFTED" || V.get(e.toResourceId) === "DRIFTED"
|
|
55
57
|
})), [
|
|
56
|
-
I,
|
|
57
58
|
R,
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
B,
|
|
60
|
+
V
|
|
61
|
+
]), W = d(() => {
|
|
60
62
|
let e = /* @__PURE__ */ new Map();
|
|
61
|
-
for (let t of
|
|
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
|
-
}, [
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
]),
|
|
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
|
|
77
|
+
for (let t of U) e[t.kind ?? ""] = (e[t.kind ?? ""] ?? 0) + 1;
|
|
73
78
|
return e;
|
|
74
|
-
}, [
|
|
75
|
-
if (!
|
|
76
|
-
let e =
|
|
77
|
-
|
|
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:
|
|
89
|
-
blastRadius:
|
|
90
|
-
};
|
|
84
|
+
dependencies: W.get(F)?.length ?? 0,
|
|
85
|
+
blastRadius: l(F, U)
|
|
86
|
+
} : null;
|
|
91
87
|
}, [
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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__ */
|
|
104
|
+
children: [/* @__PURE__ */ S(v, { className: "h-4 w-4" }), O("adaptercloud.common.refresh", "Refresh")]
|
|
108
105
|
}),
|
|
109
|
-
children: [/* @__PURE__ */
|
|
106
|
+
children: [/* @__PURE__ */ C("div", {
|
|
110
107
|
className: "mb-6 flex flex-wrap items-center gap-3",
|
|
111
108
|
children: [
|
|
112
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ C("div", {
|
|
113
110
|
className: "relative w-full sm:w-64",
|
|
114
111
|
children: [
|
|
115
|
-
/* @__PURE__ */ y
|
|
116
|
-
/* @__PURE__ */
|
|
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:
|
|
119
|
-
onChange: (e) =>
|
|
120
|
-
"aria-label":
|
|
121
|
-
placeholder:
|
|
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
|
-
|
|
121
|
+
j && /* @__PURE__ */ S("button", {
|
|
125
122
|
type: "button",
|
|
126
|
-
onClick: () =>
|
|
127
|
-
"aria-label":
|
|
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__ */
|
|
126
|
+
children: /* @__PURE__ */ S(x, { className: "h-4 w-4" })
|
|
130
127
|
})
|
|
131
128
|
]
|
|
132
129
|
}),
|
|
133
|
-
/* @__PURE__ */
|
|
134
|
-
value:
|
|
135
|
-
onChange: (e) =>
|
|
136
|
-
"aria-label":
|
|
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__ */
|
|
135
|
+
children: [/* @__PURE__ */ S("option", {
|
|
139
136
|
value: "",
|
|
140
|
-
children:
|
|
141
|
-
}),
|
|
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 &&
|
|
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__ */
|
|
146
|
+
/* @__PURE__ */ C("span", {
|
|
150
147
|
className: "inline-flex items-center gap-1.5",
|
|
151
148
|
children: [
|
|
152
|
-
/* @__PURE__ */
|
|
153
|
-
/* @__PURE__ */
|
|
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:
|
|
152
|
+
children: z.length
|
|
156
153
|
}),
|
|
157
154
|
" ",
|
|
158
|
-
|
|
155
|
+
O("adaptercloud.topology.nodes", "nodes")
|
|
159
156
|
]
|
|
160
157
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
158
|
+
/* @__PURE__ */ C("span", {
|
|
162
159
|
className: "inline-flex items-center gap-1.5",
|
|
163
160
|
children: [
|
|
164
|
-
/* @__PURE__ */
|
|
165
|
-
/* @__PURE__ */
|
|
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:
|
|
164
|
+
children: U.length
|
|
168
165
|
}),
|
|
169
166
|
" ",
|
|
170
|
-
|
|
167
|
+
O("adaptercloud.topology.edges", "edges")
|
|
171
168
|
]
|
|
172
169
|
}),
|
|
173
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ C("span", {
|
|
174
171
|
className: "inline-flex items-center gap-1.5",
|
|
175
172
|
children: [
|
|
176
|
-
/* @__PURE__ */
|
|
177
|
-
/* @__PURE__ */
|
|
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:
|
|
176
|
+
children: te
|
|
180
177
|
}),
|
|
181
178
|
" ",
|
|
182
|
-
|
|
179
|
+
O("adaptercloud.topology.zones", "zones")
|
|
183
180
|
]
|
|
184
181
|
})
|
|
185
182
|
]
|
|
186
183
|
})
|
|
187
184
|
]
|
|
188
|
-
}), /* @__PURE__ */
|
|
185
|
+
}), /* @__PURE__ */ S(a, {
|
|
189
186
|
isLoading: Z,
|
|
190
187
|
isError: Q,
|
|
191
|
-
isEmpty:
|
|
192
|
-
error:
|
|
188
|
+
isEmpty: z.length === 0,
|
|
189
|
+
error: k.error ?? A.error,
|
|
193
190
|
onRetry: $,
|
|
194
|
-
emptyTitle:
|
|
195
|
-
emptyDescription:
|
|
196
|
-
emptyIcon: /* @__PURE__ */
|
|
197
|
-
emptyAction: /* @__PURE__ */
|
|
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: () =>
|
|
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:
|
|
198
|
+
children: O("adaptercloud.topology.goToResources", "Go to resources")
|
|
202
199
|
}),
|
|
203
|
-
children: /* @__PURE__ */
|
|
200
|
+
children: /* @__PURE__ */ C("div", {
|
|
204
201
|
className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_20rem]",
|
|
205
|
-
children: [/* @__PURE__ */
|
|
202
|
+
children: [/* @__PURE__ */ C("div", {
|
|
206
203
|
className: "min-w-0 space-y-4",
|
|
207
204
|
children: [
|
|
208
|
-
|
|
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:
|
|
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
|
-
|
|
213
|
-
nodes:
|
|
214
|
-
edges:
|
|
215
|
-
selectedId:
|
|
216
|
-
onSelect:
|
|
217
|
-
}) : /* @__PURE__ */
|
|
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
|
|
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:
|
|
218
|
+
children: O("adaptercloud.topology.noMatches", "No nodes match your search.")
|
|
222
219
|
})]
|
|
223
220
|
}),
|
|
224
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ C(w, {
|
|
225
222
|
className: "p-4",
|
|
226
|
-
children: [/* @__PURE__ */
|
|
223
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
227
224
|
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
228
|
-
children:
|
|
229
|
-
}), /* @__PURE__ */
|
|
225
|
+
children: O("adaptercloud.topology.legend", "Legend")
|
|
226
|
+
}), /* @__PURE__ */ C("div", {
|
|
230
227
|
className: "grid gap-4 sm:grid-cols-2",
|
|
231
|
-
children: [/* @__PURE__ */
|
|
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:
|
|
234
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
234
|
+
/* @__PURE__ */ C("li", {
|
|
238
235
|
className: "flex items-center gap-2",
|
|
239
|
-
children: [/* @__PURE__ */
|
|
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
|
-
}),
|
|
239
|
+
}), O("adaptercloud.topology.dependency", "Dependency")]
|
|
243
240
|
}),
|
|
244
|
-
/* @__PURE__ */
|
|
241
|
+
/* @__PURE__ */ C("li", {
|
|
245
242
|
className: "flex items-center gap-2",
|
|
246
|
-
children: [/* @__PURE__ */
|
|
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
|
-
}),
|
|
246
|
+
}), O("adaptercloud.topology.selectedPath", "Selected node path")]
|
|
250
247
|
}),
|
|
251
|
-
/* @__PURE__ */
|
|
248
|
+
/* @__PURE__ */ C("li", {
|
|
252
249
|
className: "flex items-center gap-2",
|
|
253
|
-
children: [/* @__PURE__ */
|
|
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
|
-
}),
|
|
253
|
+
}), O("adaptercloud.topology.drift", "Drift (endpoint drifted)")]
|
|
257
254
|
})
|
|
258
255
|
]
|
|
259
|
-
})] }), /* @__PURE__ */
|
|
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:
|
|
262
|
-
}), /* @__PURE__ */
|
|
258
|
+
children: O("adaptercloud.topology.edgeKinds", "Edge kinds")
|
|
259
|
+
}), /* @__PURE__ */ S("ul", {
|
|
263
260
|
className: "flex flex-wrap gap-1.5",
|
|
264
|
-
children:
|
|
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__ */
|
|
263
|
+
children: [n(e), /* @__PURE__ */ S("span", {
|
|
267
264
|
className: "tabular-nums font-medium text-text-primary",
|
|
268
|
-
children:
|
|
265
|
+
children: Y[e] ?? 0
|
|
269
266
|
})]
|
|
270
267
|
}) }, e))
|
|
271
268
|
})] })]
|
|
272
269
|
})]
|
|
273
270
|
})
|
|
274
271
|
]
|
|
275
|
-
}), /* @__PURE__ */
|
|
272
|
+
}), /* @__PURE__ */ S("aside", {
|
|
276
273
|
className: "lg:sticky lg:top-6 lg:h-fit",
|
|
277
|
-
children: /* @__PURE__ */
|
|
274
|
+
children: /* @__PURE__ */ S(w, {
|
|
278
275
|
className: "p-5",
|
|
279
|
-
children:
|
|
276
|
+
children: X ? /* @__PURE__ */ C("div", {
|
|
280
277
|
className: "space-y-5",
|
|
281
278
|
children: [
|
|
282
|
-
/* @__PURE__ */
|
|
279
|
+
/* @__PURE__ */ C("div", {
|
|
283
280
|
className: "flex items-start justify-between gap-3",
|
|
284
|
-
children: [/* @__PURE__ */
|
|
281
|
+
children: [/* @__PURE__ */ C("div", {
|
|
285
282
|
className: "flex min-w-0 items-center gap-2.5",
|
|
286
|
-
children: [/* @__PURE__ */
|
|
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__ */
|
|
289
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
288
|
+
children: [/* @__PURE__ */ S("h3", {
|
|
292
289
|
className: "truncate text-base font-semibold text-text-primary",
|
|
293
|
-
children:
|
|
294
|
-
}), /* @__PURE__ */
|
|
290
|
+
children: X.node.label
|
|
291
|
+
}), /* @__PURE__ */ S("p", {
|
|
295
292
|
className: "text-xs text-text-secondary",
|
|
296
|
-
children:
|
|
293
|
+
children: O("adaptercloud.topology.inspector", "Inspector")
|
|
297
294
|
})]
|
|
298
295
|
})]
|
|
299
|
-
}), /* @__PURE__ */
|
|
296
|
+
}), /* @__PURE__ */ S("button", {
|
|
300
297
|
type: "button",
|
|
301
|
-
onClick: () =>
|
|
302
|
-
"aria-label":
|
|
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__ */
|
|
301
|
+
children: /* @__PURE__ */ S(x, { className: "h-4 w-4" })
|
|
305
302
|
})]
|
|
306
303
|
}),
|
|
307
|
-
/* @__PURE__ */
|
|
304
|
+
/* @__PURE__ */ C("dl", {
|
|
308
305
|
className: "space-y-3 text-sm",
|
|
309
306
|
children: [
|
|
310
|
-
/* @__PURE__ */
|
|
307
|
+
/* @__PURE__ */ C("div", {
|
|
311
308
|
className: "flex items-center justify-between gap-3",
|
|
312
|
-
children: [/* @__PURE__ */
|
|
309
|
+
children: [/* @__PURE__ */ S("dt", {
|
|
313
310
|
className: "text-text-secondary",
|
|
314
|
-
children:
|
|
315
|
-
}), /* @__PURE__ */
|
|
311
|
+
children: O("adaptercloud.topology.type", "Type")
|
|
312
|
+
}), /* @__PURE__ */ S("dd", {
|
|
316
313
|
className: "truncate font-mono text-xs text-text-primary",
|
|
317
|
-
children:
|
|
314
|
+
children: X.node.type ?? "—"
|
|
318
315
|
})]
|
|
319
316
|
}),
|
|
320
|
-
/* @__PURE__ */
|
|
317
|
+
/* @__PURE__ */ C("div", {
|
|
321
318
|
className: "flex items-center justify-between gap-3",
|
|
322
|
-
children: [/* @__PURE__ */
|
|
319
|
+
children: [/* @__PURE__ */ S("dt", {
|
|
323
320
|
className: "text-text-secondary",
|
|
324
|
-
children:
|
|
325
|
-
}), /* @__PURE__ */
|
|
321
|
+
children: O("adaptercloud.topology.zone", "Zone")
|
|
322
|
+
}), /* @__PURE__ */ S("dd", {
|
|
326
323
|
className: "text-text-primary",
|
|
327
|
-
children:
|
|
324
|
+
children: X.node.group
|
|
328
325
|
})]
|
|
329
326
|
}),
|
|
330
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ C("div", {
|
|
331
328
|
className: "flex items-center justify-between gap-3",
|
|
332
|
-
children: [/* @__PURE__ */
|
|
329
|
+
children: [/* @__PURE__ */ S("dt", {
|
|
333
330
|
className: "text-text-secondary",
|
|
334
|
-
children:
|
|
335
|
-
}), /* @__PURE__ */
|
|
336
|
-
status:
|
|
337
|
-
label:
|
|
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__ */
|
|
339
|
+
/* @__PURE__ */ C("div", {
|
|
343
340
|
className: "grid grid-cols-2 gap-3",
|
|
344
|
-
children: [/* @__PURE__ */
|
|
341
|
+
children: [/* @__PURE__ */ C("div", {
|
|
345
342
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3",
|
|
346
|
-
children: [/* @__PURE__ */
|
|
343
|
+
children: [/* @__PURE__ */ S("p", {
|
|
347
344
|
className: "text-2xl font-bold tabular-nums text-text-primary",
|
|
348
|
-
children:
|
|
349
|
-
}), /* @__PURE__ */
|
|
345
|
+
children: X.dependencies
|
|
346
|
+
}), /* @__PURE__ */ S("p", {
|
|
350
347
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
351
|
-
children:
|
|
348
|
+
children: O("adaptercloud.topology.dependencies", "Dependencies")
|
|
352
349
|
})]
|
|
353
|
-
}), /* @__PURE__ */
|
|
350
|
+
}), /* @__PURE__ */ C("div", {
|
|
354
351
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/50 p-3",
|
|
355
|
-
children: [/* @__PURE__ */
|
|
352
|
+
children: [/* @__PURE__ */ S("p", {
|
|
356
353
|
className: "text-2xl font-bold tabular-nums text-text-primary",
|
|
357
|
-
children:
|
|
358
|
-
}), /* @__PURE__ */
|
|
354
|
+
children: X.blastRadius
|
|
355
|
+
}), /* @__PURE__ */ S("p", {
|
|
359
356
|
className: "mt-0.5 text-xs text-text-secondary",
|
|
360
|
-
children:
|
|
357
|
+
children: O("adaptercloud.topology.blastRadius", "Dependent impact")
|
|
361
358
|
})]
|
|
362
359
|
})]
|
|
363
360
|
}),
|
|
364
|
-
/* @__PURE__ */
|
|
361
|
+
/* @__PURE__ */ C("button", {
|
|
365
362
|
type: "button",
|
|
366
|
-
onClick: () =>
|
|
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: [
|
|
365
|
+
children: [O("adaptercloud.topology.viewResource", "View resource"), /* @__PURE__ */ S(m, { className: "h-4 w-4" })]
|
|
369
366
|
})
|
|
370
367
|
]
|
|
371
|
-
}) : /* @__PURE__ */
|
|
368
|
+
}) : /* @__PURE__ */ C("div", {
|
|
372
369
|
className: "flex flex-col items-center gap-3 py-8 text-center",
|
|
373
370
|
children: [
|
|
374
|
-
/* @__PURE__ */
|
|
371
|
+
/* @__PURE__ */ S("span", {
|
|
375
372
|
className: "flex h-11 w-11 items-center justify-center rounded-full bg-bg-sunken",
|
|
376
|
-
children: /* @__PURE__ */
|
|
373
|
+
children: /* @__PURE__ */ S(b, { className: "h-5 w-5 text-text-secondary" })
|
|
377
374
|
}),
|
|
378
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ S("p", {
|
|
379
376
|
className: "text-sm font-medium text-text-primary",
|
|
380
|
-
children:
|
|
377
|
+
children: O("adaptercloud.topology.inspectorTitle", "Inspector")
|
|
381
378
|
}),
|
|
382
|
-
/* @__PURE__ */
|
|
379
|
+
/* @__PURE__ */ S("p", {
|
|
383
380
|
className: "max-w-[16rem] text-xs text-text-secondary",
|
|
384
|
-
children:
|
|
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 {
|
|
392
|
+
export { E as TopologyPage };
|
|
396
393
|
|
|
397
394
|
//# sourceMappingURL=TopologyPage.js.map
|