From cc554b25fd69aece2f42dee2850e0d2aa59c2cac Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 28 Jul 2026 14:26:31 +0800 Subject: [PATCH 1/3] refactor: extract SubtitleModeSwitch/PositionSelector/EffectButtons from SubtitleStylePanel Extract button group components from the subtitle style panel. Main file reduces from 190 to 149 lines (-22%). - SubtitleModeSwitch: manual/ASR mode toggle - SubtitlePositionSelector: 9-position button grid - SubtitleEffectButtons: stroke/shadow toggles --- .../components/SubtitleStylePanel.tsx | 72 ++++--------------- .../subtitle-style/SubtitleEffectButtons.tsx | 32 +++++++++ .../subtitle-style/SubtitleModeSwitch.tsx | 25 +++++++ .../SubtitlePositionSelector.tsx | 27 +++++++ 4 files changed, 98 insertions(+), 58 deletions(-) mode change 100644 => 100755 apps/web/src/pages/editing-planner/components/SubtitleStylePanel.tsx create mode 100755 apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons.tsx create mode 100755 apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch.tsx create mode 100755 apps/web/src/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector.tsx diff --git a/apps/web/src/pages/editing-planner/components/SubtitleStylePanel.tsx b/apps/web/src/pages/editing-planner/components/SubtitleStylePanel.tsx old mode 100644 new mode 100755 index 017566089..18511651d --- a/apps/web/src/pages/editing-planner/components/SubtitleStylePanel.tsx +++ b/apps/web/src/pages/editing-planner/components/SubtitleStylePanel.tsx @@ -1,18 +1,16 @@ -/** - * 字幕样式配置面板 — Drawer 形式 - * 字幕开关(手动 / ASR 自动识别)、字体大小、颜色、描边/阴影、位置、ASR 语言 - */ import React from "react" import { Drawer, Slider, ColorPicker, Select } from "antd" import type { Color } from "antd/es/color-picker" import type { SubtitleStyleConfig } from "@/pages/editing-planner/types/subtitle" import { - POSITION_OPTIONS, FONT_OPTIONS, ANIMATION_OPTIONS, ASR_LANGUAGE_OPTIONS, } from "@/pages/editing-planner/constants/subtitleStyle" import SubtitlePreview from "./subtitle-style/SubtitlePreview" +import { SubtitleModeSwitch } from "./subtitle-style/SubtitleModeSwitch" +import { SubtitlePositionSelector } from "./subtitle-style/SubtitlePositionSelector" +import { SubtitleEffectButtons } from "./subtitle-style/SubtitleEffectButtons" interface SubtitleStylePanelProps { open: boolean @@ -40,7 +38,6 @@ const SubtitleStylePanel: React.FC = ({ onClose={onClose} className="subtitle-style-drawer" > - {/* ── 字幕开关 ── */}
启用字幕 @@ -55,26 +52,11 @@ const SubtitleStylePanel: React.FC = ({ {config.enabled && ( <> - {/* ── 模式切换 ── */}
-
- - -
+ update({ mode })} />
- {/* ── ASR 语言(仅 ASR 模式) ── */} {config.mode === "asr" && (
@@ -88,7 +70,6 @@ const SubtitleStylePanel: React.FC = ({
)} - {/* ── 字体大小 ── */}
- {/* ── 字体颜色 ── */}
@@ -113,7 +93,6 @@ const SubtitleStylePanel: React.FC = ({
- {/* ── 字体 ── */}
= ({ />
- {/* ── 预览 ── */} )} diff --git a/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons.tsx b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons.tsx new file mode 100755 index 000000000..d12d94991 --- /dev/null +++ b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons.tsx @@ -0,0 +1,32 @@ +import React from "react" + +interface SubtitleEffectButtonsProps { + stroke: boolean + shadow: boolean + onStrokeChange: (enabled: boolean) => void + onShadowChange: (enabled: boolean) => void +} + +export const SubtitleEffectButtons: React.FC = ({ + stroke, + shadow, + onStrokeChange, + onShadowChange, +}) => { + return ( +
+ + +
+ ) +} diff --git a/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch.tsx b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch.tsx new file mode 100755 index 000000000..a1c5a9bd4 --- /dev/null +++ b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch.tsx @@ -0,0 +1,25 @@ +import React from "react" + +interface SubtitleModeSwitchProps { + mode: "manual" | "asr" + onModeChange: (mode: "manual" | "asr") => void +} + +export const SubtitleModeSwitch: React.FC = ({ mode, onModeChange }) => { + return ( +
+ + +
+ ) +} diff --git a/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector.tsx b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector.tsx new file mode 100755 index 000000000..38a07c11b --- /dev/null +++ b/apps/web/src/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector.tsx @@ -0,0 +1,27 @@ +import React from "react" +import type { SubtitleStyleConfig } from "@/pages/editing-planner/types/subtitle" +import { POSITION_OPTIONS } from "@/pages/editing-planner/constants/subtitleStyle" + +interface SubtitlePositionSelectorProps { + position: SubtitleStyleConfig["position"] + onPositionChange: (position: SubtitleStyleConfig["position"]) => void +} + +export const SubtitlePositionSelector: React.FC = ({ + position, + onPositionChange, +}) => { + return ( +
+ {POSITION_OPTIONS.map((opt) => ( + + ))} +
+ ) +} -- 2.54.0 From b7fcb4835c8b6800d83ef7a27f85216b153e9ad7 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 17:14:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20useVoiceMateria?= =?UTF-8?q?lActions=20types=20=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hooks/useVoiceMaterials/useVoiceMaterialActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialActions.ts b/apps/web/src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialActions.ts index 37dbb1dd5..c8746a3f4 100755 --- a/apps/web/src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialActions.ts +++ b/apps/web/src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialActions.ts @@ -1,5 +1,5 @@ import { useState } from "react" -import { type VoiceMaterial } from "../../../types" +import { type VoiceMaterial } from "../../types" import { type AssetLibraryItem } from "@/api/assets" import { useVoiceUpload } from "./actions/useVoiceUpload" import { useVoiceEdit } from "./actions/useVoiceEdit" -- 2.54.0 From e3ee13b46be81f9590753ea0f507f486b5dac552 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 29 Jul 2026 17:23:43 +0800 Subject: [PATCH 3/3] =?UTF-8?q?test:=20=E8=A1=A5=E5=85=85subtitle-style?= =?UTF-8?q?=E5=AD=90=E7=BB=84=E4=BB=B6smoke=E6=B5=8B=E8=AF=95=E5=BC=95?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/src/test/pages/editing-planner/smoke.test.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/web/src/test/pages/editing-planner/smoke.test.tsx b/apps/web/src/test/pages/editing-planner/smoke.test.tsx index c4d3f267c..d5826349e 100644 --- a/apps/web/src/test/pages/editing-planner/smoke.test.tsx +++ b/apps/web/src/test/pages/editing-planner/smoke.test.tsx @@ -65,6 +65,9 @@ import "@/pages/editing-planner/components/filter/FilterPresetGrid" import "@/pages/editing-planner/components/filter/FilterManualAdjust" import "@/pages/editing-planner/components/intro-outro/IntroOutroBlock" import "@/pages/editing-planner/components/subtitle-style/SubtitlePreview" +import "@/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch" +import "@/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector" +import "@/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons" import "@/pages/editing-planner/components/tts/VoiceSelector" import "@/pages/editing-planner/components/tts/TtsSlider" import "@/pages/editing-planner/components/watermark/WatermarkTypeTabs" -- 2.54.0