(initial?.custom_color)
const [pathStyle, setPathStyle] = useState(initial?.path_style ?? 'bezier')
+ const [animated, setAnimated] = useState(initial?.animated ?? false)
const effectiveColor = customColor ?? EDGE_DEFAULT_COLORS[type]
@@ -36,6 +37,7 @@ export function EdgeModal({ open, onClose, onSubmit, onDelete, initial, title =
vlan_id: type === 'vlan' && vlanId ? parseInt(vlanId) : undefined,
custom_color: customColor,
path_style: pathStyle,
+ animated: animated || undefined,
})
onClose()
}
@@ -113,6 +115,22 @@ export function EdgeModal({ open, onClose, onSubmit, onDelete, initial, title =
+
+
+
+
+
diff --git a/frontend/src/index.css b/frontend/src/index.css
index c41b4e1..ac5baf1 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -115,3 +115,13 @@
.font-mono {
font-family: 'JetBrains Mono', monospace;
}
+
+/* Edge flow animation — dot traveling from source to target */
+@keyframes flow-dot {
+ from { stroke-dashoffset: 0; }
+ to { stroke-dashoffset: -10000; }
+}
+.edge-flow-dot {
+ animation: flow-dot 2.5s linear infinite;
+ pointer-events: none;
+}
diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts
index bdf6001..5a44a7e 100644
--- a/frontend/src/types/index.ts
+++ b/frontend/src/types/index.ts
@@ -81,6 +81,7 @@ export interface EdgeData extends Record {
speed?: string
custom_color?: string
path_style?: EdgePathStyle
+ animated?: boolean
}
export const NODE_TYPE_LABELS: Record = {