@industry-theme/principal-view-panels 0.12.93 → 0.12.94
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardPanel.d.ts","sourceRoot":"","sources":["../../src/panels/DashboardPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardPanel.d.ts","sourceRoot":"","sources":["../../src/panels/DashboardPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAS/E,OAAO,KAAK,EAEV,YAAY,EAGZ,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAEhB,YAAY,EAEb,MAAM,mCAAmC,CAAC;AA6N3C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE5C;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAErC;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAE7B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAE/C;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA6VxD,CAAC"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -181946,6 +181946,304 @@ const GraphRenderer = forwardRef((props, ref) => {
|
|
|
181946
181946
|
return jsx("div", { ref: containerRef, className, style: { width, height, position: "relative" }, children: jsx(TooltipPortalContext.Provider, { value: portalTarget, children: jsx(ReactFlowProvider, { children: jsx(GraphRendererInner, { configuration, nodes, edges, violations, configName, showMinimap, showControls, showBackground, backgroundVariant, backgroundGap, showCenterIndicator, showTooltips, fitViewDuration, highlightedNodeId, activeNodeIds, events, onEventProcessed, editable, onPendingChangesChange, editStateRef, resetVisualStateRef, undoRedoFunctionsRef, pushHistory, clearHistory, undoFromStack, redoFromStack, onNodeClick, fitViewToNodeIds, fitViewPadding, draggableNodeIds, onNodeDragStop, onCopy, initialViewport, elkLayout, scenarioEdges, showSequenceLabels }) }) }) });
|
|
181947
181947
|
});
|
|
181948
181948
|
GraphRenderer.displayName = "GraphRenderer";
|
|
181949
|
+
function extractNamespace(name2, strategy) {
|
|
181950
|
+
if (typeof strategy === "function") {
|
|
181951
|
+
return strategy(name2);
|
|
181952
|
+
}
|
|
181953
|
+
const segments = name2.split(".");
|
|
181954
|
+
if (segments.length <= 1) {
|
|
181955
|
+
return name2;
|
|
181956
|
+
}
|
|
181957
|
+
if (strategy === "first") {
|
|
181958
|
+
return segments[0];
|
|
181959
|
+
}
|
|
181960
|
+
if (strategy === "all-but-last") {
|
|
181961
|
+
return segments.slice(0, -1).join(".");
|
|
181962
|
+
}
|
|
181963
|
+
if (typeof strategy === "number") {
|
|
181964
|
+
return segments.slice(0, strategy).join(".");
|
|
181965
|
+
}
|
|
181966
|
+
return segments.slice(0, -1).join(".");
|
|
181967
|
+
}
|
|
181968
|
+
function getParentNamespace(namespace2) {
|
|
181969
|
+
const segments = namespace2.split(".");
|
|
181970
|
+
if (segments.length <= 1) {
|
|
181971
|
+
return void 0;
|
|
181972
|
+
}
|
|
181973
|
+
return segments.slice(0, -1).join(".");
|
|
181974
|
+
}
|
|
181975
|
+
function useSequenceLayout(events, sequenceEdges, options = {}) {
|
|
181976
|
+
const { namespaceStrategy = "all-but-last", laneWidth = 200, laneGap = 50, eventSpacing = 80, headerHeight = 60, collapsedNamespaces = [], nodeWidth = 14, nodeHeight = 14 } = options;
|
|
181977
|
+
return useMemo(() => {
|
|
181978
|
+
if (events.length === 0) {
|
|
181979
|
+
return {
|
|
181980
|
+
nodes: [],
|
|
181981
|
+
edges: [],
|
|
181982
|
+
swimlanes: [],
|
|
181983
|
+
totalWidth: 0,
|
|
181984
|
+
totalHeight: 0
|
|
181985
|
+
};
|
|
181986
|
+
}
|
|
181987
|
+
const eventNamespaces = /* @__PURE__ */ new Map();
|
|
181988
|
+
const namespaceEvents = /* @__PURE__ */ new Map();
|
|
181989
|
+
for (const event of events) {
|
|
181990
|
+
const namespace2 = extractNamespace(event.name, namespaceStrategy);
|
|
181991
|
+
eventNamespaces.set(event.id, namespace2);
|
|
181992
|
+
if (!namespaceEvents.has(namespace2)) {
|
|
181993
|
+
namespaceEvents.set(namespace2, []);
|
|
181994
|
+
}
|
|
181995
|
+
namespaceEvents.get(namespace2).push(event.id);
|
|
181996
|
+
}
|
|
181997
|
+
const allNamespaces = Array.from(namespaceEvents.keys()).sort();
|
|
181998
|
+
const collapsedSet = new Set(collapsedNamespaces);
|
|
181999
|
+
const visibleNamespaces = [];
|
|
182000
|
+
const namespaceToVisible = /* @__PURE__ */ new Map();
|
|
182001
|
+
for (const ns of allNamespaces) {
|
|
182002
|
+
let visibleNs = ns;
|
|
182003
|
+
let current = ns;
|
|
182004
|
+
while (current) {
|
|
182005
|
+
if (collapsedSet.has(current)) {
|
|
182006
|
+
visibleNs = current;
|
|
182007
|
+
}
|
|
182008
|
+
current = getParentNamespace(current);
|
|
182009
|
+
}
|
|
182010
|
+
namespaceToVisible.set(ns, visibleNs);
|
|
182011
|
+
if (!visibleNamespaces.includes(visibleNs)) {
|
|
182012
|
+
visibleNamespaces.push(visibleNs);
|
|
182013
|
+
}
|
|
182014
|
+
}
|
|
182015
|
+
const swimlanes = visibleNamespaces.map((namespace2, index2) => {
|
|
182016
|
+
const x = index2 * (laneWidth + laneGap) + laneWidth / 2;
|
|
182017
|
+
const eventIds = [];
|
|
182018
|
+
for (const [eventId, eventNs] of eventNamespaces) {
|
|
182019
|
+
if (namespaceToVisible.get(eventNs) === namespace2) {
|
|
182020
|
+
eventIds.push(eventId);
|
|
182021
|
+
}
|
|
182022
|
+
}
|
|
182023
|
+
const children2 = allNamespaces.filter((ns) => getParentNamespace(ns) === namespace2);
|
|
182024
|
+
return {
|
|
182025
|
+
namespace: namespace2,
|
|
182026
|
+
label: namespace2.split(".").pop() || namespace2,
|
|
182027
|
+
x,
|
|
182028
|
+
parentNamespace: getParentNamespace(namespace2),
|
|
182029
|
+
isCollapsed: collapsedSet.has(namespace2),
|
|
182030
|
+
children: children2,
|
|
182031
|
+
eventIds
|
|
182032
|
+
};
|
|
182033
|
+
});
|
|
182034
|
+
const swimlaneByNamespace = /* @__PURE__ */ new Map();
|
|
182035
|
+
for (const lane of swimlanes) {
|
|
182036
|
+
swimlaneByNamespace.set(lane.namespace, lane);
|
|
182037
|
+
}
|
|
182038
|
+
const nodes = [];
|
|
182039
|
+
const eventById = new Map(events.map((e) => [e.id, e]));
|
|
182040
|
+
for (let i = 0; i < events.length; i++) {
|
|
182041
|
+
const event = events[i];
|
|
182042
|
+
const originalNamespace = eventNamespaces.get(event.id);
|
|
182043
|
+
const visibleNamespace = namespaceToVisible.get(originalNamespace);
|
|
182044
|
+
const lane = swimlaneByNamespace.get(visibleNamespace);
|
|
182045
|
+
const y = headerHeight + i * eventSpacing;
|
|
182046
|
+
nodes.push({
|
|
182047
|
+
id: event.id,
|
|
182048
|
+
type: "sequenceMarker",
|
|
182049
|
+
position: {
|
|
182050
|
+
x: lane.x - nodeWidth / 2,
|
|
182051
|
+
y: y - nodeHeight / 2
|
|
182052
|
+
// Center vertically on the time layer
|
|
182053
|
+
},
|
|
182054
|
+
data: {
|
|
182055
|
+
label: event.label || event.name.split(".").pop() || event.name,
|
|
182056
|
+
fullName: event.name,
|
|
182057
|
+
namespace: originalNamespace,
|
|
182058
|
+
visibleNamespace,
|
|
182059
|
+
timeLayer: i,
|
|
182060
|
+
...event.data
|
|
182061
|
+
},
|
|
182062
|
+
style: {
|
|
182063
|
+
width: nodeWidth,
|
|
182064
|
+
height: nodeHeight
|
|
182065
|
+
}
|
|
182066
|
+
});
|
|
182067
|
+
}
|
|
182068
|
+
const edges = sequenceEdges.map((edge) => {
|
|
182069
|
+
const sourceNamespace = eventNamespaces.get(edge.fromEvent);
|
|
182070
|
+
const targetNamespace = eventNamespaces.get(edge.toEvent);
|
|
182071
|
+
const crossesLanes = namespaceToVisible.get(sourceNamespace) !== namespaceToVisible.get(targetNamespace);
|
|
182072
|
+
const targetEvent = eventById.get(edge.toEvent);
|
|
182073
|
+
const edgeLabel = edge.label || (targetEvent == null ? void 0 : targetEvent.label) || (targetEvent == null ? void 0 : targetEvent.name.split(".").pop()) || "";
|
|
182074
|
+
return {
|
|
182075
|
+
id: edge.id,
|
|
182076
|
+
source: edge.fromEvent,
|
|
182077
|
+
target: edge.toEvent,
|
|
182078
|
+
type: "sequenceArrow",
|
|
182079
|
+
label: edgeLabel,
|
|
182080
|
+
labelStyle: { fontSize: 12, fontWeight: 500 },
|
|
182081
|
+
labelBgStyle: { fill: "white", fillOpacity: 0.8 },
|
|
182082
|
+
data: {
|
|
182083
|
+
crossesLanes,
|
|
182084
|
+
sourceNamespace,
|
|
182085
|
+
targetNamespace
|
|
182086
|
+
}
|
|
182087
|
+
};
|
|
182088
|
+
});
|
|
182089
|
+
const totalWidth = swimlanes.length * (laneWidth + laneGap) - laneGap + laneWidth;
|
|
182090
|
+
const totalHeight = headerHeight + events.length * eventSpacing + eventSpacing;
|
|
182091
|
+
return {
|
|
182092
|
+
nodes,
|
|
182093
|
+
edges,
|
|
182094
|
+
swimlanes,
|
|
182095
|
+
totalWidth,
|
|
182096
|
+
totalHeight
|
|
182097
|
+
};
|
|
182098
|
+
}, [
|
|
182099
|
+
events,
|
|
182100
|
+
sequenceEdges,
|
|
182101
|
+
namespaceStrategy,
|
|
182102
|
+
laneWidth,
|
|
182103
|
+
laneGap,
|
|
182104
|
+
eventSpacing,
|
|
182105
|
+
headerHeight,
|
|
182106
|
+
nodeWidth,
|
|
182107
|
+
nodeHeight,
|
|
182108
|
+
collapsedNamespaces
|
|
182109
|
+
]);
|
|
182110
|
+
}
|
|
182111
|
+
function SequenceMarkerNode({ data }) {
|
|
182112
|
+
return jsxs("div", { style: {
|
|
182113
|
+
width: "100%",
|
|
182114
|
+
height: "100%",
|
|
182115
|
+
backgroundColor: "var(--sequence-marker-bg, #6495ED)",
|
|
182116
|
+
borderRadius: "50%",
|
|
182117
|
+
border: "2px solid var(--sequence-marker-border, #4169E1)",
|
|
182118
|
+
boxShadow: "0 1px 3px rgba(0,0,0,0.2)"
|
|
182119
|
+
}, title: data.fullName, children: [jsx(Handle, { type: "target", position: Position.Top, style: { visibility: "hidden" } }), jsx(Handle, { type: "source", position: Position.Bottom, style: { visibility: "hidden" } })] });
|
|
182120
|
+
}
|
|
182121
|
+
function SequenceArrowEdge({ id: id2, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, label, data }) {
|
|
182122
|
+
const isSameLane = !(data == null ? void 0 : data.crossesLanes);
|
|
182123
|
+
const [edgePath, labelX, labelY] = getBezierPath({
|
|
182124
|
+
sourceX,
|
|
182125
|
+
sourceY,
|
|
182126
|
+
sourcePosition,
|
|
182127
|
+
targetX,
|
|
182128
|
+
targetY,
|
|
182129
|
+
targetPosition,
|
|
182130
|
+
curvature: isSameLane ? 0.5 : 0.25
|
|
182131
|
+
});
|
|
182132
|
+
return jsxs(Fragment, { children: [jsx(BaseEdge, { id: id2, path: edgePath, style: {
|
|
182133
|
+
stroke: "var(--sequence-arrow-color, #4169E1)",
|
|
182134
|
+
strokeWidth: 2
|
|
182135
|
+
}, markerEnd: "url(#sequence-arrow)" }), label && jsx(EdgeLabelRenderer, { children: jsx("div", { style: {
|
|
182136
|
+
position: "absolute",
|
|
182137
|
+
transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,
|
|
182138
|
+
background: "var(--sequence-label-bg, rgba(255, 255, 255, 0.95))",
|
|
182139
|
+
padding: "2px 8px",
|
|
182140
|
+
borderRadius: 4,
|
|
182141
|
+
fontSize: 12,
|
|
182142
|
+
fontWeight: 500,
|
|
182143
|
+
color: "var(--sequence-label-text, #333)",
|
|
182144
|
+
border: "1px solid var(--sequence-label-border, #ddd)",
|
|
182145
|
+
pointerEvents: "all",
|
|
182146
|
+
whiteSpace: "nowrap"
|
|
182147
|
+
}, className: "nodrag nopan", children: label }) })] });
|
|
182148
|
+
}
|
|
182149
|
+
const defaultSequenceNodeTypes = {
|
|
182150
|
+
sequenceMarker: SequenceMarkerNode
|
|
182151
|
+
};
|
|
182152
|
+
const defaultSequenceEdgeTypes = {
|
|
182153
|
+
sequenceArrow: SequenceArrowEdge
|
|
182154
|
+
};
|
|
182155
|
+
function SwimlaneLayer({ swimlanes, laneWidth, headerHeight, totalHeight, onToggleCollapse }) {
|
|
182156
|
+
const { x, y, zoom: zoom2 } = useViewport();
|
|
182157
|
+
const extendedHeight = Math.max(totalHeight, 2e3);
|
|
182158
|
+
return jsxs("div", { style: {
|
|
182159
|
+
position: "absolute",
|
|
182160
|
+
top: 0,
|
|
182161
|
+
left: 0,
|
|
182162
|
+
transformOrigin: "0 0",
|
|
182163
|
+
transform: `translate(${x}px, ${y}px) scale(${zoom2})`,
|
|
182164
|
+
pointerEvents: "none",
|
|
182165
|
+
zIndex: -1
|
|
182166
|
+
}, children: [swimlanes.map((lane, index2) => {
|
|
182167
|
+
const isEven = index2 % 2 === 0;
|
|
182168
|
+
return jsx("div", { style: {
|
|
182169
|
+
position: "absolute",
|
|
182170
|
+
left: lane.x - laneWidth / 2,
|
|
182171
|
+
top: 0,
|
|
182172
|
+
width: laneWidth,
|
|
182173
|
+
height: extendedHeight,
|
|
182174
|
+
backgroundColor: isEven ? "var(--sequence-lane-even, rgba(100, 149, 237, 0.08))" : "var(--sequence-lane-odd, rgba(100, 149, 237, 0.03))",
|
|
182175
|
+
borderRight: "1px solid var(--sequence-lane-border, rgba(100, 149, 237, 0.2))"
|
|
182176
|
+
} }, `bg-${lane.namespace}`);
|
|
182177
|
+
}), swimlanes.map((lane) => {
|
|
182178
|
+
const hasChildren = lane.children.length > 0;
|
|
182179
|
+
return jsxs("div", { style: {
|
|
182180
|
+
position: "absolute",
|
|
182181
|
+
left: lane.x - laneWidth / 2,
|
|
182182
|
+
top: 0,
|
|
182183
|
+
width: laneWidth,
|
|
182184
|
+
height: headerHeight,
|
|
182185
|
+
display: "flex",
|
|
182186
|
+
alignItems: "center",
|
|
182187
|
+
justifyContent: "center",
|
|
182188
|
+
backgroundColor: "var(--sequence-header-bg, rgba(100, 149, 237, 0.15))",
|
|
182189
|
+
borderBottom: "2px solid var(--sequence-header-border, rgba(100, 149, 237, 0.4))",
|
|
182190
|
+
fontWeight: 600,
|
|
182191
|
+
fontSize: 13,
|
|
182192
|
+
color: "var(--sequence-header-text, #333)",
|
|
182193
|
+
pointerEvents: "auto",
|
|
182194
|
+
cursor: hasChildren ? "pointer" : "default",
|
|
182195
|
+
userSelect: "none"
|
|
182196
|
+
}, onClick: () => hasChildren && (onToggleCollapse == null ? void 0 : onToggleCollapse(lane.namespace)), children: [hasChildren && jsx("span", { style: { marginRight: 6, fontSize: 10 }, children: lane.isCollapsed ? "▶" : "▼" }), jsx("span", { children: lane.label }), lane.eventIds.length > 1 && jsxs("span", { style: { marginLeft: 6, fontSize: 11, opacity: 0.6 }, children: ["(", lane.eventIds.length, ")"] })] }, `header-${lane.namespace}`);
|
|
182197
|
+
}), swimlanes.map((lane) => jsx("div", { style: {
|
|
182198
|
+
position: "absolute",
|
|
182199
|
+
left: lane.x,
|
|
182200
|
+
top: headerHeight,
|
|
182201
|
+
width: 2,
|
|
182202
|
+
height: extendedHeight - headerHeight,
|
|
182203
|
+
backgroundColor: "var(--sequence-lifeline, rgba(100, 149, 237, 0.3))",
|
|
182204
|
+
transform: "translateX(-1px)"
|
|
182205
|
+
} }, `lifeline-${lane.namespace}`))] });
|
|
182206
|
+
}
|
|
182207
|
+
function SequenceDiagramInner({
|
|
182208
|
+
events,
|
|
182209
|
+
edges: sequenceEdges,
|
|
182210
|
+
layoutOptions = {},
|
|
182211
|
+
nodeTypes: customNodeTypes,
|
|
182212
|
+
edgeTypes: customEdgeTypes,
|
|
182213
|
+
onToggleCollapse,
|
|
182214
|
+
onNodeClick,
|
|
182215
|
+
showControls = true,
|
|
182216
|
+
showBackground = false
|
|
182217
|
+
// Default to false since swimlanes provide visual structure
|
|
182218
|
+
}) {
|
|
182219
|
+
const { laneWidth = 200, headerHeight = 60 } = layoutOptions;
|
|
182220
|
+
const nodeTypes2 = useMemo(() => ({ ...defaultSequenceNodeTypes, ...customNodeTypes }), [customNodeTypes]);
|
|
182221
|
+
const edgeTypes2 = useMemo(() => ({ ...defaultSequenceEdgeTypes, ...customEdgeTypes }), [customEdgeTypes]);
|
|
182222
|
+
const { nodes, edges, swimlanes, totalHeight } = useSequenceLayout(events, sequenceEdges, layoutOptions);
|
|
182223
|
+
const handleNodeClick2 = useCallback((_event, node2) => {
|
|
182224
|
+
onNodeClick == null ? void 0 : onNodeClick(node2.id, _event);
|
|
182225
|
+
}, [onNodeClick]);
|
|
182226
|
+
return jsxs(index$2, { nodes, edges, nodeTypes: nodeTypes2, edgeTypes: edgeTypes2, onNodeClick: handleNodeClick2, fitView: true, fitViewOptions: {
|
|
182227
|
+
padding: 0.2,
|
|
182228
|
+
minZoom: 0.5,
|
|
182229
|
+
maxZoom: 1.5
|
|
182230
|
+
}, minZoom: 0.1, maxZoom: 2, nodesDraggable: false, nodesConnectable: false, elementsSelectable: true, panOnScroll: true, zoomOnScroll: true, children: [jsx("svg", { style: { position: "absolute", width: 0, height: 0 }, children: jsx("defs", { children: jsx("marker", { id: "sequence-arrow", viewBox: "0 0 10 10", refX: "8", refY: "5", markerWidth: "6", markerHeight: "6", orient: "auto-start-reverse", children: jsx("path", { d: "M 0 0 L 10 5 L 0 10 z", fill: "var(--sequence-arrow-color, #4169E1)" }) }) }) }), showBackground && jsx(Background, { variant: BackgroundVariant.Dots, gap: 16, size: 1 }), showControls && jsx(Controls, {}), jsx(SwimlaneLayer, { swimlanes, laneWidth, headerHeight, totalHeight, onToggleCollapse }), swimlanes.some((s2) => s2.children.length > 0) && jsx(Panel$1, { position: "top-right", children: jsx("div", { style: {
|
|
182231
|
+
background: "var(--sequence-panel-bg, rgba(255, 255, 255, 0.95))",
|
|
182232
|
+
border: "1px solid var(--sequence-panel-border, #ddd)",
|
|
182233
|
+
borderRadius: 4,
|
|
182234
|
+
padding: "6px 10px",
|
|
182235
|
+
fontSize: 11,
|
|
182236
|
+
color: "#666"
|
|
182237
|
+
}, children: "Click lane headers to expand/collapse" }) })] });
|
|
182238
|
+
}
|
|
182239
|
+
function SequenceDiagramRenderer(props) {
|
|
182240
|
+
const { className, width = "100%", height = 600 } = props;
|
|
182241
|
+
return jsx("div", { className, style: {
|
|
182242
|
+
width,
|
|
182243
|
+
height,
|
|
182244
|
+
position: "relative"
|
|
182245
|
+
}, children: jsx(ReactFlowProvider, { children: jsx(SequenceDiagramInner, { ...props }) }) });
|
|
182246
|
+
}
|
|
181949
182247
|
const DEFAULT_NODE_WIDTH = 200;
|
|
181950
182248
|
const DEFAULT_NODE_HEIGHT = 100;
|
|
181951
182249
|
const GROUP_PADDING = 40;
|
|
@@ -206082,6 +206380,182 @@ class EmptyDataProvider {
|
|
|
206082
206380
|
};
|
|
206083
206381
|
}
|
|
206084
206382
|
}
|
|
206383
|
+
function convertWorkflowToSequence(scenario) {
|
|
206384
|
+
const templateEvents = scenario.template.events ?? {};
|
|
206385
|
+
const eventNames = Object.keys(templateEvents);
|
|
206386
|
+
const events = eventNames.map((name2, index2) => ({
|
|
206387
|
+
id: `event-${index2}`,
|
|
206388
|
+
name: name2,
|
|
206389
|
+
label: name2.split(".").pop() ?? name2
|
|
206390
|
+
}));
|
|
206391
|
+
const edges = [];
|
|
206392
|
+
for (let i = 0; i < events.length - 1; i++) {
|
|
206393
|
+
edges.push({
|
|
206394
|
+
id: `edge-${i}`,
|
|
206395
|
+
fromEvent: events[i].id,
|
|
206396
|
+
toEvent: events[i + 1].id
|
|
206397
|
+
});
|
|
206398
|
+
}
|
|
206399
|
+
return { events, edges };
|
|
206400
|
+
}
|
|
206401
|
+
function SequenceDiagramModal({
|
|
206402
|
+
sequence,
|
|
206403
|
+
onClose,
|
|
206404
|
+
onOpenCanvas,
|
|
206405
|
+
theme: theme2
|
|
206406
|
+
}) {
|
|
206407
|
+
const { events, edges } = useMemo(
|
|
206408
|
+
() => convertWorkflowToSequence(sequence.scenario),
|
|
206409
|
+
[sequence.scenario]
|
|
206410
|
+
);
|
|
206411
|
+
return /* @__PURE__ */ jsx(
|
|
206412
|
+
"div",
|
|
206413
|
+
{
|
|
206414
|
+
style: {
|
|
206415
|
+
position: "fixed",
|
|
206416
|
+
inset: 0,
|
|
206417
|
+
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
|
206418
|
+
display: "flex",
|
|
206419
|
+
alignItems: "center",
|
|
206420
|
+
justifyContent: "center",
|
|
206421
|
+
zIndex: 1e3
|
|
206422
|
+
},
|
|
206423
|
+
onClick: (e) => {
|
|
206424
|
+
if (e.target === e.currentTarget) onClose();
|
|
206425
|
+
},
|
|
206426
|
+
children: /* @__PURE__ */ jsxs(
|
|
206427
|
+
"div",
|
|
206428
|
+
{
|
|
206429
|
+
style: {
|
|
206430
|
+
backgroundColor: theme2.colors.background,
|
|
206431
|
+
borderRadius: theme2.radii[2],
|
|
206432
|
+
boxShadow: "0 4px 20px rgba(0, 0, 0, 0.3)",
|
|
206433
|
+
width: "90%",
|
|
206434
|
+
maxWidth: 1200,
|
|
206435
|
+
height: "80%",
|
|
206436
|
+
maxHeight: 800,
|
|
206437
|
+
display: "flex",
|
|
206438
|
+
flexDirection: "column",
|
|
206439
|
+
overflow: "hidden"
|
|
206440
|
+
},
|
|
206441
|
+
children: [
|
|
206442
|
+
/* @__PURE__ */ jsxs(
|
|
206443
|
+
"div",
|
|
206444
|
+
{
|
|
206445
|
+
style: {
|
|
206446
|
+
display: "flex",
|
|
206447
|
+
alignItems: "center",
|
|
206448
|
+
justifyContent: "space-between",
|
|
206449
|
+
padding: `${theme2.space[3]} ${theme2.space[4]}`,
|
|
206450
|
+
borderBottom: `1px solid ${theme2.colors.border}`,
|
|
206451
|
+
backgroundColor: theme2.colors.surface
|
|
206452
|
+
},
|
|
206453
|
+
children: [
|
|
206454
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
206455
|
+
/* @__PURE__ */ jsx(
|
|
206456
|
+
"h2",
|
|
206457
|
+
{
|
|
206458
|
+
style: {
|
|
206459
|
+
margin: 0,
|
|
206460
|
+
fontSize: theme2.fontSizes[4],
|
|
206461
|
+
fontWeight: 600,
|
|
206462
|
+
color: theme2.colors.text
|
|
206463
|
+
},
|
|
206464
|
+
children: sequence.workflow.name
|
|
206465
|
+
}
|
|
206466
|
+
),
|
|
206467
|
+
/* @__PURE__ */ jsx(
|
|
206468
|
+
"p",
|
|
206469
|
+
{
|
|
206470
|
+
style: {
|
|
206471
|
+
margin: `${theme2.space[1]} 0 0`,
|
|
206472
|
+
fontSize: theme2.fontSizes[1],
|
|
206473
|
+
color: theme2.colors.textSecondary
|
|
206474
|
+
},
|
|
206475
|
+
children: sequence.scenario.description
|
|
206476
|
+
}
|
|
206477
|
+
)
|
|
206478
|
+
] }),
|
|
206479
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: theme2.space[2] }, children: [
|
|
206480
|
+
/* @__PURE__ */ jsxs(
|
|
206481
|
+
"button",
|
|
206482
|
+
{
|
|
206483
|
+
onClick: onOpenCanvas,
|
|
206484
|
+
style: {
|
|
206485
|
+
display: "flex",
|
|
206486
|
+
alignItems: "center",
|
|
206487
|
+
gap: theme2.space[1],
|
|
206488
|
+
padding: `${theme2.space[2]} ${theme2.space[3]}`,
|
|
206489
|
+
backgroundColor: theme2.colors.primary,
|
|
206490
|
+
color: theme2.colors.background,
|
|
206491
|
+
border: "none",
|
|
206492
|
+
borderRadius: theme2.radii[1],
|
|
206493
|
+
fontSize: theme2.fontSizes[1],
|
|
206494
|
+
fontWeight: 500,
|
|
206495
|
+
cursor: "pointer"
|
|
206496
|
+
},
|
|
206497
|
+
children: [
|
|
206498
|
+
/* @__PURE__ */ jsx(ExternalLink, { size: 14 }),
|
|
206499
|
+
"Open in Canvas"
|
|
206500
|
+
]
|
|
206501
|
+
}
|
|
206502
|
+
),
|
|
206503
|
+
/* @__PURE__ */ jsx(
|
|
206504
|
+
"button",
|
|
206505
|
+
{
|
|
206506
|
+
onClick: onClose,
|
|
206507
|
+
style: {
|
|
206508
|
+
display: "flex",
|
|
206509
|
+
alignItems: "center",
|
|
206510
|
+
justifyContent: "center",
|
|
206511
|
+
width: 32,
|
|
206512
|
+
height: 32,
|
|
206513
|
+
backgroundColor: "transparent",
|
|
206514
|
+
border: `1px solid ${theme2.colors.border}`,
|
|
206515
|
+
borderRadius: theme2.radii[1],
|
|
206516
|
+
cursor: "pointer",
|
|
206517
|
+
color: theme2.colors.textSecondary
|
|
206518
|
+
},
|
|
206519
|
+
children: /* @__PURE__ */ jsx(X$2, { size: 18 })
|
|
206520
|
+
}
|
|
206521
|
+
)
|
|
206522
|
+
] })
|
|
206523
|
+
]
|
|
206524
|
+
}
|
|
206525
|
+
),
|
|
206526
|
+
/* @__PURE__ */ jsx("div", { style: { flex: 1, minHeight: 0 }, children: events.length > 0 ? /* @__PURE__ */ jsx(
|
|
206527
|
+
SequenceDiagramRenderer,
|
|
206528
|
+
{
|
|
206529
|
+
events,
|
|
206530
|
+
edges,
|
|
206531
|
+
height: "100%",
|
|
206532
|
+
layoutOptions: {
|
|
206533
|
+
laneWidth: 220,
|
|
206534
|
+
laneGap: 60,
|
|
206535
|
+
eventSpacing: 100,
|
|
206536
|
+
namespaceStrategy: "all-but-last"
|
|
206537
|
+
},
|
|
206538
|
+
showControls: true
|
|
206539
|
+
}
|
|
206540
|
+
) : /* @__PURE__ */ jsx(
|
|
206541
|
+
"div",
|
|
206542
|
+
{
|
|
206543
|
+
style: {
|
|
206544
|
+
height: "100%",
|
|
206545
|
+
display: "flex",
|
|
206546
|
+
alignItems: "center",
|
|
206547
|
+
justifyContent: "center",
|
|
206548
|
+
color: theme2.colors.textSecondary
|
|
206549
|
+
},
|
|
206550
|
+
children: "No events defined for this scenario"
|
|
206551
|
+
}
|
|
206552
|
+
) })
|
|
206553
|
+
]
|
|
206554
|
+
}
|
|
206555
|
+
)
|
|
206556
|
+
}
|
|
206557
|
+
);
|
|
206558
|
+
}
|
|
206085
206559
|
const DashboardPanel = ({
|
|
206086
206560
|
context: context2,
|
|
206087
206561
|
actions,
|
|
@@ -206100,6 +206574,7 @@ const DashboardPanel = ({
|
|
|
206100
206574
|
const [error, setError] = useState(null);
|
|
206101
206575
|
const [timeRange, setTimeRange] = useState({ preset: "last_1h" });
|
|
206102
206576
|
const [refreshInterval, setRefreshInterval] = useState("off");
|
|
206577
|
+
const [selectedSequence, setSelectedSequence] = useState(null);
|
|
206103
206578
|
gt("dashboard", events, () => {
|
|
206104
206579
|
var _a2;
|
|
206105
206580
|
return (_a2 = panelRef.current) == null ? void 0 : _a2.focus();
|
|
@@ -206154,7 +206629,6 @@ const DashboardPanel = ({
|
|
|
206154
206629
|
onSourceClick(source2);
|
|
206155
206630
|
return;
|
|
206156
206631
|
}
|
|
206157
|
-
if (!(events == null ? void 0 : events.emit)) return;
|
|
206158
206632
|
const matchingStoryboard = storyboards == null ? void 0 : storyboards.find(
|
|
206159
206633
|
(sb) => sb.basename === source2.storyboard || sb.name === source2.storyboard
|
|
206160
206634
|
);
|
|
@@ -206166,6 +206640,44 @@ const DashboardPanel = ({
|
|
|
206166
206640
|
const fullWorkflow = workflows == null ? void 0 : workflows.find(
|
|
206167
206641
|
(wf) => wf.file.path === matchingWorkflowMeta.path
|
|
206168
206642
|
);
|
|
206643
|
+
if (fullWorkflow == null ? void 0 : fullWorkflow.template) {
|
|
206644
|
+
const scenario = fullWorkflow.template.scenarios.find(
|
|
206645
|
+
(s2) => {
|
|
206646
|
+
var _a2;
|
|
206647
|
+
return s2.id === source2.event || ((_a2 = s2.template.events) == null ? void 0 : _a2[source2.event ?? ""]);
|
|
206648
|
+
}
|
|
206649
|
+
) ?? fullWorkflow.template.scenarios[0];
|
|
206650
|
+
if (scenario) {
|
|
206651
|
+
setSelectedSequence({
|
|
206652
|
+
storyboard: matchingStoryboard,
|
|
206653
|
+
workflowMeta: matchingWorkflowMeta,
|
|
206654
|
+
workflow: fullWorkflow.template,
|
|
206655
|
+
scenario,
|
|
206656
|
+
source: source2
|
|
206657
|
+
});
|
|
206658
|
+
return;
|
|
206659
|
+
}
|
|
206660
|
+
}
|
|
206661
|
+
if (events == null ? void 0 : events.emit) {
|
|
206662
|
+
events.emit({
|
|
206663
|
+
type: "custom",
|
|
206664
|
+
source: "dashboard-panel",
|
|
206665
|
+
timestamp: Date.now(),
|
|
206666
|
+
payload: {
|
|
206667
|
+
action: "openCanvas",
|
|
206668
|
+
canvasId: matchingStoryboard.canvas.id,
|
|
206669
|
+
canvas: matchingStoryboard.canvas,
|
|
206670
|
+
workflowId: matchingWorkflowMeta.id,
|
|
206671
|
+
workflow: fullWorkflow == null ? void 0 : fullWorkflow.template,
|
|
206672
|
+
openMode: "detail",
|
|
206673
|
+
sourceNodes: source2.nodes,
|
|
206674
|
+
sourceEvent: source2.event
|
|
206675
|
+
}
|
|
206676
|
+
});
|
|
206677
|
+
}
|
|
206678
|
+
return;
|
|
206679
|
+
}
|
|
206680
|
+
if (events == null ? void 0 : events.emit) {
|
|
206169
206681
|
events.emit({
|
|
206170
206682
|
type: "custom",
|
|
206171
206683
|
source: "dashboard-panel",
|
|
@@ -206174,43 +206686,48 @@ const DashboardPanel = ({
|
|
|
206174
206686
|
action: "openCanvas",
|
|
206175
206687
|
canvasId: matchingStoryboard.canvas.id,
|
|
206176
206688
|
canvas: matchingStoryboard.canvas,
|
|
206177
|
-
|
|
206178
|
-
workflow: fullWorkflow == null ? void 0 : fullWorkflow.template,
|
|
206179
|
-
openMode: "detail",
|
|
206180
|
-
// Include source info for potential node/event highlighting
|
|
206181
|
-
sourceNodes: source2.nodes,
|
|
206182
|
-
sourceEvent: source2.event
|
|
206689
|
+
openMode: "editor"
|
|
206183
206690
|
}
|
|
206184
206691
|
});
|
|
206185
|
-
return;
|
|
206186
206692
|
}
|
|
206693
|
+
return;
|
|
206694
|
+
}
|
|
206695
|
+
if (events == null ? void 0 : events.emit) {
|
|
206187
206696
|
events.emit({
|
|
206188
|
-
type: "
|
|
206697
|
+
type: "dashboard:source-click",
|
|
206189
206698
|
source: "dashboard-panel",
|
|
206190
206699
|
timestamp: Date.now(),
|
|
206191
206700
|
payload: {
|
|
206192
|
-
|
|
206193
|
-
|
|
206194
|
-
|
|
206195
|
-
|
|
206701
|
+
source: source2,
|
|
206702
|
+
storyboard: source2.storyboard,
|
|
206703
|
+
workflow: source2.workflow,
|
|
206704
|
+
nodes: source2.nodes
|
|
206196
206705
|
}
|
|
206197
206706
|
});
|
|
206198
|
-
return;
|
|
206199
206707
|
}
|
|
206200
|
-
events.emit({
|
|
206201
|
-
type: "dashboard:source-click",
|
|
206202
|
-
source: "dashboard-panel",
|
|
206203
|
-
timestamp: Date.now(),
|
|
206204
|
-
payload: {
|
|
206205
|
-
source: source2,
|
|
206206
|
-
storyboard: source2.storyboard,
|
|
206207
|
-
workflow: source2.workflow,
|
|
206208
|
-
nodes: source2.nodes
|
|
206209
|
-
}
|
|
206210
|
-
});
|
|
206211
206708
|
},
|
|
206212
206709
|
[onSourceClick, events, storyboards, workflows]
|
|
206213
206710
|
);
|
|
206711
|
+
const handleOpenCanvas = useCallback(() => {
|
|
206712
|
+
if (!selectedSequence || !(events == null ? void 0 : events.emit)) return;
|
|
206713
|
+
const { storyboard, workflowMeta, workflow, source: source2 } = selectedSequence;
|
|
206714
|
+
events.emit({
|
|
206715
|
+
type: "custom",
|
|
206716
|
+
source: "dashboard-panel",
|
|
206717
|
+
timestamp: Date.now(),
|
|
206718
|
+
payload: {
|
|
206719
|
+
action: "openCanvas",
|
|
206720
|
+
canvasId: storyboard.canvas.id,
|
|
206721
|
+
canvas: storyboard.canvas,
|
|
206722
|
+
workflowId: workflowMeta.id,
|
|
206723
|
+
workflow,
|
|
206724
|
+
openMode: "detail",
|
|
206725
|
+
sourceNodes: source2.nodes,
|
|
206726
|
+
sourceEvent: source2.event
|
|
206727
|
+
}
|
|
206728
|
+
});
|
|
206729
|
+
setSelectedSequence(null);
|
|
206730
|
+
}, [selectedSequence, events]);
|
|
206214
206731
|
const handleMetricClick = useCallback(
|
|
206215
206732
|
(metricId) => {
|
|
206216
206733
|
if (onMetricClick) {
|
|
@@ -206309,7 +206826,7 @@ const DashboardPanel = ({
|
|
|
206309
206826
|
}
|
|
206310
206827
|
);
|
|
206311
206828
|
}
|
|
206312
|
-
return /* @__PURE__ */
|
|
206829
|
+
return /* @__PURE__ */ jsxs(
|
|
206313
206830
|
"div",
|
|
206314
206831
|
{
|
|
206315
206832
|
ref: panelRef,
|
|
@@ -206320,19 +206837,30 @@ const DashboardPanel = ({
|
|
|
206320
206837
|
overflow: "auto",
|
|
206321
206838
|
outline: "none"
|
|
206322
206839
|
},
|
|
206323
|
-
children:
|
|
206324
|
-
|
|
206325
|
-
|
|
206326
|
-
|
|
206327
|
-
|
|
206328
|
-
|
|
206329
|
-
|
|
206330
|
-
|
|
206331
|
-
|
|
206332
|
-
|
|
206333
|
-
|
|
206334
|
-
|
|
206335
|
-
|
|
206840
|
+
children: [
|
|
206841
|
+
/* @__PURE__ */ jsx(
|
|
206842
|
+
DashboardRenderer,
|
|
206843
|
+
{
|
|
206844
|
+
dashboard,
|
|
206845
|
+
dataProvider: effectiveDataProvider,
|
|
206846
|
+
timeRange,
|
|
206847
|
+
onTimeRangeChange: setTimeRange,
|
|
206848
|
+
refreshInterval,
|
|
206849
|
+
onRefreshIntervalChange: setRefreshInterval,
|
|
206850
|
+
onMetricClick: handleMetricClick,
|
|
206851
|
+
onSourceClick: handleSourceClick
|
|
206852
|
+
}
|
|
206853
|
+
),
|
|
206854
|
+
selectedSequence && /* @__PURE__ */ jsx(
|
|
206855
|
+
SequenceDiagramModal,
|
|
206856
|
+
{
|
|
206857
|
+
sequence: selectedSequence,
|
|
206858
|
+
onClose: () => setSelectedSequence(null),
|
|
206859
|
+
onOpenCanvas: handleOpenCanvas,
|
|
206860
|
+
theme: theme2
|
|
206861
|
+
}
|
|
206862
|
+
)
|
|
206863
|
+
]
|
|
206336
206864
|
}
|
|
206337
206865
|
);
|
|
206338
206866
|
};
|