diff --git a/packages/ng-diagram/projects/ng-diagram/src/lib/components/diagram/ng-diagram.component.scss b/packages/ng-diagram/projects/ng-diagram/src/lib/components/diagram/ng-diagram.component.scss index 468b70832..2d93c4a76 100644 --- a/packages/ng-diagram/projects/ng-diagram/src/lib/components/diagram/ng-diagram.component.scss +++ b/packages/ng-diagram/projects/ng-diagram/src/lib/components/diagram/ng-diagram.component.scss @@ -8,6 +8,7 @@ touch-action: none; transform: translateZ(0px); -webkit-font-smoothing: antialiased; + cursor: grab; outline: none; @@ -15,4 +16,8 @@ width: 100%; height: 100%; } + + &.grabbing { + cursor: grabbing; + } } diff --git a/packages/ng-diagram/projects/ng-diagram/src/lib/components/node/ng-diagram-node.component.scss b/packages/ng-diagram/projects/ng-diagram/src/lib/components/node/ng-diagram-node.component.scss index 20c988dd4..f7b6a927b 100644 --- a/packages/ng-diagram/projects/ng-diagram/src/lib/components/node/ng-diagram-node.component.scss +++ b/packages/ng-diagram/projects/ng-diagram/src/lib/components/node/ng-diagram-node.component.scss @@ -5,6 +5,7 @@ transform-origin: 0 0; pointer-events: none; user-select: none; + cursor: pointer; } .node-content { diff --git a/packages/ng-diagram/projects/ng-diagram/src/lib/directives/input-events/panning/panning.directive.ts b/packages/ng-diagram/projects/ng-diagram/src/lib/directives/input-events/panning/panning.directive.ts index 145f30da4..26637a5ec 100644 --- a/packages/ng-diagram/projects/ng-diagram/src/lib/directives/input-events/panning/panning.directive.ts +++ b/packages/ng-diagram/projects/ng-diagram/src/lib/directives/input-events/panning/panning.directive.ts @@ -1,4 +1,4 @@ -import { Directive, inject, type OnDestroy } from '@angular/core'; +import { Directive, ElementRef, inject, type OnDestroy } from '@angular/core'; import { InputEventsRouterService } from '../../../services/input-events/input-events-router.service'; import type { PointerInputEvent } from '../../../types/event'; import { shouldDiscardEvent } from '../utils/should-discard-event'; @@ -12,6 +12,7 @@ import { shouldDiscardEvent } from '../utils/should-discard-event'; }) export class PanningDirective implements OnDestroy { private readonly inputEventsRouter = inject(InputEventsRouterService); + private readonly elementRef = inject(ElementRef); ngOnDestroy(): void { document.removeEventListener('pointermove', this.onMouseMove); @@ -22,6 +23,7 @@ export class PanningDirective implements OnDestroy { if (!this.inputEventsRouter.eventGuards.withPrimaryButton(event) || !this.shouldHandle(event)) { return; } + this.toggleGrabbingCursor(true); event.preventDefault(); event.stopPropagation(); @@ -47,6 +49,7 @@ export class PanningDirective implements OnDestroy { if (!this.inputEventsRouter.eventGuards.withPrimaryButton(event)) { return; } + this.toggleGrabbingCursor(false); event.preventDefault(); event.stopPropagation(); @@ -109,4 +112,9 @@ export class PanningDirective implements OnDestroy { event.zoomingHandled ); } + + private toggleGrabbingCursor(isGrabbing: boolean): void { + const diagramElement = this.elementRef.nativeElement; + diagramElement.classList.toggle('grabbing', isGrabbing); + } }