mirror of
https://github.com/hansjone/netx.git
synced 2026-10-10 09:50:44 +08:00
Paginate LLDP job items, surface port-traffic raw logs with a 300s default, harden topology discover/edit/zoom/fullscreen, and join mid-token CLI wraps before TextFSM. Co-authored-by: Cursor <cursoragent@cursor.com>
54 lines
1.4 KiB
TypeScript
54 lines
1.4 KiB
TypeScript
/** Topology editor interaction modes (NMS-style). */
|
|
|
|
export type ToolMode = "select" | "pan" | "connect";
|
|
|
|
export type ToolModeBehavior = {
|
|
nodesDraggable: boolean;
|
|
nodesConnectable: boolean;
|
|
elementsSelectable: boolean;
|
|
/** false = no pane pan on drag; true = left-drag pans; array = button indices */
|
|
panOnDrag: boolean | number[];
|
|
selectionOnDrag: boolean;
|
|
panOnScroll: boolean;
|
|
};
|
|
|
|
export function behaviorForMode(mode: ToolMode): ToolModeBehavior {
|
|
switch (mode) {
|
|
case "pan":
|
|
return {
|
|
nodesDraggable: false,
|
|
nodesConnectable: false,
|
|
elementsSelectable: false,
|
|
panOnDrag: true,
|
|
selectionOnDrag: false,
|
|
panOnScroll: true,
|
|
};
|
|
case "connect":
|
|
return {
|
|
nodesDraggable: false,
|
|
nodesConnectable: true,
|
|
elementsSelectable: true,
|
|
panOnDrag: [1, 2],
|
|
selectionOnDrag: false,
|
|
panOnScroll: true,
|
|
};
|
|
case "select":
|
|
default:
|
|
return {
|
|
nodesDraggable: true,
|
|
nodesConnectable: false,
|
|
elementsSelectable: true,
|
|
panOnDrag: [1, 2],
|
|
selectionOnDrag: true,
|
|
panOnScroll: true,
|
|
};
|
|
}
|
|
}
|
|
|
|
export function toolModeFromKey(key: string): ToolMode | null {
|
|
const k = key.toLowerCase();
|
|
if (k === "v") return "select";
|
|
if (k === "h") return "pan";
|
|
if (k === "c") return "connect";
|
|
return null;
|
|
}
|