From ae93ae9ef91da0b740e41922d4831d8a44da9eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cchrisshank=E2=80=9D?= Date: Sun, 18 Aug 2024 13:17:33 -0700 Subject: [PATCH] add custom CSS state for moving --- src/elements/spatial-geometry.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/elements/spatial-geometry.ts b/src/elements/spatial-geometry.ts index 0854480..74ffef6 100644 --- a/src/elements/spatial-geometry.ts +++ b/src/elements/spatial-geometry.ts @@ -20,6 +20,11 @@ styles.replaceSync(` cursor: pointer; } +:host(:state(moving)) { + cursor: url("data:image/svg+xml,") 16 16, pointer; + user-select: none; +} + :host(:not([selected])) [resize-handler] { display: none; } @@ -132,9 +137,11 @@ export class SpatialGeometry extends HTMLElement { static observedAttributes = ['type', 'x', 'y']; + #internals: ElementInternals; + constructor() { super(); - + this.#internals = this.attachInternals(); this.addEventListener('pointerdown', this); this.addEventListener('lostpointercapture', this); this.addEventListener('touchstart', this); @@ -215,7 +222,7 @@ export class SpatialGeometry extends HTMLElement { target.setPointerCapture(event.pointerId); this.setAttribute('selected', ''); this.#createResizeHandlers(); - this.style.userSelect = 'none'; + this.#internals.states.add('moving'); return; } case 'pointermove': { @@ -228,7 +235,7 @@ export class SpatialGeometry extends HTMLElement { return; } case 'lostpointercapture': { - this.style.userSelect = ''; + this.#internals.states.delete('moving'); const target = event.composedPath()[0] as HTMLElement; target.removeEventListener('pointermove', this); return;