import { Ionicons } from "@expo/vector-icons"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Platform, Switch, View, type ViewProps } from "react-native"; import { Stepper } from "@/components/inputs/Stepper"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; import { PlatformDropdown } from "../PlatformDropdown"; import { useMedia } from "./MediaContext"; interface Props extends ViewProps {} type AlignX = "left" | "center" | "right"; type AlignY = "top" | "center" | "bottom"; export const MpvSubtitleSettings: React.FC = ({ ...props }) => { const isTv = Platform.isTV; const media = useMedia(); const { settings, updateSettings } = media; const { t } = useTranslation(); const alignXOptions: AlignX[] = ["left", "center", "right"]; const alignYOptions: AlignY[] = ["top", "center", "bottom"]; const alignXLabels: Record = { left: t("home.settings.subtitles.align.left"), center: t("home.settings.subtitles.align.center"), right: t("home.settings.subtitles.align.right"), }; const alignYLabels: Record = { top: t("home.settings.subtitles.align.top"), center: t("home.settings.subtitles.align.center"), bottom: t("home.settings.subtitles.align.bottom"), }; const alignXOptionGroups = useMemo(() => { const options = alignXOptions.map((align) => ({ type: "radio" as const, label: alignXLabels[align], value: align, selected: align === (settings?.mpvSubtitleAlignX ?? "center"), onPress: () => updateSettings({ mpvSubtitleAlignX: align }), })); return [{ options }]; }, [settings?.mpvSubtitleAlignX, updateSettings]); const alignYOptionGroups = useMemo(() => { const options = alignYOptions.map((align) => ({ type: "radio" as const, label: alignYLabels[align], value: align, selected: align === (settings?.mpvSubtitleAlignY ?? "bottom"), onPress: () => updateSettings({ mpvSubtitleAlignY: align }), })); return [{ options }]; }, [settings?.mpvSubtitleAlignY, updateSettings]); if (!settings) return null; return ( {t("home.settings.subtitles.mpv_settings_description")} } > {!isTv && ( <> updateSettings({ mpvSubtitleMarginY: value }) } /> {alignXLabels[settings?.mpvSubtitleAlignX ?? "center"]} } title={t("home.settings.subtitles.mpv_subtitle_align_x")} /> {alignYLabels[settings?.mpvSubtitleAlignY ?? "bottom"]} } title={t("home.settings.subtitles.mpv_subtitle_align_y")} /> )} updateSettings({ mpvSubtitleBackgroundEnabled: value }) } /> {settings.mpvSubtitleBackgroundEnabled && ( updateSettings({ mpvSubtitleBackgroundOpacity: value }) } /> )} ); };