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; };