UNPKG

@zezosoft/zezo-ott-react-native-video-player

Version:

React Native OTT Video Player for Android & iOS. Supports playlists, seasons, auto-next playback, subtitles, theming, analytics, fullscreen mode, and custom controls. 🚀 Powered by ZezoSoft.

140 lines (135 loc) • 3.19 kB
"use strict"; import React, { useMemo } from 'react'; import { FlatList, TouchableOpacity, View, StyleSheet, Text } from 'react-native'; import { verticalScale } from 'react-native-size-matters'; import { RFValue } from 'react-native-responsive-fontsize'; import { useVideoPlayerStore } from "../store/videoPlayerStore.js"; import globalStyles from "../Styles/globalStyles.js"; import { useVideoPlayerConfig } from "../context/index.js"; // --- Constants --- import { jsx as _jsx } from "react/jsx-runtime"; const SPEED_OPTIONS = [{ name: '0.25x', value: 0.25 }, { name: '0.5x', value: 0.5 }, { name: '0.75x', value: 0.75 }, { name: 'Normal', value: 1 }, { name: '1.25x', value: 1.25 }, { name: '1.5x', value: 1.5 }, { name: '1.75x', value: 1.75 }, { name: '2x', value: 2 }]; // --- UI Components --- const ListHeader = () => /*#__PURE__*/_jsx(View, { style: styles.listHeader }); const ListFooter = () => /*#__PURE__*/_jsx(View, { style: styles.listFooter }); const SpeedItem = ({ name, value, isSelected, onPress, colors }) => /*#__PURE__*/_jsx(TouchableOpacity, { onPress: () => onPress({ value, name }), style: styles.itemTouchable, activeOpacity: 0.7, children: /*#__PURE__*/_jsx(Text, { style: [styles.itemText, { color: colors.text }, isSelected ? styles.itemTextSelected : styles.itemTextUnselected], children: name }) }); // --- Main Component --- const SpeedControls = () => { const { setIsPaused, playBackRate, setPlayBackRate, setControlsVisible, setSettingsModal } = useVideoPlayerStore(); const { colors } = useVideoPlayerConfig(); const speeds = useMemo(() => SPEED_OPTIONS, []); const handleSelectSpeed = (value, name) => { setPlayBackRate(value, name); setSettingsModal({ action: 'none', isVisible: false }); setControlsVisible(true); setIsPaused(false); }; return /*#__PURE__*/_jsx(View, { style: globalStyles.flexOneJustifyContentCenterAndAlignItemsCenter, children: /*#__PURE__*/_jsx(FlatList, { data: speeds, showsVerticalScrollIndicator: false, keyExtractor: item => item.name, ListHeaderComponent: ListHeader, ListFooterComponent: ListFooter, renderItem: ({ item }) => /*#__PURE__*/_jsx(SpeedItem, { name: item.name, value: item.value, isSelected: playBackRate === item.value, onPress: ({ value, name }) => handleSelectSpeed(value, name), colors: colors }) }) }); }; export default SpeedControls; // --- Styles --- const styles = StyleSheet.create({ listHeader: { height: verticalScale(20) }, listFooter: { height: verticalScale(50) }, itemTouchable: { paddingVertical: verticalScale(12), paddingHorizontal: verticalScale(30), alignItems: 'center' }, itemText: { textAlign: 'center', fontSize: RFValue(17), // better readability fontWeight: '600' // semi-bold for better emphasis }, itemTextSelected: { opacity: 1 }, itemTextUnselected: { opacity: 0.6 } }); //# sourceMappingURL=SpeedControls.js.map