From 1f7ae3f63803f3e4377c10dd056b5d9b271d5961 Mon Sep 17 00:00:00 2001 From: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Date: Tue, 25 Aug 2026 13:34:53 +0800 Subject: [PATCH] fix(app): animate composer delivery controls (#44886) --- packages/app/src/composer/editor/editor.tsx | 14 ++++-- packages/app/src/runtime/animated-presence.ts | 21 ++++++++ .../src/session/timeline/message-timeline.tsx | 18 ++----- .../animated-presence-state.test.ts | 49 +++++++++++++++++++ 4 files changed, 85 insertions(+), 17 deletions(-) create mode 100644 packages/app/src/runtime/animated-presence.ts create mode 100644 packages/app/test-browser/animated-presence-state.test.ts diff --git a/packages/app/src/composer/editor/editor.tsx b/packages/app/src/composer/editor/editor.tsx index 5ca58dd3a55..54c8914c78e 100644 --- a/packages/app/src/composer/editor/editor.tsx +++ b/packages/app/src/composer/editor/editor.tsx @@ -1,7 +1,8 @@ -import { createEffect, createMemo, For, Show, type JSX } from "solid-js" +import { createEffect, createMemo, createSignal, For, Show, type JSX } from "solid-js" import { FileIcon } from "@opencode-ai/ui/file-icon" import { Icon } from "@opencode-ai/ui/icon" import { IconButton } from "@opencode-ai/ui/icon-button" +import { createAnimatedPresence } from "@/runtime/animated-presence" import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { useI18n } from "@opencode-ai/ui/context/i18n" import { Button } from "@opencode-ai/ui/button" @@ -716,16 +717,23 @@ function ComposerEditorAlternateDelivery(props: { controller: ComposerEditorMode if (queue.editing()) return "steer" as const return queue.alternate() }) + const [button, setButton] = createSignal() + const presence = createAnimatedPresence(action, () => button() ?? null) return ( - + {(delivery) => (