@ucdjs/pipelines-ui 0.0.1-beta.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/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/components/detail/execution-result.d.mts +49 -0
- package/dist/components/detail/execution-result.mjs +366 -0
- package/dist/components/detail/version-selector.d.mts +21 -0
- package/dist/components/detail/version-selector.mjs +132 -0
- package/dist/components/graph/details.d.mts +14 -0
- package/dist/components/graph/details.mjs +369 -0
- package/dist/components/graph/filters.d.mts +14 -0
- package/dist/components/graph/filters.mjs +183 -0
- package/dist/components/graph/node-types.d.mts +10 -0
- package/dist/components/graph/node-types.mjs +13 -0
- package/dist/components/graph/nodes.d.mts +14 -0
- package/dist/components/graph/nodes.mjs +264 -0
- package/dist/components/graph/pipeline-graph.d.mts +15 -0
- package/dist/components/graph/pipeline-graph.mjs +241 -0
- package/dist/components/logs/execution-log-payload.d.mts +12 -0
- package/dist/components/logs/execution-log-payload.mjs +79 -0
- package/dist/components/logs/execution-log-table.d.mts +16 -0
- package/dist/components/logs/execution-log-table.mjs +121 -0
- package/dist/components/logs/execution-span-drawer.d.mts +16 -0
- package/dist/components/logs/execution-span-drawer.mjs +208 -0
- package/dist/components/logs/execution-waterfall.d.mts +18 -0
- package/dist/components/logs/execution-waterfall.mjs +354 -0
- package/dist/components/pipeline-sidebar.d.mts +6 -0
- package/dist/components/pipeline-sidebar.mjs +190 -0
- package/dist/components/status-badge.d.mts +11 -0
- package/dist/components/status-badge.mjs +50 -0
- package/dist/components/status-icon.d.mts +11 -0
- package/dist/components/status-icon.mjs +46 -0
- package/dist/hooks/index.d.mts +7 -0
- package/dist/hooks/index.mjs +8 -0
- package/dist/hooks/use-event-view.d.mts +19 -0
- package/dist/hooks/use-event-view.mjs +112 -0
- package/dist/hooks/use-execute.d.mts +20 -0
- package/dist/hooks/use-execute.mjs +68 -0
- package/dist/hooks/use-pipeline-file.d.mts +20 -0
- package/dist/hooks/use-pipeline-file.mjs +39 -0
- package/dist/hooks/use-pipeline-versions.d.mts +10 -0
- package/dist/hooks/use-pipeline-versions.mjs +137 -0
- package/dist/hooks/use-pipeline.d.mts +21 -0
- package/dist/hooks/use-pipeline.mjs +46 -0
- package/dist/hooks/use-pipelines.d.mts +26 -0
- package/dist/hooks/use-pipelines.mjs +38 -0
- package/dist/index.d.mts +31 -0
- package/dist/index.mjs +29 -0
- package/dist/lib/adapter.d.mts +26 -0
- package/dist/lib/adapter.mjs +74 -0
- package/dist/lib/colors.d.mts +7 -0
- package/dist/lib/colors.mjs +15 -0
- package/dist/lib/execution-logs.d.mts +19 -0
- package/dist/lib/execution-logs.mjs +74 -0
- package/dist/lib/format-time.d.mts +4 -0
- package/dist/lib/format-time.mjs +7 -0
- package/dist/lib/index.d.mts +5 -0
- package/dist/lib/index.mjs +6 -0
- package/dist/lib/layout.d.mts +8 -0
- package/dist/lib/layout.mjs +71 -0
- package/dist/lib/pipeline-utils.d.mts +9 -0
- package/dist/lib/pipeline-utils.mjs +49 -0
- package/dist/lib/utils.d.mts +6 -0
- package/dist/lib/utils.mjs +10 -0
- package/dist/styles/globals.css +3 -0
- package/dist/types.d.mts +143 -0
- package/package.json +95 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/graph/details.tsx
|
|
5
|
+
const containerStyle = {
|
|
6
|
+
width: "280px",
|
|
7
|
+
backgroundColor: "#ffffff",
|
|
8
|
+
borderLeft: "1px solid #e5e7eb",
|
|
9
|
+
display: "flex",
|
|
10
|
+
flexDirection: "column",
|
|
11
|
+
height: "100%",
|
|
12
|
+
boxShadow: "-2px 0 8px rgba(0,0,0,0.05)",
|
|
13
|
+
fontFamily: "system-ui, -apple-system, sans-serif"
|
|
14
|
+
};
|
|
15
|
+
const headerStyle = {
|
|
16
|
+
display: "flex",
|
|
17
|
+
alignItems: "center",
|
|
18
|
+
justifyContent: "space-between",
|
|
19
|
+
padding: "12px",
|
|
20
|
+
borderBottom: "1px solid #e5e7eb"
|
|
21
|
+
};
|
|
22
|
+
const closeButtonStyle = {
|
|
23
|
+
padding: "4px",
|
|
24
|
+
color: "#9ca3af",
|
|
25
|
+
background: "none",
|
|
26
|
+
border: "none",
|
|
27
|
+
borderRadius: "4px",
|
|
28
|
+
cursor: "pointer",
|
|
29
|
+
display: "flex",
|
|
30
|
+
alignItems: "center",
|
|
31
|
+
justifyContent: "center"
|
|
32
|
+
};
|
|
33
|
+
const contentStyle = {
|
|
34
|
+
flex: 1,
|
|
35
|
+
padding: "12px",
|
|
36
|
+
overflowY: "auto"
|
|
37
|
+
};
|
|
38
|
+
const detailsContainerStyle = {
|
|
39
|
+
display: "flex",
|
|
40
|
+
flexDirection: "column",
|
|
41
|
+
gap: "12px"
|
|
42
|
+
};
|
|
43
|
+
const detailRowStyle = {
|
|
44
|
+
display: "flex",
|
|
45
|
+
flexDirection: "column",
|
|
46
|
+
gap: "2px"
|
|
47
|
+
};
|
|
48
|
+
const detailLabelStyle = {
|
|
49
|
+
fontSize: "11px",
|
|
50
|
+
fontWeight: 500,
|
|
51
|
+
color: "#6b7280",
|
|
52
|
+
textTransform: "uppercase",
|
|
53
|
+
letterSpacing: "0.025em"
|
|
54
|
+
};
|
|
55
|
+
const detailValueStyle = {
|
|
56
|
+
fontSize: "13px",
|
|
57
|
+
color: "#111827",
|
|
58
|
+
fontFamily: "ui-monospace, monospace",
|
|
59
|
+
wordBreak: "break-all"
|
|
60
|
+
};
|
|
61
|
+
const badgeStyleCache = /* @__PURE__ */ new Map();
|
|
62
|
+
function getBadgeStyle(type) {
|
|
63
|
+
let cached = badgeStyleCache.get(type);
|
|
64
|
+
if (!cached) {
|
|
65
|
+
const c = {
|
|
66
|
+
source: {
|
|
67
|
+
bg: "#eef2ff",
|
|
68
|
+
color: "#4f46e5"
|
|
69
|
+
},
|
|
70
|
+
file: {
|
|
71
|
+
bg: "#ecfdf5",
|
|
72
|
+
color: "#059669"
|
|
73
|
+
},
|
|
74
|
+
route: {
|
|
75
|
+
bg: "#fffbeb",
|
|
76
|
+
color: "#d97706"
|
|
77
|
+
},
|
|
78
|
+
artifact: {
|
|
79
|
+
bg: "#f5f3ff",
|
|
80
|
+
color: "#7c3aed"
|
|
81
|
+
},
|
|
82
|
+
output: {
|
|
83
|
+
bg: "#f0f9ff",
|
|
84
|
+
color: "#0284c7"
|
|
85
|
+
}
|
|
86
|
+
}[type] ?? {
|
|
87
|
+
bg: "#f3f4f6",
|
|
88
|
+
color: "#6b7280"
|
|
89
|
+
};
|
|
90
|
+
cached = {
|
|
91
|
+
padding: "2px 8px",
|
|
92
|
+
fontSize: "11px",
|
|
93
|
+
fontWeight: 600,
|
|
94
|
+
borderRadius: "4px",
|
|
95
|
+
textTransform: "uppercase",
|
|
96
|
+
letterSpacing: "0.025em",
|
|
97
|
+
backgroundColor: c.bg,
|
|
98
|
+
color: c.color
|
|
99
|
+
};
|
|
100
|
+
badgeStyleCache.set(type, cached);
|
|
101
|
+
}
|
|
102
|
+
return cached;
|
|
103
|
+
}
|
|
104
|
+
function DetailRow(t0) {
|
|
105
|
+
const $ = c(7);
|
|
106
|
+
const { label, value } = t0;
|
|
107
|
+
let t1;
|
|
108
|
+
if ($[0] !== label) {
|
|
109
|
+
t1 = /* @__PURE__ */ jsx("span", {
|
|
110
|
+
style: detailLabelStyle,
|
|
111
|
+
children: label
|
|
112
|
+
});
|
|
113
|
+
$[0] = label;
|
|
114
|
+
$[1] = t1;
|
|
115
|
+
} else t1 = $[1];
|
|
116
|
+
let t2;
|
|
117
|
+
if ($[2] !== value) {
|
|
118
|
+
t2 = /* @__PURE__ */ jsx("span", {
|
|
119
|
+
style: detailValueStyle,
|
|
120
|
+
children: value
|
|
121
|
+
});
|
|
122
|
+
$[2] = value;
|
|
123
|
+
$[3] = t2;
|
|
124
|
+
} else t2 = $[3];
|
|
125
|
+
let t3;
|
|
126
|
+
if ($[4] !== t1 || $[5] !== t2) {
|
|
127
|
+
t3 = /* @__PURE__ */ jsxs("div", {
|
|
128
|
+
style: detailRowStyle,
|
|
129
|
+
children: [t1, t2]
|
|
130
|
+
});
|
|
131
|
+
$[4] = t1;
|
|
132
|
+
$[5] = t2;
|
|
133
|
+
$[6] = t3;
|
|
134
|
+
} else t3 = $[6];
|
|
135
|
+
return t3;
|
|
136
|
+
}
|
|
137
|
+
function NodeDetails(t0) {
|
|
138
|
+
const $ = c(29);
|
|
139
|
+
const { node } = t0;
|
|
140
|
+
switch (node.type) {
|
|
141
|
+
case "source": {
|
|
142
|
+
let t1;
|
|
143
|
+
if ($[0] !== node.version) {
|
|
144
|
+
t1 = /* @__PURE__ */ jsx(DetailRow, {
|
|
145
|
+
label: "Version",
|
|
146
|
+
value: node.version
|
|
147
|
+
});
|
|
148
|
+
$[0] = node.version;
|
|
149
|
+
$[1] = t1;
|
|
150
|
+
} else t1 = $[1];
|
|
151
|
+
return t1;
|
|
152
|
+
}
|
|
153
|
+
case "file": {
|
|
154
|
+
let t1;
|
|
155
|
+
if ($[2] !== node.file.name) {
|
|
156
|
+
t1 = /* @__PURE__ */ jsx(DetailRow, {
|
|
157
|
+
label: "Name",
|
|
158
|
+
value: node.file.name
|
|
159
|
+
});
|
|
160
|
+
$[2] = node.file.name;
|
|
161
|
+
$[3] = t1;
|
|
162
|
+
} else t1 = $[3];
|
|
163
|
+
let t2;
|
|
164
|
+
if ($[4] !== node.file.path) {
|
|
165
|
+
t2 = /* @__PURE__ */ jsx(DetailRow, {
|
|
166
|
+
label: "Path",
|
|
167
|
+
value: node.file.path
|
|
168
|
+
});
|
|
169
|
+
$[4] = node.file.path;
|
|
170
|
+
$[5] = t2;
|
|
171
|
+
} else t2 = $[5];
|
|
172
|
+
let t3;
|
|
173
|
+
if ($[6] !== node.file.dir) {
|
|
174
|
+
t3 = /* @__PURE__ */ jsx(DetailRow, {
|
|
175
|
+
label: "Directory",
|
|
176
|
+
value: node.file.dir
|
|
177
|
+
});
|
|
178
|
+
$[6] = node.file.dir;
|
|
179
|
+
$[7] = t3;
|
|
180
|
+
} else t3 = $[7];
|
|
181
|
+
let t4;
|
|
182
|
+
if ($[8] !== node.file.ext) {
|
|
183
|
+
t4 = /* @__PURE__ */ jsx(DetailRow, {
|
|
184
|
+
label: "Extension",
|
|
185
|
+
value: node.file.ext
|
|
186
|
+
});
|
|
187
|
+
$[8] = node.file.ext;
|
|
188
|
+
$[9] = t4;
|
|
189
|
+
} else t4 = $[9];
|
|
190
|
+
let t5;
|
|
191
|
+
if ($[10] !== node.file.version) {
|
|
192
|
+
t5 = /* @__PURE__ */ jsx(DetailRow, {
|
|
193
|
+
label: "Version",
|
|
194
|
+
value: node.file.version
|
|
195
|
+
});
|
|
196
|
+
$[10] = node.file.version;
|
|
197
|
+
$[11] = t5;
|
|
198
|
+
} else t5 = $[11];
|
|
199
|
+
let t6;
|
|
200
|
+
if ($[12] !== t1 || $[13] !== t2 || $[14] !== t3 || $[15] !== t4 || $[16] !== t5) {
|
|
201
|
+
t6 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
202
|
+
t1,
|
|
203
|
+
t2,
|
|
204
|
+
t3,
|
|
205
|
+
t4,
|
|
206
|
+
t5
|
|
207
|
+
] });
|
|
208
|
+
$[12] = t1;
|
|
209
|
+
$[13] = t2;
|
|
210
|
+
$[14] = t3;
|
|
211
|
+
$[15] = t4;
|
|
212
|
+
$[16] = t5;
|
|
213
|
+
$[17] = t6;
|
|
214
|
+
} else t6 = $[17];
|
|
215
|
+
return t6;
|
|
216
|
+
}
|
|
217
|
+
case "route": {
|
|
218
|
+
let t1;
|
|
219
|
+
if ($[18] !== node.routeId) {
|
|
220
|
+
t1 = /* @__PURE__ */ jsx(DetailRow, {
|
|
221
|
+
label: "Route ID",
|
|
222
|
+
value: node.routeId
|
|
223
|
+
});
|
|
224
|
+
$[18] = node.routeId;
|
|
225
|
+
$[19] = t1;
|
|
226
|
+
} else t1 = $[19];
|
|
227
|
+
return t1;
|
|
228
|
+
}
|
|
229
|
+
case "artifact": {
|
|
230
|
+
let t1;
|
|
231
|
+
if ($[20] !== node.artifactId) {
|
|
232
|
+
t1 = /* @__PURE__ */ jsx(DetailRow, {
|
|
233
|
+
label: "Artifact ID",
|
|
234
|
+
value: node.artifactId
|
|
235
|
+
});
|
|
236
|
+
$[20] = node.artifactId;
|
|
237
|
+
$[21] = t1;
|
|
238
|
+
} else t1 = $[21];
|
|
239
|
+
return t1;
|
|
240
|
+
}
|
|
241
|
+
case "output": {
|
|
242
|
+
const t1 = String(node.outputIndex);
|
|
243
|
+
let t2;
|
|
244
|
+
if ($[22] !== t1) {
|
|
245
|
+
t2 = /* @__PURE__ */ jsx(DetailRow, {
|
|
246
|
+
label: "Output Index",
|
|
247
|
+
value: t1
|
|
248
|
+
});
|
|
249
|
+
$[22] = t1;
|
|
250
|
+
$[23] = t2;
|
|
251
|
+
} else t2 = $[23];
|
|
252
|
+
let t3;
|
|
253
|
+
if ($[24] !== node.property) {
|
|
254
|
+
t3 = node.property && /* @__PURE__ */ jsx(DetailRow, {
|
|
255
|
+
label: "Property",
|
|
256
|
+
value: node.property
|
|
257
|
+
});
|
|
258
|
+
$[24] = node.property;
|
|
259
|
+
$[25] = t3;
|
|
260
|
+
} else t3 = $[25];
|
|
261
|
+
let t4;
|
|
262
|
+
if ($[26] !== t2 || $[27] !== t3) {
|
|
263
|
+
t4 = /* @__PURE__ */ jsxs(Fragment, { children: [t2, t3] });
|
|
264
|
+
$[26] = t2;
|
|
265
|
+
$[27] = t3;
|
|
266
|
+
$[28] = t4;
|
|
267
|
+
} else t4 = $[28];
|
|
268
|
+
return t4;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const closeIcon = /* @__PURE__ */ jsx("svg", {
|
|
273
|
+
width: "16",
|
|
274
|
+
height: "16",
|
|
275
|
+
fill: "none",
|
|
276
|
+
viewBox: "0 0 24 24",
|
|
277
|
+
stroke: "currentColor",
|
|
278
|
+
children: /* @__PURE__ */ jsx("path", {
|
|
279
|
+
strokeLinecap: "round",
|
|
280
|
+
strokeLinejoin: "round",
|
|
281
|
+
strokeWidth: 2,
|
|
282
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
283
|
+
})
|
|
284
|
+
});
|
|
285
|
+
function PipelineGraphDetails(t0) {
|
|
286
|
+
const $ = c(20);
|
|
287
|
+
const { node, onClose } = t0;
|
|
288
|
+
if (!node) return null;
|
|
289
|
+
let t1;
|
|
290
|
+
if ($[0] !== node.type) {
|
|
291
|
+
t1 = getBadgeStyle(node.type);
|
|
292
|
+
$[0] = node.type;
|
|
293
|
+
$[1] = t1;
|
|
294
|
+
} else t1 = $[1];
|
|
295
|
+
let t2;
|
|
296
|
+
if ($[2] !== node.type || $[3] !== t1) {
|
|
297
|
+
t2 = /* @__PURE__ */ jsx("span", {
|
|
298
|
+
style: t1,
|
|
299
|
+
children: node.type
|
|
300
|
+
});
|
|
301
|
+
$[2] = node.type;
|
|
302
|
+
$[3] = t1;
|
|
303
|
+
$[4] = t2;
|
|
304
|
+
} else t2 = $[4];
|
|
305
|
+
let t3;
|
|
306
|
+
if ($[5] !== onClose) {
|
|
307
|
+
t3 = /* @__PURE__ */ jsx("button", {
|
|
308
|
+
type: "button",
|
|
309
|
+
onClick: onClose,
|
|
310
|
+
style: closeButtonStyle,
|
|
311
|
+
"aria-label": "Close details",
|
|
312
|
+
children: closeIcon
|
|
313
|
+
});
|
|
314
|
+
$[5] = onClose;
|
|
315
|
+
$[6] = t3;
|
|
316
|
+
} else t3 = $[6];
|
|
317
|
+
let t4;
|
|
318
|
+
if ($[7] !== t2 || $[8] !== t3) {
|
|
319
|
+
t4 = /* @__PURE__ */ jsxs("div", {
|
|
320
|
+
style: headerStyle,
|
|
321
|
+
children: [t2, t3]
|
|
322
|
+
});
|
|
323
|
+
$[7] = t2;
|
|
324
|
+
$[8] = t3;
|
|
325
|
+
$[9] = t4;
|
|
326
|
+
} else t4 = $[9];
|
|
327
|
+
let t5;
|
|
328
|
+
if ($[10] !== node.id) {
|
|
329
|
+
t5 = /* @__PURE__ */ jsx(DetailRow, {
|
|
330
|
+
label: "Node ID",
|
|
331
|
+
value: node.id
|
|
332
|
+
});
|
|
333
|
+
$[10] = node.id;
|
|
334
|
+
$[11] = t5;
|
|
335
|
+
} else t5 = $[11];
|
|
336
|
+
let t6;
|
|
337
|
+
if ($[12] !== node) {
|
|
338
|
+
t6 = /* @__PURE__ */ jsx(NodeDetails, { node });
|
|
339
|
+
$[12] = node;
|
|
340
|
+
$[13] = t6;
|
|
341
|
+
} else t6 = $[13];
|
|
342
|
+
let t7;
|
|
343
|
+
if ($[14] !== t5 || $[15] !== t6) {
|
|
344
|
+
t7 = /* @__PURE__ */ jsx("div", {
|
|
345
|
+
style: contentStyle,
|
|
346
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
347
|
+
style: detailsContainerStyle,
|
|
348
|
+
children: [t5, t6]
|
|
349
|
+
})
|
|
350
|
+
});
|
|
351
|
+
$[14] = t5;
|
|
352
|
+
$[15] = t6;
|
|
353
|
+
$[16] = t7;
|
|
354
|
+
} else t7 = $[16];
|
|
355
|
+
let t8;
|
|
356
|
+
if ($[17] !== t4 || $[18] !== t7) {
|
|
357
|
+
t8 = /* @__PURE__ */ jsxs("div", {
|
|
358
|
+
style: containerStyle,
|
|
359
|
+
children: [t4, t7]
|
|
360
|
+
});
|
|
361
|
+
$[17] = t4;
|
|
362
|
+
$[18] = t7;
|
|
363
|
+
$[19] = t8;
|
|
364
|
+
} else t8 = $[19];
|
|
365
|
+
return t8;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
//#endregion
|
|
369
|
+
export { PipelineGraphDetails };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react from "react";
|
|
2
|
+
import { PipelineGraphNodeType } from "@ucdjs/pipelines-core";
|
|
3
|
+
|
|
4
|
+
//#region src/components/graph/filters.d.ts
|
|
5
|
+
interface PipelineGraphFiltersProps {
|
|
6
|
+
visibleTypes: Set<PipelineGraphNodeType>;
|
|
7
|
+
onToggleType: (type: PipelineGraphNodeType) => void;
|
|
8
|
+
}
|
|
9
|
+
declare function PipelineGraphFilters({
|
|
10
|
+
visibleTypes,
|
|
11
|
+
onToggleType
|
|
12
|
+
}: PipelineGraphFiltersProps): react.JSX.Element;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PipelineGraphFilters, PipelineGraphFiltersProps };
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/graph/filters.tsx
|
|
6
|
+
const nodeTypeLabels = {
|
|
7
|
+
source: {
|
|
8
|
+
label: "Source",
|
|
9
|
+
color: "#6366f1"
|
|
10
|
+
},
|
|
11
|
+
file: {
|
|
12
|
+
label: "File",
|
|
13
|
+
color: "#10b981"
|
|
14
|
+
},
|
|
15
|
+
route: {
|
|
16
|
+
label: "Route",
|
|
17
|
+
color: "#f59e0b"
|
|
18
|
+
},
|
|
19
|
+
artifact: {
|
|
20
|
+
label: "Artifact",
|
|
21
|
+
color: "#8b5cf6"
|
|
22
|
+
},
|
|
23
|
+
output: {
|
|
24
|
+
label: "Output",
|
|
25
|
+
color: "#0ea5e9"
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const allNodeTypes = [
|
|
29
|
+
"source",
|
|
30
|
+
"file",
|
|
31
|
+
"route",
|
|
32
|
+
"artifact",
|
|
33
|
+
"output"
|
|
34
|
+
];
|
|
35
|
+
const containerStyle = {
|
|
36
|
+
display: "flex",
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
gap: "6px",
|
|
39
|
+
padding: "8px 12px",
|
|
40
|
+
backgroundColor: "#ffffff",
|
|
41
|
+
borderRadius: "10px",
|
|
42
|
+
boxShadow: "0 1px 3px rgba(0,0,0,0.1), 0 1px 2px rgba(0,0,0,0.06)",
|
|
43
|
+
fontFamily: "system-ui, -apple-system, sans-serif",
|
|
44
|
+
border: "1px solid #e5e7eb"
|
|
45
|
+
};
|
|
46
|
+
const labelStyle = {
|
|
47
|
+
fontSize: "11px",
|
|
48
|
+
fontWeight: 500,
|
|
49
|
+
color: "#6b7280",
|
|
50
|
+
marginRight: "4px",
|
|
51
|
+
textTransform: "uppercase",
|
|
52
|
+
letterSpacing: "0.05em"
|
|
53
|
+
};
|
|
54
|
+
const buttonStyleCache = /* @__PURE__ */ new Map();
|
|
55
|
+
const dotStyleCache = /* @__PURE__ */ new Map();
|
|
56
|
+
function getButtonStyle(color, isVisible) {
|
|
57
|
+
const key = `${color}-${isVisible}`;
|
|
58
|
+
let cached = buttonStyleCache.get(key);
|
|
59
|
+
if (!cached) {
|
|
60
|
+
cached = {
|
|
61
|
+
display: "flex",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
gap: "6px",
|
|
64
|
+
padding: "4px 10px",
|
|
65
|
+
fontSize: "12px",
|
|
66
|
+
fontWeight: 500,
|
|
67
|
+
borderRadius: "6px",
|
|
68
|
+
border: "none",
|
|
69
|
+
cursor: "pointer",
|
|
70
|
+
transition: "all 0.15s ease",
|
|
71
|
+
backgroundColor: isVisible ? `${color}15` : "#f3f4f6",
|
|
72
|
+
color: isVisible ? color : "#9ca3af",
|
|
73
|
+
opacity: isVisible ? 1 : .6
|
|
74
|
+
};
|
|
75
|
+
buttonStyleCache.set(key, cached);
|
|
76
|
+
}
|
|
77
|
+
return cached;
|
|
78
|
+
}
|
|
79
|
+
function getDotStyle(color, isVisible) {
|
|
80
|
+
const key = `${color}-${isVisible}`;
|
|
81
|
+
let cached = dotStyleCache.get(key);
|
|
82
|
+
if (!cached) {
|
|
83
|
+
cached = {
|
|
84
|
+
width: "8px",
|
|
85
|
+
height: "8px",
|
|
86
|
+
borderRadius: "50%",
|
|
87
|
+
backgroundColor: color,
|
|
88
|
+
opacity: isVisible ? 1 : .3,
|
|
89
|
+
transition: "opacity 0.15s ease"
|
|
90
|
+
};
|
|
91
|
+
dotStyleCache.set(key, cached);
|
|
92
|
+
}
|
|
93
|
+
return cached;
|
|
94
|
+
}
|
|
95
|
+
const FilterButton = memo((t0) => {
|
|
96
|
+
const $ = c(17);
|
|
97
|
+
const { type, config, isVisible, onToggle } = t0;
|
|
98
|
+
let t1;
|
|
99
|
+
if ($[0] !== onToggle || $[1] !== type) {
|
|
100
|
+
t1 = () => {
|
|
101
|
+
onToggle(type);
|
|
102
|
+
};
|
|
103
|
+
$[0] = onToggle;
|
|
104
|
+
$[1] = type;
|
|
105
|
+
$[2] = t1;
|
|
106
|
+
} else t1 = $[2];
|
|
107
|
+
const handleClick = t1;
|
|
108
|
+
let t2;
|
|
109
|
+
if ($[3] !== config.color || $[4] !== isVisible) {
|
|
110
|
+
t2 = getButtonStyle(config.color, isVisible);
|
|
111
|
+
$[3] = config.color;
|
|
112
|
+
$[4] = isVisible;
|
|
113
|
+
$[5] = t2;
|
|
114
|
+
} else t2 = $[5];
|
|
115
|
+
const t3 = isVisible ? `Hide ${config.label} nodes` : `Show ${config.label} nodes`;
|
|
116
|
+
let t4;
|
|
117
|
+
if ($[6] !== config.color || $[7] !== isVisible) {
|
|
118
|
+
t4 = getDotStyle(config.color, isVisible);
|
|
119
|
+
$[6] = config.color;
|
|
120
|
+
$[7] = isVisible;
|
|
121
|
+
$[8] = t4;
|
|
122
|
+
} else t4 = $[8];
|
|
123
|
+
let t5;
|
|
124
|
+
if ($[9] !== t4) {
|
|
125
|
+
t5 = /* @__PURE__ */ jsx("span", { style: t4 });
|
|
126
|
+
$[9] = t4;
|
|
127
|
+
$[10] = t5;
|
|
128
|
+
} else t5 = $[10];
|
|
129
|
+
let t6;
|
|
130
|
+
if ($[11] !== config.label || $[12] !== handleClick || $[13] !== t2 || $[14] !== t3 || $[15] !== t5) {
|
|
131
|
+
t6 = /* @__PURE__ */ jsxs("button", {
|
|
132
|
+
type: "button",
|
|
133
|
+
onClick: handleClick,
|
|
134
|
+
style: t2,
|
|
135
|
+
title: t3,
|
|
136
|
+
children: [t5, config.label]
|
|
137
|
+
});
|
|
138
|
+
$[11] = config.label;
|
|
139
|
+
$[12] = handleClick;
|
|
140
|
+
$[13] = t2;
|
|
141
|
+
$[14] = t3;
|
|
142
|
+
$[15] = t5;
|
|
143
|
+
$[16] = t6;
|
|
144
|
+
} else t6 = $[16];
|
|
145
|
+
return t6;
|
|
146
|
+
});
|
|
147
|
+
function PipelineGraphFilters(t0) {
|
|
148
|
+
const $ = c(6);
|
|
149
|
+
const { visibleTypes, onToggleType } = t0;
|
|
150
|
+
let t1;
|
|
151
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
152
|
+
t1 = /* @__PURE__ */ jsx("span", {
|
|
153
|
+
style: labelStyle,
|
|
154
|
+
children: "Show:"
|
|
155
|
+
});
|
|
156
|
+
$[0] = t1;
|
|
157
|
+
} else t1 = $[0];
|
|
158
|
+
let t2;
|
|
159
|
+
if ($[1] !== onToggleType || $[2] !== visibleTypes) {
|
|
160
|
+
t2 = allNodeTypes.map((type) => /* @__PURE__ */ jsx(FilterButton, {
|
|
161
|
+
type,
|
|
162
|
+
config: nodeTypeLabels[type],
|
|
163
|
+
isVisible: visibleTypes.has(type),
|
|
164
|
+
onToggle: onToggleType
|
|
165
|
+
}, type));
|
|
166
|
+
$[1] = onToggleType;
|
|
167
|
+
$[2] = visibleTypes;
|
|
168
|
+
$[3] = t2;
|
|
169
|
+
} else t2 = $[3];
|
|
170
|
+
let t3;
|
|
171
|
+
if ($[4] !== t2) {
|
|
172
|
+
t3 = /* @__PURE__ */ jsxs("div", {
|
|
173
|
+
style: containerStyle,
|
|
174
|
+
children: [t1, t2]
|
|
175
|
+
});
|
|
176
|
+
$[4] = t2;
|
|
177
|
+
$[5] = t3;
|
|
178
|
+
} else t3 = $[5];
|
|
179
|
+
return t3;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
//#endregion
|
|
183
|
+
export { PipelineGraphFilters };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ArtifactNode, FileNode, OutputNode, RouteNode, SourceNode } from "./nodes.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/components/graph/node-types.ts
|
|
4
|
+
const nodeTypes = {
|
|
5
|
+
source: SourceNode,
|
|
6
|
+
file: FileNode,
|
|
7
|
+
route: RouteNode,
|
|
8
|
+
artifact: ArtifactNode,
|
|
9
|
+
output: OutputNode
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { nodeTypes };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PipelineGraphNode } from "@ucdjs/pipelines-core";
|
|
2
|
+
|
|
3
|
+
//#region src/components/graph/nodes.d.ts
|
|
4
|
+
interface PipelineNodeData {
|
|
5
|
+
pipelineNode: PipelineGraphNode;
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
declare const SourceNode: any;
|
|
9
|
+
declare const FileNode: any;
|
|
10
|
+
declare const RouteNode: any;
|
|
11
|
+
declare const ArtifactNode: any;
|
|
12
|
+
declare const OutputNode: any;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { ArtifactNode, FileNode, OutputNode, PipelineNodeData, RouteNode, SourceNode };
|