summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-21 14:21:52 -0600
committerAdam <[email protected]>2026-01-21 14:21:59 -0600
commit6d656e4827a28d154a36fd5bc748c0bf9aacd02e (patch)
treecab6161a02a67bbcd04313b1c5ca055827ee5ee4
parentae8cff22e5c21a7e5b428721a5a26a7feab9cf87 (diff)
downloadopencode-6d656e4827a28d154a36fd5bc748c0bf9aacd02e.tar.gz
opencode-6d656e4827a28d154a36fd5bc748c0bf9aacd02e.zip
fix(app): querySelector errors, more defensive scroll-to-item
-rw-r--r--packages/ui/src/components/list.tsx15
1 files changed, 11 insertions, 4 deletions
diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx
index 6d7ad1da6..aeb2769d6 100644
--- a/packages/ui/src/components/list.tsx
+++ b/packages/ui/src/components/list.tsx
@@ -6,6 +6,13 @@ import { Icon, type IconProps } from "./icon"
import { IconButton } from "./icon-button"
import { TextField } from "./text-field"
+function findByKey(container: HTMLElement, key: string) {
+ const nodes = container.querySelectorAll<HTMLElement>('[data-slot="list-item"][data-key]')
+ for (const node of nodes) {
+ if (node.getAttribute("data-key") === key) return node
+ }
+}
+
export interface ListSearchProps {
placeholder?: string
autofocus?: boolean
@@ -97,8 +104,8 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void })
if (!props.current) return
const key = props.key(props.current)
requestAnimationFrame(() => {
- const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`)
- if (!(element instanceof HTMLElement)) return
+ const element = findByKey(scroll, key)
+ if (!element) return
scrollIntoView(scroll, element, "center")
})
})
@@ -114,8 +121,8 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void })
}
const key = active()
if (!key) return
- const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`)
- if (!(element instanceof HTMLElement)) return
+ const element = findByKey(scroll, key)
+ if (!element) return
scrollIntoView(scroll, element, "center")
})