From e0c2d4a32d562e2920b7d93f41a5d5734d4de924 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 11 Jul 2026 20:27:20 +0000 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=BA=20prompt=20input=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20border-beam=20pulse-inner=20=E5=91=BC=E5=90=B8?= =?UTF-8?q?=E5=85=89=E6=99=95=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按 https://beam.jakubantalik.com/pulse 的 UI 风格,用 border-beam 的 pulse-inner 变体包裹 composer 外壳:彩色光晕贴着输入框内侧四周弥散、 缓慢呼吸。新增 ComposerBeam 包装组件,跟随 next-themes 的明暗主题, 并做了 SSR hydration 门控;wrapper 的 overflow:hidden 会裁掉外壳投影, 故将浅色模式投影上移到 wrapper。 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01DwZ3V6EaT97mtczZaqa2LJ --- components/assistant-ui/composer-beam.tsx | 35 +++++++++++++++++++++++ components/assistant-ui/thread.tsx | 5 +++- components/examples/base.tsx | 3 ++ package.json | 1 + pnpm-lock.yaml | 14 +++++++++ 5 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 components/assistant-ui/composer-beam.tsx diff --git a/components/assistant-ui/composer-beam.tsx b/components/assistant-ui/composer-beam.tsx new file mode 100644 index 00000000..da2a5996 --- /dev/null +++ b/components/assistant-ui/composer-beam.tsx @@ -0,0 +1,35 @@ +"use client" + +import { useEffect, useState, type FC, type ReactNode } from "react" +import { BorderBeam } from "border-beam" +import { useTheme } from "next-themes" + +/** + * 用 border-beam 的 pulse-inner 呼吸光晕包裹 composer 外壳, + * 复刻 https://beam.jakubantalik.com/pulse 的光影效果: + * 彩色光晕贴着输入框内侧四周弥散、缓慢呼吸(裁剪在边框以内), + * 而非仅沿边框流动的一条光线。 + * 圆角由组件自动探测子元素的 border-radius(--composer-radius)。 + */ +export const ComposerBeam: FC<{ children: ReactNode }> = ({ children }) => { + const { resolvedTheme } = useTheme() + + // SSR 时 resolvedTheme 为 undefined,客户端首帧可能已解析出 light, + // 直接使用会导致 BorderBeam 内联