react-native-video-provider 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ import { formatTime } from "../utils/formatTime.js";
8
8
  import { GestureOverlay } from "./GestureOverlay.js";
9
9
  import { CloseIcon } from "./icons.js";
10
10
  import SvgIcons from "./SvgIcons.js";
11
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
12
  /**
13
13
  * Minimal built-in chrome: play/pause, seek bar, time, mute and fullscreen
14
14
  * toggles, with tap-to-show / double-tap-to-seek gestures. Apps wanting a
@@ -21,12 +21,18 @@ export function VideoControls({
21
21
  onClose
22
22
  }) {
23
23
  const manager = useVideoManager();
24
+ const status = usePlayback(s => s.status);
24
25
  const playing = usePlayback(s => s.playing);
25
26
  const buffering = usePlayback(s => s.buffering);
27
+ const loading = usePlayback(s => s.loading);
26
28
  const position = usePlayback(s => s.position);
27
29
  const duration = usePlayback(s => s.duration);
28
30
  const muted = usePlayback(s => s.muted);
29
31
  const fullscreen = usePlayback(s => s.fullscreen);
32
+
33
+ // No known duration once loaded — a live stream or a video with no fixed
34
+ // end. There's nothing to seek, so hide the seek bar entirely.
35
+ const live = status !== 'idle' && !loading && duration <= 0;
30
36
  const [visible, setVisible] = useState(true);
31
37
  const hideTimer = useRef(null);
32
38
  const trackWidth = useRef(0);
@@ -58,6 +64,36 @@ export function VideoControls({
58
64
  scheduleHide();
59
65
  }, [manager, duration, scheduleHide]);
60
66
  const progress = duration > 0 ? Math.min(position / duration, 1) : 0;
67
+ const muteButton = /*#__PURE__*/_jsx(Pressable, {
68
+ style: styles.button,
69
+ onPress: () => muted ? manager.unmute() : manager.mute(),
70
+ hitSlop: 8,
71
+ children: muted ? /*#__PURE__*/_jsx(SvgIcons, {
72
+ icon: "muteUnmute",
73
+ size: 18,
74
+ fill: "#fff"
75
+ }) : /*#__PURE__*/_jsx(SvgIcons, {
76
+ icon: "muteUnmute",
77
+ type: "mute",
78
+ size: 18,
79
+ fill: "#fff"
80
+ })
81
+ });
82
+ const fullscreenButton = showFullscreenButton ? /*#__PURE__*/_jsx(Pressable, {
83
+ style: styles.button,
84
+ onPress: () => manager.toggleFullscreen(),
85
+ hitSlop: 8,
86
+ children: fullscreen ? /*#__PURE__*/_jsx(SvgIcons, {
87
+ icon: "fullScreen",
88
+ size: 18,
89
+ fill: "#fff"
90
+ }) : /*#__PURE__*/_jsx(SvgIcons, {
91
+ icon: "fullScreen",
92
+ type: "full",
93
+ size: 18,
94
+ fill: "#fff"
95
+ })
96
+ }) : null;
61
97
  return /*#__PURE__*/_jsxs(View, {
62
98
  style: StyleSheet.absoluteFill,
63
99
  pointerEvents: "box-none",
@@ -78,22 +114,7 @@ export function VideoControls({
78
114
  size: 18,
79
115
  color: "#fff"
80
116
  })
81
- }) : /*#__PURE__*/_jsx(View, {}), /*#__PURE__*/_jsx(Pressable, {
82
- style: styles.button,
83
- onPress: () => muted ? manager.unmute() : manager.mute(),
84
- hitSlop: 8,
85
- children: muted ? /*#__PURE__*/_jsx(SvgIcons, {
86
- icon: "muteUnmute",
87
- type: "mute",
88
- size: 18,
89
- fill: "#fff"
90
- }) : /*#__PURE__*/_jsx(SvgIcons, {
91
- icon: "muteUnmute",
92
- type: "unmute",
93
- size: 18,
94
- fill: "#fff"
95
- })
96
- })]
117
+ }) : /*#__PURE__*/_jsx(View, {}), !live ? muteButton : /*#__PURE__*/_jsx(View, {})]
97
118
  }), /*#__PURE__*/_jsx(Pressable, {
98
119
  style: styles.playButton,
99
120
  onPress: () => {
@@ -115,40 +136,32 @@ export function VideoControls({
115
136
  size: 34,
116
137
  fill: "#fff"
117
138
  })
118
- }), /*#__PURE__*/_jsxs(View, {
139
+ }), /*#__PURE__*/_jsx(View, {
119
140
  style: styles.bottomRow,
120
- children: [/*#__PURE__*/_jsx(Text, {
121
- style: styles.time,
122
- children: formatTime(position)
123
- }), /*#__PURE__*/_jsxs(Pressable, {
124
- style: styles.track,
125
- onLayout: onTrackLayout,
126
- onPress: onTrackPress,
127
- children: [/*#__PURE__*/_jsx(View, {
128
- style: styles.trackBg
129
- }), /*#__PURE__*/_jsx(View, {
130
- style: [styles.trackFill, {
131
- width: `${progress * 100}%`
132
- }]
133
- })]
134
- }), /*#__PURE__*/_jsx(Text, {
135
- style: styles.time,
136
- children: formatTime(duration)
137
- }), showFullscreenButton ? /*#__PURE__*/_jsx(Pressable, {
138
- style: styles.button,
139
- onPress: () => manager.toggleFullscreen(),
140
- hitSlop: 8,
141
- children: fullscreen ? /*#__PURE__*/_jsx(SvgIcons, {
142
- icon: "fullScreen",
143
- size: 18,
144
- fill: "#fff"
145
- }) : /*#__PURE__*/_jsx(SvgIcons, {
146
- icon: "fullScreen",
147
- type: "full",
148
- size: 18,
149
- fill: "#fff"
150
- })
151
- }) : null]
141
+ children: live ? /*#__PURE__*/_jsxs(_Fragment, {
142
+ children: [muteButton, /*#__PURE__*/_jsx(View, {
143
+ style: styles.spacer
144
+ }), fullscreenButton]
145
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
146
+ children: [/*#__PURE__*/_jsx(Text, {
147
+ style: styles.time,
148
+ children: formatTime(position)
149
+ }), /*#__PURE__*/_jsxs(Pressable, {
150
+ style: styles.track,
151
+ onLayout: onTrackLayout,
152
+ onPress: onTrackPress,
153
+ children: [/*#__PURE__*/_jsx(View, {
154
+ style: styles.trackBg
155
+ }), /*#__PURE__*/_jsx(View, {
156
+ style: [styles.trackFill, {
157
+ width: `${progress * 100}%`
158
+ }]
159
+ })]
160
+ }), /*#__PURE__*/_jsx(Text, {
161
+ style: styles.time,
162
+ children: formatTime(duration)
163
+ }), fullscreenButton]
164
+ })
152
165
  })]
