import { Ionicons } from "@expo/vector-icons"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Platform, 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("player.alignment_left"), center: t("player.alignment_center"), right: t("player.alignment_right"), }; const alignYLabels: Record = { top: t("player.alignment_top"), center: t("player.alignment_center"), bottom: t("player.alignment_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 (isTv) return null; if (!settings) return null; return ( {t("player.mpv_subtitle_settings_description")} } > updateSettings({ mpvSubtitleScale: Math.round(value * 10) / 10 }) } /> updateSettings({ mpvSubtitleMarginY: value })} /> {alignXLabels[settings?.mpvSubtitleAlignX ?? "center"]} } title={t("player.horizontal_alignment")} /> {alignYLabels[settings?.mpvSubtitleAlignY ?? "bottom"]} } title={t("player.vertical_alignment")} /> ); };