From 5b2c6f39e0386bb80a77913df20b059e107a87be Mon Sep 17 00:00:00 2001 From: Toma Gagne Date: Fri, 5 Jun 2026 11:05:20 -0400 Subject: [PATCH 1/2] Add ability to externally scroll a row and lazy row without setting focus --- src/primitives/Lazy.tsx | 4 ++-- src/primitives/Row.tsx | 6 ++++-- src/primitives/types.ts | 6 +++++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/primitives/Lazy.tsx b/src/primitives/Lazy.tsx index f76bdd1..d61a3d0 100644 --- a/src/primitives/Lazy.tsx +++ b/src/primitives/Lazy.tsx @@ -136,9 +136,9 @@ function createLazy( Array.isArray(props.each) ? props.each.slice(0, offset()) : [], ); - function lazyScrollToIndex(this: lngp.NavigableElement, index: number) { + function lazyScrollToIndex(this: lngp.NavigableElement, index: number, options?: {noFocus?: boolean}) { setOffset(Math.max(index, 0) + buffer()) - queueMicrotask(() => viewRef.scrollToIndex(index)); + queueMicrotask(() => viewRef.scrollToIndex(index, options)); } const updateOffset = (_event: KeyboardEvent, container: lng.ElementNode) => { diff --git a/src/primitives/Row.tsx b/src/primitives/Row.tsx index 1dbdbc0..d397e46 100644 --- a/src/primitives/Row.tsx +++ b/src/primitives/Row.tsx @@ -19,10 +19,12 @@ const RowStyles: NodeStyles = { gap: 30, }; -function scrollToIndex(this: ElementNode, index: number) { +function scrollToIndex(this: ElementNode, index: number, options?: {noFocus?: boolean}) { this.selected = index; scrollRow(index, this); - this.children[index]?.setFocus(); + if (!options?.noFocus) { + this.children[index]?.setFocus(); + } } const onLeft = handleNavigation('left'); diff --git a/src/primitives/types.ts b/src/primitives/types.ts index dd683a6..0cfe6dd 100644 --- a/src/primitives/types.ts +++ b/src/primitives/types.ts @@ -74,7 +74,11 @@ export interface NavigableProps extends NodeProps { // @ts-expect-error animationSettings is not identical - weird export interface NavigableElement extends ElementNode, NavigableProps { selected: number; - scrollToIndex: (this: NavigableElement, index: number) => void; + scrollToIndex: ( + this: NavigableElement, + index: number, + options?: { noFocus?: boolean }, + ) => void; } export interface NavigableStyleProperties { From 868834e1a3b01a446b29b0f2003212d062830be7 Mon Sep 17 00:00:00 2001 From: Toma Gagne Date: Fri, 5 Jun 2026 11:15:14 -0400 Subject: [PATCH 2/2] Add support for Column --- src/primitives/Column.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/primitives/Column.tsx b/src/primitives/Column.tsx index bf05b9c..673530d 100644 --- a/src/primitives/Column.tsx +++ b/src/primitives/Column.tsx @@ -20,10 +20,12 @@ const ColumnStyles: NodeStyles = { gap: 30, }; -function scrollToIndex(this: ElementNode, index: number) { +function scrollToIndex(this: ElementNode, index: number, options?: {noFocus?: boolean}) { this.selected = index; scrollColumn(index, this); - this.children[index]?.setFocus(); + if (!options?.noFocus) { + this.children[index]?.setFocus(); + } } const onUp = handleNavigation('up');