fix: WaveformSeeker resize drift and mobile fast-tap crash

- Add ResizeObserver (JS observeResize/unobserveResize + C# OnWidthChanged)
  so _elementWidth stays current after window resize, fixing hover indicator drift
- Move _isSeeking = true before capturePointer await so a fast mobile tap
  that fires pointerup mid-await still commits the seek
- Replace all Duration!.Value null-forgiving dereferences with explicit
  Duration is > 0 guards in all four pointer event handlers
- Silence post-dispose resize callback rejections with .catch(() => {})
This commit is contained in:
daniel-c-harvey
2026-06-07 09:00:10 -04:00
parent 6dfb3a2f23
commit 5cdd69d7d9
2 changed files with 57 additions and 15 deletions
@@ -10,3 +10,18 @@ export function capturePointer(element, pointerId) {
// setPointerCapture keeps a drag tracking even when the pointer leaves the element bounds.
element?.setPointerCapture?.(pointerId);
}
export function observeResize(element, dotNetRef) {
if (!element || typeof ResizeObserver === 'undefined') return null;
const observer = new ResizeObserver(entries => {
for (const entry of entries) {
dotNetRef.invokeMethodAsync('OnWidthChanged', entry.contentRect.width).catch(() => {});
}
});
observer.observe(element);
return observer;
}
export function unobserveResize(observer) {
observer?.disconnect();
}