diff options
| author | Brendan Allan <[email protected]> | 2026-04-02 17:24:10 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-02 17:24:10 +0800 |
| commit | 327f62526a7f60c1c67ae017d1b105466bb730e9 (patch) | |
| tree | 4190af49ea728807c503107e78e07cba593cac3a /packages/app/src | |
| parent | d540d363a76909c9c1b1d4e4113a1b8fea62c5a8 (diff) | |
| download | opencode-327f62526a7f60c1c67ae017d1b105466bb730e9.tar.gz opencode-327f62526a7f60c1c67ae017d1b105466bb730e9.zip | |
use solid-primitives/resize-observer across web code (#20613)
Diffstat (limited to 'packages/app/src')
4 files changed, 13 insertions, 21 deletions
diff --git a/packages/app/src/components/server/server-row.tsx b/packages/app/src/components/server/server-row.tsx index 63a40bac2..d4f68d630 100644 --- a/packages/app/src/components/server/server-row.tsx +++ b/packages/app/src/components/server/server-row.tsx @@ -1,11 +1,11 @@ import { Tooltip } from "@opencode-ai/ui/tooltip" +import { createResizeObserver } from "@solid-primitives/resize-observer" import { children, createEffect, createMemo, createSignal, type JSXElement, - onCleanup, onMount, type ParentProps, Show, @@ -46,12 +46,9 @@ export function ServerRow(props: ServerRowProps) { }) onMount(() => { - check() if (typeof ResizeObserver !== "function") return - const observer = new ResizeObserver(check) - if (nameRef) observer.observe(nameRef) - if (versionRef) observer.observe(versionRef) - onCleanup(() => observer.disconnect()) + createResizeObserver([nameRef, versionRef], check) + check() }) const tooltipValue = () => ( diff --git a/packages/app/src/pages/session/composer/session-composer-region.tsx b/packages/app/src/pages/session/composer/session-composer-region.tsx index a5263cd74..372adef96 100644 --- a/packages/app/src/pages/session/composer/session-composer-region.tsx +++ b/packages/app/src/pages/session/composer/session-composer-region.tsx @@ -13,6 +13,7 @@ import { SessionRevertDock } from "@/pages/session/composer/session-revert-dock" import type { SessionComposerState } from "@/pages/session/composer/session-composer-state" import { SessionTodoDock } from "@/pages/session/composer/session-todo-dock" import type { FollowupDraft } from "@/components/prompt-input/submit" +import { createResizeObserver } from "@solid-primitives/resize-observer" export function SessionComposerRegion(props: { state: SessionComposerState @@ -115,13 +116,9 @@ export function SessionComposerRegion(props: { createEffect(() => { const el = store.body if (!el) return - const update = () => { - setStore("height", el.getBoundingClientRect().height) - } + const update = () => setStore("height", el.getBoundingClientRect().height) + createResizeObserver(store.body, update) update() - const observer = new ResizeObserver(update) - observer.observe(el) - onCleanup(() => observer.disconnect()) }) return ( diff --git a/packages/app/src/pages/session/composer/session-question-dock.tsx b/packages/app/src/pages/session/composer/session-question-dock.tsx index 38974b246..35690030c 100644 --- a/packages/app/src/pages/session/composer/session-question-dock.tsx +++ b/packages/app/src/pages/session/composer/session-question-dock.tsx @@ -8,6 +8,8 @@ import { showToast } from "@opencode-ai/ui/toast" import type { QuestionAnswer, QuestionRequest } from "@opencode-ai/sdk/v2" import { useLanguage } from "@/context/language" import { useSDK } from "@/context/sdk" +import { makeEventListener } from "@solid-primitives/event-listener" +import { createResizeObserver } from "@solid-primitives/resize-observer" const cache = new Map<string, { tab: number; answers: QuestionAnswer[]; custom: string[]; customOn: boolean[] }>() @@ -172,17 +174,14 @@ export const SessionQuestionDock: Component<{ request: QuestionRequest; onSubmit } update() - window.addEventListener("resize", update) + + makeEventListener(window, "resize", update) const dock = root?.closest('[data-component="session-prompt-dock"]') const scroller = document.querySelector(".scroll-view__viewport") - const observer = new ResizeObserver(update) - if (dock instanceof HTMLElement) observer.observe(dock) - if (scroller instanceof HTMLElement) observer.observe(scroller) + createResizeObserver([dock, scroller], update) onCleanup(() => { - window.removeEventListener("resize", update) - observer.disconnect() if (raf !== undefined) cancelAnimationFrame(raf) }) diff --git a/packages/app/src/pages/session/composer/session-todo-dock.tsx b/packages/app/src/pages/session/composer/session-todo-dock.tsx index c16ac8399..7928bcc9c 100644 --- a/packages/app/src/pages/session/composer/session-todo-dock.tsx +++ b/packages/app/src/pages/session/composer/session-todo-dock.tsx @@ -6,6 +6,7 @@ import { IconButton } from "@opencode-ai/ui/icon-button" import { useSpring } from "@opencode-ai/ui/motion-spring" import { TextReveal } from "@opencode-ai/ui/text-reveal" import { TextStrikethrough } from "@opencode-ai/ui/text-strikethrough" +import { createResizeObserver } from "@solid-primitives/resize-observer" import { Index, createEffect, createMemo, on, onCleanup } from "solid-js" import { createStore } from "solid-js/store" import { composerEnabled, composerProbe } from "@/testing/session-composer" @@ -91,9 +92,7 @@ export function SessionTodoDock(props: { setStore("height", el.getBoundingClientRect().height) } update() - const observer = new ResizeObserver(update) - observer.observe(el) - onCleanup(() => observer.disconnect()) + createResizeObserver(el, update) }) createEffect(() => { |