153
166
  }) : null]
154
167
  });
@@ -192,6 +205,9 @@ const styles = StyleSheet.create({
192
205
  height: 24,
193
206
  justifyContent: 'center'
194
207
  },
208
+ spacer: {
209
+ flex: 1
210
+ },
195
211
  trackBg: {
196
212
  position: 'absolute',
197
213
  left: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useState","Pressable","StyleSheet","Text","View","useVideoManager","usePlayback","formatTime","GestureOverlay","CloseIcon","SvgIcons","jsx","_jsx","jsxs","_jsxs","VideoControls","doubleTapSeek","hideAfter","showFullscreenButton","onClose","manager","playing","s","buffering","position","duration","muted","fullscreen","visible","setVisible","hideTimer","trackWidth","scheduleHide","current","clearTimeout","setTimeout","toggleVisible","v","onTrackLayout","e","nativeEvent","layout","width","onTrackPress","ratio","locationX","seek","progress","Math","min","style","absoluteFill","pointerEvents","children","onSingleTap","onDoubleTapLeft","seekBy","onDoubleTapRight","styles","chrome","topRow","button","onPress","hitSlop","size","color","unmute","mute","icon","type","fill","playButton","toggle","playIcon","bottomRow","time","track","onLayout","trackBg","trackFill","toggleFullscreen","create","top","left","right","bottom","backgroundColor","justifyContent","flexDirection","padding","alignSelf","fontSize","alignItems","paddingHorizontal","paddingBottom","gap","fontVariant","flex","height","borderRadius"],"sourceRoot":"../../../src","sources":["components/VideoControls.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useState","Pressable","StyleSheet","Text","View","useVideoManager","usePlayback","formatTime","GestureOverlay","CloseIcon","SvgIcons","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","VideoControls","doubleTapSeek","hideAfter","showFullscreenButton","onClose","manager","status","s","playing","buffering","loading","position","duration","muted","fullscreen","live","visible","setVisible","hideTimer","trackWidth","scheduleHide","current","clearTimeout","setTimeout","toggleVisible","v","onTrackLayout","e","nativeEvent","layout","width","onTrackPress","ratio","locationX","seek","progress","Math","min","muteButton","style","styles","button","onPress","unmute","mute","hitSlop","children","icon","size","fill","type","fullscreenButton","toggleFullscreen","absoluteFill","pointerEvents","onSingleTap","onDoubleTapLeft","seekBy","onDoubleTapRight","chrome","topRow","color","playButton","toggle","playIcon","bottomRow","spacer","time","track","onLayout","trackBg","trackFill","create","top","left","right","bottom","backgroundColor","justifyContent","flexDirection","padding","alignSelf","fontSize","alignItems","paddingHorizontal","paddingBottom","gap","fontVariant","flex","height","borderRadius"],"sourceRoot":"../../../src","sources":["components/VideoControls.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"VideoControls.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoControls.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,aAAkB,EAClB,SAAgB,EAChB,oBAA2B,EAC3B,OAAO,GACR,EAAE,kBAAkB,+BA0IpB"}
1
+ {"version":3,"file":"VideoControls.d.ts","sourceRoot":"","sources":["../../../../src/components/VideoControls.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,aAAkB,EAClB,SAAgB,EAChB,oBAA2B,EAC3B,OAAO,GACR,EAAE,kBAAkB,+BAsJpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-video-provider",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Singleton-engine video library for React Native (one native player, many surfaces)",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -37,13 +37,19 @@ export function VideoControls({
37
37
  onClose,
38
38
  }: VideoControlsProps) {
39
39
  const manager = useVideoManager();
40
+ const status = usePlayback((s) => s.status);
40
41
  const playing = usePlayback((s) => s.playing);
41
42
  const buffering = usePlayback((s) => s.buffering);
43
+ const loading = usePlayback((s) => s.loading);
42
44
  const position = usePlayback((s) => s.position);
43
45
  const duration = usePlayback((s) => s.duration);
44
46
  const muted = usePlayback((s) => s.muted);
45
47
  const fullscreen = usePlayback((s) => s.fullscreen);
46
48
 
49
+ // No known duration once loaded — a live stream or a video with no fixed
50
+ // end. There's nothing to seek, so hide the seek bar entirely.
51
+ const live = status !== 'idle' && !loading && duration <= 0;
52
+
47
53
  const [visible, setVisible] = useState(true);
48
54
  const hideTimer = useRef<ReturnType<typeof setTimeout> | null>(null);
49
55
  const trackWidth = useRef(0);
@@ -85,6 +91,34 @@ export function VideoControls({
85
91
 
86
92
  const progress = duration > 0 ? Math.min(position / duration, 1) : 0;
87
93
 
94
+ const muteButton = (
95
+ <Pressable
96
+ style={styles.button}
97
+ onPress={() => (muted ? manager.unmute() : manager.mute())}
98
+ hitSlop={8}
99
+ >
100
+ {muted ? (
101
+ <SvgIcons icon="muteUnmute" size={18} fill="#fff" />
102
+ ) : (
103
+ <SvgIcons icon="muteUnmute" type="mute" size={18} fill="#fff" />
104
+ )}
105
+ </Pressable>
106
+ );
107
+
108
+ const fullscreenButton = showFullscreenButton ? (
109
+ <Pressable
110
+ style={styles.button}
111
+ onPress={() => manager.toggleFullscreen()}
112
+ hitSlop={8}
113
+ >
114
+ {fullscreen ? (
115
+ <SvgIcons icon="fullScreen" size={18} fill="#fff" />
116
+ ) : (
117
+ <SvgIcons icon="fullScreen" type="full" size={18} fill="#fff" />
118
+ )}
119
+ </Pressable>
120
+ ) : null;
121
+
88
122
  return (
89
123
  <View style={StyleSheet.absoluteFill} pointerEvents="box-none">
90
124
  <GestureOverlay
@@ -102,22 +136,7 @@ export function VideoControls({
102
136
  ) : (
103
137
  <View />
104
138
  )}
105
- <Pressable
106
- style={styles.button}
107
- onPress={() => (muted ? manager.unmute() : manager.mute())}
108
- hitSlop={8}
109
- >
110
- {muted ? (
111
- <SvgIcons icon="muteUnmute" type="mute" size={18} fill="#fff" />
112
- ) : (
113
- <SvgIcons
114
- icon="muteUnmute"
115
- type="unmute"
116
- size={18}
117
- fill="#fff"
118
- />
119
- )}
120
- </Pressable>
139
+ {!live ? muteButton : <View />}
121
140
  </View>
122
141
 
123
142
  <Pressable
@@ -138,36 +157,29 @@ export function VideoControls({
138
157
  </Pressable>
139
158
 
140
159
  <View style={styles.bottomRow}>
141
- <Text style={styles.time}>{formatTime(position)}</Text>
142
- <Pressable
143
- style={styles.track}
144
- onLayout={onTrackLayout}
145
- onPress={onTrackPress}
146
- >
147
- <View style={styles.trackBg} />
148
- <View
149
- style={[styles.trackFill, { width: `${progress * 100}%` }]}
150
- />
151
- </Pressable>
152
- <Text style={styles.time}>{formatTime(duration)}</Text>
153
- {showFullscreenButton ? (
154
- <Pressable
155
- style={styles.button}
156
- onPress={() => manager.toggleFullscreen()}
157
- hitSlop={8}
158
- >
159
- {fullscreen ? (
160
- <SvgIcons icon="fullScreen" size={18} fill="#fff" />
161
- ) : (
162
- <SvgIcons
163
- icon="fullScreen"
164
- type="full"
165
- size={18}
166
- fill="#fff"
160
+ {live ? (
161
+ <>
162
+ {muteButton}
163
+ <View style={styles.spacer} />
164
+ {fullscreenButton}
165
+ </>
166
+ ) : (
167
+ <>
168
+ <Text style={styles.time}>{formatTime(position)}</Text>
169
+ <Pressable
170
+ style={styles.track}
171
+ onLayout={onTrackLayout}
172
+ onPress={onTrackPress}
173
+ >
174
+ <View style={styles.trackBg} />
175
+ <View
176
+ style={[styles.trackFill, { width: `${progress * 100}%` }]}
167
177
  />
168
- )}
169
- </Pressable>
170
- ) : null}
178
+ </Pressable>
179
+ <Text style={styles.time}>{formatTime(duration)}</Text>
180
+ {fullscreenButton}
181
+ </>
182
+ )}
171
183
  </View>
172
184
  </View>
173
185
  ) : null}
@@ -214,6 +226,9 @@ const styles = StyleSheet.create({
214
226
  height: 24,
215
227
  justifyContent: 'center',
216
228
  },
229
+ spacer: {
230
+ flex: 1,
231
+ },
217
232
  trackBg: {
218
233
  position: 'absolute',
219
234
  left: 0,