diff --git a/packages/react/src/additional-components/EdgeToolbar/types.ts b/packages/react/src/additional-components/EdgeToolbar/types.ts
index 96261694..651a27c8 100644
--- a/packages/react/src/additional-components/EdgeToolbar/types.ts
+++ b/packages/react/src/additional-components/EdgeToolbar/types.ts
@@ -33,9 +33,17 @@ export type EdgeToolbarProps = HTMLAttributes & {
/**
* The `x` position of the edge label.
*/
- labelX: number;
+ x: number;
/**
* The `y` position of the edge label.
*/
- labelY: number;
+ y: number;
+ /**
+ * The `offsetX` position of the edge label relative to the edge in pixels.
+ */
+ offsetX: number;
+ /**
+ * The `offsetY` position of the edge label relative to the edge in pixels.
+ */
+ offsetY: number;
};
diff --git a/packages/system/src/utils/edge-toolbar.ts b/packages/system/src/utils/edge-toolbar.ts
index 3fe2c5c2..84ef5a5c 100644
--- a/packages/system/src/utils/edge-toolbar.ts
+++ b/packages/system/src/utils/edge-toolbar.ts
@@ -1,6 +1,12 @@
-import { Position, type Viewport, type Align } from '..';
+import { type Viewport } from '..';
-export function getEdgeToolbarTransform(labelX: number, labelY: number, viewport: Viewport): string {
+export function getEdgeToolbarTransform(
+ labelX: number,
+ labelY: number,
+ viewport: Viewport,
+ offsetX: number = 0,
+ offsetY: number = 0
+): string {
// Position the toolbar at the edge label center (scaling is handled by EdgeLabelRenderer)
- return `translate(${labelX}px, ${labelY}px)`;
+ return `translate(${labelX + offsetX}px, ${labelY + offsetY}px) translate(-50%, -50%) scale(${1 / viewport.zoom})`;
}