From b79f72391ba95d85c3e1dedb0c2109b28b719b91 Mon Sep 17 00:00:00 2001 From: Linghong Date: Thu, 6 Aug 2026 08:44:26 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96BGM=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按设计稿重排 BGM composer 的控件布局,并统一输入框行为。 - 字数计数移到「预设」标题行右端,与预设展开控件同排 - AI补全 / 一键简化 / 撤销 移入底部行,与 Suno、生成同区域 - 助手按钮补图标并压回 2.25rem 高度与胶囊圆角;shape="pill" 与 size="xs" 走的是 Tailwind 分层 utility,压不过未分层的 .platform-button,因此显式写死 - 预设展开 / 收起改为裸 chevron 图标按钮,可访问名由 aria-label 承担 - 预设滚动箭头去边框,hover 才出淡底 - BGM footer 改 flex 并作用域隔离,共享的 5 列 grid 不受影响 - 生成按钮收到 2.25rem,样式、文案与泥点角标保持不变 - 面板 min-height 归零并移除多余显式行,消除收起预设时的空白 - 输入框改用 AutoGrowTextArea,与生图 / 生视频 / 角色 / 图标同源, 53.6px 起自动增高至 128px 后内滚 交互逻辑未改动。 Co-Authored-By: Claude Opus 5 --- ...mageCanvasBackgroundMusicPresetMarquee.tsx | 20 ++- ...ImageCanvasGenerationComposerView.test.tsx | 15 +- .../ImageCanvasGenerationComposerView.tsx | 165 +++++++++++------- src/index.css | 142 ++++++++++++++- 4 files changed, 267 insertions(+), 75 deletions(-) diff --git a/src/components/image-editor/ImageCanvasBackgroundMusicPresetMarquee.tsx b/src/components/image-editor/ImageCanvasBackgroundMusicPresetMarquee.tsx index ff4af6791..750b46669 100644 --- a/src/components/image-editor/ImageCanvasBackgroundMusicPresetMarquee.tsx +++ b/src/components/image-editor/ImageCanvasBackgroundMusicPresetMarquee.tsx @@ -1,6 +1,12 @@ -import { ChevronLeft, ChevronRight } from 'lucide-react'; +import { + ChevronDown, + ChevronLeft, + ChevronRight, + ChevronUp, +} from 'lucide-react'; import { type PointerEvent as ReactPointerEvent, + type ReactNode, useCallback, useEffect, useId, @@ -77,10 +83,13 @@ export function ImageCanvasBackgroundMusicPresetMarquee({ presets, isLocked, onSelectPreset, + headerTrailing, }: { presets: readonly BackgroundMusicPromptPreset[]; isLocked: boolean; onSelectPreset: (preset: BackgroundMusicPromptPreset) => void; + /** 标题行右端的展示位。字数计数要和「预设」同排,但它属于 composer 的状态。 */ + headerTrailing?: ReactNode; }) { const trackId = useId(); const [isExpanded, setIsExpanded] = useState(false); @@ -325,13 +334,20 @@ export function ImageCanvasBackgroundMusicPresetMarquee({ size="xs" shape="pill" className="image-canvas-editor__background-music-presets-toggle" + // 图标化后文案不再进入可访问名,必须由 aria-label 承担。 + aria-label={isExpanded ? '收起' : '展开'} aria-expanded={isExpanded} aria-controls={trackId} disabled={isLocked} onClick={() => setIsExpanded((expanded) => !expanded)} > - {isExpanded ? '收起' : '展开'} + {isExpanded ? ( +