From 0ba2d33870c25483224ca727ccda0a0d86ac69f7 Mon Sep 17 00:00:00 2001 From: markm39 Date: Sun, 24 May 2026 14:08:07 -0500 Subject: [PATCH] fix(canvas): expose viewport transform notification rate --- src/InfiniteInkCanvas.tsx | 3 ++- src/infinite-ink-canvas/types.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/InfiniteInkCanvas.tsx b/src/InfiniteInkCanvas.tsx index 3b77405..528614e 100644 --- a/src/InfiniteInkCanvas.tsx +++ b/src/InfiniteInkCanvas.tsx @@ -112,6 +112,7 @@ function InfiniteInkCanvasImpl( onMotionStateChange, onPencilDoubleTap, onTransformChange, + transformNotificationMinIntervalMs = 16, }: InfiniteInkCanvasProps, ref: React.Ref, ) { @@ -577,7 +578,7 @@ function InfiniteInkCanvasImpl( lockHorizontalPanNearFit={true} blockedTouchRects={selectionTouchRects} singleFingerPanBlocked={selectionTouchRects.length > 0} - transformNotificationMinIntervalMs={80} + transformNotificationMinIntervalMs={transformNotificationMinIntervalMs} onTransformChange={handleTransformChange} onMotionStateChange={handleMotionStateChange} > diff --git a/src/infinite-ink-canvas/types.ts b/src/infinite-ink-canvas/types.ts index fbd556a..8499101 100644 --- a/src/infinite-ink-canvas/types.ts +++ b/src/infinite-ink-canvas/types.ts @@ -64,4 +64,12 @@ export type InfiniteInkCanvasProps = { onMotionStateChange?: (isMoving: boolean) => void; onPencilDoubleTap?: (event: NativeInkPencilDoubleTapEvent) => void; onTransformChange?: (transform: InfiniteInkViewportTransform) => void; + /** + * Minimum time between JS viewport transform notifications. + * + * The canvas itself still scrolls on the UI thread. Lower this when app-side + * overlays need to stay visually attached to the transformed page. Defaults + * to 16ms. + */ + transformNotificationMinIntervalMs?: number; };