From 69f5f657f2b3b98d213a7bedd46624cda0e78bcd Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 2 Feb 2026 11:42:05 -0600 Subject: [PATCH] chore: cleanup --- packages/ui/src/components/code.tsx | 118 +++++++++++++++++++++------- 1 file changed, 91 insertions(+), 27 deletions(-) diff --git a/packages/ui/src/components/code.tsx b/packages/ui/src/components/code.tsx index 38dfcd838..0b0646f0e 100644 --- a/packages/ui/src/components/code.tsx +++ b/packages/ui/src/components/code.tsx @@ -109,9 +109,8 @@ function installFindShortcuts() { return } - if (isEditable(event.target)) return - - const host = hostForNode(document.activeElement) ?? findTarget ?? Array.from(findHosts)[0] + const host = + hostForNode(document.activeElement) ?? hostForNode(event.target) ?? findTarget ?? Array.from(findHosts)[0] if (!host) return event.preventDefault() @@ -126,9 +125,11 @@ export function Code(props: CodeProps) { let wrapper!: HTMLDivElement let container!: HTMLDivElement let findInput: HTMLInputElement | undefined + let findBar: HTMLDivElement | undefined let findOverlay!: HTMLDivElement let findOverlayFrame: number | undefined let findOverlayScroll: HTMLElement[] = [] + let findPositionFrame: number | undefined let observer: MutationObserver | undefined let renderToken = 0 let selectionFrame: number | undefined @@ -290,6 +291,41 @@ export function Code(props: CodeProps) { setFindIndex(0) } + const getScrollParent = (el: HTMLElement): HTMLElement | null => { + let parent = el.parentElement + while (parent) { + const style = getComputedStyle(parent) + if (style.overflowY === "auto" || style.overflowY === "scroll") return parent + parent = parent.parentElement + } + return null + } + + const positionFindBar = () => { + if (!findBar || !wrapper) return + const scrollParent = getScrollParent(wrapper) + if (!scrollParent) { + findBar.style.position = "absolute" + findBar.style.top = "8px" + findBar.style.right = "8px" + findBar.style.left = "" + return + } + const scrollTop = scrollParent.scrollTop + findBar.style.position = "absolute" + findBar.style.top = `${scrollTop + 8}px` + findBar.style.right = "8px" + findBar.style.left = "" + } + + const scheduleFindPosition = () => { + if (findPositionFrame !== undefined) return + findPositionFrame = requestAnimationFrame(() => { + findPositionFrame = undefined + positionFindBar() + }) + } + const scanFind = (root: ShadowRoot, query: string) => { const needle = query.toLowerCase() const out: Range[] = [] @@ -458,6 +494,7 @@ export function Code(props: CodeProps) { if (!findOpen()) setFindOpen(true) requestAnimationFrame(() => { + positionFindBar() findInput?.focus() findInput?.select() }) @@ -482,6 +519,25 @@ export function Code(props: CodeProps) { }) }) + createEffect(() => { + if (!findOpen()) return + const scrollParent = getScrollParent(wrapper) + const target = scrollParent ?? window + + const handler = () => scheduleFindPosition() + target.addEventListener("scroll", handler, { passive: true }) + window.addEventListener("resize", handler, { passive: true }) + + onCleanup(() => { + target.removeEventListener("scroll", handler) + window.removeEventListener("resize", handler) + if (findPositionFrame !== undefined) { + cancelAnimationFrame(findPositionFrame) + findPositionFrame = undefined + } + }) + }) + const applyCommentedLines = (ranges: SelectedLineRange[]) => { const root = getRoot() if (!root) return @@ -862,6 +918,11 @@ export function Code(props: CodeProps) { dragFrame = undefined } + if (findPositionFrame !== undefined) { + cancelAnimationFrame(findPositionFrame) + findPositionFrame = undefined + } + dragStart = undefined dragEnd = undefined dragMoved = false @@ -888,19 +949,18 @@ export function Code(props: CodeProps) { findTarget = host }} > -
-
e.stopPropagation()} > - + { setFindQuery(e.currentTarget.value) setFindIndex(0) @@ -917,30 +977,32 @@ export function Code(props: CodeProps) { stepFind(e.shiftKey ? -1 : 1) }} /> -
+
{findCount() ? `${findIndex() + 1}/${findCount()}` : "0/0"}
+
+ + +
- -
+
+
) }