From cc554b25fd69aece2f42dee2850e0d2aa59c2cac Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Tue, 28 Jul 2026 14:26:31 +0800 Subject: [PATCH] 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) => ( + + ))} +
+ ) +}