import { Ionicons } from "@expo/vector-icons"; import { useMemo } from "react"; 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 alignXOptions: AlignX[] = ["left", "center", "right"]; const alignYOptions: AlignY[] = ["top", "center", "bottom"]; const alignXLabels: Record = { left: "Left", center: "Center", right: "Right", }; const alignYLabels: Record = { top: "Top", center: "Center", bottom: "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 ( Advanced subtitle customization for MPV player } > updateSettings({ mpvSubtitleScale: Math.round(value * 10) / 10 }) } /> updateSettings({ mpvSubtitleMarginY: value })} /> {alignXLabels[settings?.mpvSubtitleAlignX ?? "center"]} } title='Horizontal Alignment' /> {alignYLabels[settings?.mpvSubtitleAlignY ?? "bottom"]} } title='Vertical Alignment' /> ); };