@venomousone/rn-videokit 0.1.0
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.
- package/LICENSE +20 -0
- package/README.md +248 -0
- package/lib/module/components/VideoKit.js +347 -0
- package/lib/module/components/VideoKit.js.map +1 -0
- package/lib/module/components/controls/FullscreenButton.js +38 -0
- package/lib/module/components/controls/FullscreenButton.js.map +1 -0
- package/lib/module/components/controls/Icon.js +71 -0
- package/lib/module/components/controls/Icon.js.map +1 -0
- package/lib/module/components/controls/PlayPauseButton.js +33 -0
- package/lib/module/components/controls/PlayPauseButton.js.map +1 -0
- package/lib/module/components/controls/Scrubber.js +146 -0
- package/lib/module/components/controls/Scrubber.js.map +1 -0
- package/lib/module/components/controls/SpeedButton.js +96 -0
- package/lib/module/components/controls/SpeedButton.js.map +1 -0
- package/lib/module/components/controls/TimeDisplay.js +28 -0
- package/lib/module/components/controls/TimeDisplay.js.map +1 -0
- package/lib/module/components/controls/VolumeButton.js +31 -0
- package/lib/module/components/controls/VolumeButton.js.map +1 -0
- package/lib/module/components/core/VideoPlayer.js +114 -0
- package/lib/module/components/core/VideoPlayer.js.map +1 -0
- package/lib/module/components/core/VideoPlayerContext.js +119 -0
- package/lib/module/components/core/VideoPlayerContext.js.map +1 -0
- package/lib/module/components/core/index.js +5 -0
- package/lib/module/components/core/index.js.map +1 -0
- package/lib/module/components/index.js +14 -0
- package/lib/module/components/index.js.map +1 -0
- package/lib/module/components/overlays/BufferingOverlay.js +24 -0
- package/lib/module/components/overlays/BufferingOverlay.js.map +1 -0
- package/lib/module/components/overlays/DoubleTapSeek.js +95 -0
- package/lib/module/components/overlays/DoubleTapSeek.js.map +1 -0
- package/lib/module/components/overlays/ErrorOverlay.js +60 -0
- package/lib/module/components/overlays/ErrorOverlay.js.map +1 -0
- package/lib/module/components/overlays/GestureIndicator.js +118 -0
- package/lib/module/components/overlays/GestureIndicator.js.map +1 -0
- package/lib/module/components/overlays/LoadingPoster.js +22 -0
- package/lib/module/components/overlays/LoadingPoster.js.map +1 -0
- package/lib/module/hooks/index.js +6 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useVideoBrightness.js +33 -0
- package/lib/module/hooks/useVideoBrightness.js.map +1 -0
- package/lib/module/hooks/useVideoControls.js +64 -0
- package/lib/module/hooks/useVideoControls.js.map +1 -0
- package/lib/module/hooks/useVideoOrientation.js +24 -0
- package/lib/module/hooks/useVideoOrientation.js.map +1 -0
- package/lib/module/hooks/useVideoPlayer.js +59 -0
- package/lib/module/hooks/useVideoPlayer.js.map +1 -0
- package/lib/module/hooks/useVideoVolume.js +42 -0
- package/lib/module/hooks/useVideoVolume.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types/index.js +4 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/clamp.js +8 -0
- package/lib/module/utils/clamp.js.map +1 -0
- package/lib/module/utils/formatTime.js +12 -0
- package/lib/module/utils/formatTime.js.map +1 -0
- package/lib/module/utils/index.js +5 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/components/VideoKit.d.ts +3 -0
- package/lib/typescript/src/components/VideoKit.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/FullscreenButton.d.ts +6 -0
- package/lib/typescript/src/components/controls/FullscreenButton.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/Icon.d.ts +10 -0
- package/lib/typescript/src/components/controls/Icon.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/PlayPauseButton.d.ts +2 -0
- package/lib/typescript/src/components/controls/PlayPauseButton.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/Scrubber.d.ts +7 -0
- package/lib/typescript/src/components/controls/Scrubber.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/SpeedButton.d.ts +2 -0
- package/lib/typescript/src/components/controls/SpeedButton.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/TimeDisplay.d.ts +2 -0
- package/lib/typescript/src/components/controls/TimeDisplay.d.ts.map +1 -0
- package/lib/typescript/src/components/controls/VolumeButton.d.ts +2 -0
- package/lib/typescript/src/components/controls/VolumeButton.d.ts.map +1 -0
- package/lib/typescript/src/components/core/VideoPlayer.d.ts +14 -0
- package/lib/typescript/src/components/core/VideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/components/core/VideoPlayerContext.d.ts +48 -0
- package/lib/typescript/src/components/core/VideoPlayerContext.d.ts.map +1 -0
- package/lib/typescript/src/components/core/index.d.ts +3 -0
- package/lib/typescript/src/components/core/index.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +6 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -0
- package/lib/typescript/src/components/overlays/BufferingOverlay.d.ts +2 -0
- package/lib/typescript/src/components/overlays/BufferingOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/overlays/DoubleTapSeek.d.ts +5 -0
- package/lib/typescript/src/components/overlays/DoubleTapSeek.d.ts.map +1 -0
- package/lib/typescript/src/components/overlays/ErrorOverlay.d.ts +6 -0
- package/lib/typescript/src/components/overlays/ErrorOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/overlays/GestureIndicator.d.ts +9 -0
- package/lib/typescript/src/components/overlays/GestureIndicator.d.ts.map +1 -0
- package/lib/typescript/src/components/overlays/LoadingPoster.d.ts +6 -0
- package/lib/typescript/src/components/overlays/LoadingPoster.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +4 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVideoBrightness.d.ts +5 -0
- package/lib/typescript/src/hooks/useVideoBrightness.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVideoControls.d.ts +11 -0
- package/lib/typescript/src/hooks/useVideoControls.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVideoOrientation.d.ts +6 -0
- package/lib/typescript/src/hooks/useVideoOrientation.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVideoPlayer.d.ts +7 -0
- package/lib/typescript/src/hooks/useVideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useVideoVolume.d.ts +6 -0
- package/lib/typescript/src/hooks/useVideoVolume.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +96 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/clamp.d.ts +2 -0
- package/lib/typescript/src/utils/clamp.d.ts.map +1 -0
- package/lib/typescript/src/utils/formatTime.d.ts +2 -0
- package/lib/typescript/src/utils/formatTime.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +3 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -0
- package/package.json +191 -0
- package/src/components/VideoKit.tsx +415 -0
- package/src/components/controls/FullscreenButton.tsx +29 -0
- package/src/components/controls/Icon.tsx +71 -0
- package/src/components/controls/PlayPauseButton.tsx +25 -0
- package/src/components/controls/Scrubber.tsx +157 -0
- package/src/components/controls/SpeedButton.tsx +86 -0
- package/src/components/controls/TimeDisplay.tsx +21 -0
- package/src/components/controls/VolumeButton.tsx +23 -0
- package/src/components/core/VideoPlayer.tsx +148 -0
- package/src/components/core/VideoPlayerContext.tsx +133 -0
- package/src/components/core/index.ts +5 -0
- package/src/components/index.ts +25 -0
- package/src/components/overlays/BufferingOverlay.tsx +21 -0
- package/src/components/overlays/DoubleTapSeek.tsx +91 -0
- package/src/components/overlays/ErrorOverlay.tsx +49 -0
- package/src/components/overlays/GestureIndicator.tsx +114 -0
- package/src/components/overlays/LoadingPoster.tsx +21 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useVideoBrightness.ts +34 -0
- package/src/hooks/useVideoControls.ts +65 -0
- package/src/hooks/useVideoOrientation.ts +22 -0
- package/src/hooks/useVideoPlayer.ts +69 -0
- package/src/hooks/useVideoVolume.ts +36 -0
- package/src/index.ts +15 -0
- package/src/types/index.ts +137 -0
- package/src/utils/clamp.ts +4 -0
- package/src/utils/formatTime.ts +9 -0
- package/src/utils/index.ts +2 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { createContext, useContext, useRef } from 'react';
|
|
4
|
+
import { useRef as useStoreRef } from 'react';
|
|
5
|
+
import { createStore, useStore } from 'zustand';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
//Theme
|
|
8
|
+
|
|
9
|
+
const ThemeContext = /*#__PURE__*/createContext({});
|
|
10
|
+
export const useVideoTheme = () => useContext(ThemeContext);
|
|
11
|
+
|
|
12
|
+
// ─── Store shape ─────────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
const initialState = {
|
|
15
|
+
status: 'idle',
|
|
16
|
+
currentTime: 0,
|
|
17
|
+
duration: 0,
|
|
18
|
+
buffered: 0,
|
|
19
|
+
muted: false,
|
|
20
|
+
speed: 1,
|
|
21
|
+
isFullscreen: false,
|
|
22
|
+
controlsVisible: true,
|
|
23
|
+
error: null
|
|
24
|
+
};
|
|
25
|
+
export const createVideoStore = () => createStore(set => ({
|
|
26
|
+
...initialState,
|
|
27
|
+
setStatus: status => set({
|
|
28
|
+
status
|
|
29
|
+
}),
|
|
30
|
+
setCurrentTime: currentTime => set({
|
|
31
|
+
currentTime
|
|
32
|
+
}),
|
|
33
|
+
setDuration: duration => set({
|
|
34
|
+
duration
|
|
35
|
+
}),
|
|
36
|
+
setBuffered: buffered => set({
|
|
37
|
+
buffered
|
|
38
|
+
}),
|
|
39
|
+
setMuted: muted => set({
|
|
40
|
+
muted
|
|
41
|
+
}),
|
|
42
|
+
setSpeed: speed => set({
|
|
43
|
+
speed
|
|
44
|
+
}),
|
|
45
|
+
setFullscreen: isFullscreen => set({
|
|
46
|
+
isFullscreen
|
|
47
|
+
}),
|
|
48
|
+
setControlsVisible: controlsVisible => set({
|
|
49
|
+
controlsVisible
|
|
50
|
+
}),
|
|
51
|
+
setError: error => set({
|
|
52
|
+
error
|
|
53
|
+
}),
|
|
54
|
+
reset: () => set(initialState)
|
|
55
|
+
}));
|
|
56
|
+
|
|
57
|
+
// ─── Context ─────────────────────────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
const VideoPlayerContext = /*#__PURE__*/createContext(null);
|
|
60
|
+
|
|
61
|
+
// ─── Provider ────────────────────────────────────────────────────────────────
|
|
62
|
+
|
|
63
|
+
export const VideoPlayerProvider = ({
|
|
64
|
+
children,
|
|
65
|
+
theme
|
|
66
|
+
}) => {
|
|
67
|
+
const videoRef = useRef(null);
|
|
68
|
+
const storeRef = useStoreRef(null);
|
|
69
|
+
|
|
70
|
+
// create the store once per provider instance
|
|
71
|
+
if (storeRef.current === null) {
|
|
72
|
+
storeRef.current = createVideoStore();
|
|
73
|
+
}
|
|
74
|
+
return /*#__PURE__*/_jsx(VideoPlayerContext.Provider, {
|
|
75
|
+
value: {
|
|
76
|
+
videoRef,
|
|
77
|
+
store: storeRef.current
|
|
78
|
+
},
|
|
79
|
+
children: /*#__PURE__*/_jsx(ThemeContext.Provider, {
|
|
80
|
+
value: theme ?? {},
|
|
81
|
+
children: children
|
|
82
|
+
})
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// ─── Hooks ───────────────────────────────────────────────────────────────────
|
|
87
|
+
|
|
88
|
+
export const useVideoPlayerContext = () => {
|
|
89
|
+
const ctx = useContext(VideoPlayerContext);
|
|
90
|
+
if (!ctx) throw new Error('useVideoPlayerContext must be used inside VideoPlayerProvider');
|
|
91
|
+
return ctx;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Scoped reactive store hook — replaces the old global useVideoStore.
|
|
96
|
+
* Use this everywhere instead of the old import.
|
|
97
|
+
*/
|
|
98
|
+
export const useVideoStore = selector => {
|
|
99
|
+
const {
|
|
100
|
+
store
|
|
101
|
+
} = useVideoPlayerContext();
|
|
102
|
+
return useStore(store, selector);
|
|
103
|
+
};
|
|
104
|
+
// export function useVideoStore<T>(selector: (state: VideoState) => T): T {
|
|
105
|
+
// const { store } = useVideoPlayerContext();
|
|
106
|
+
// return useStore(store, selector);
|
|
107
|
+
// }
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* For imperative access (getState / setState) without subscribing.
|
|
111
|
+
* Use in callbacks and gesture handlers.
|
|
112
|
+
*/
|
|
113
|
+
export const useVideoStoreApi = () => {
|
|
114
|
+
const {
|
|
115
|
+
store
|
|
116
|
+
} = useVideoPlayerContext();
|
|
117
|
+
return store;
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=VideoPlayerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useRef","useStoreRef","createStore","useStore","jsx","_jsx","ThemeContext","useVideoTheme","initialState","status","currentTime","duration","buffered","muted","speed","isFullscreen","controlsVisible","error","createVideoStore","set","setStatus","setCurrentTime","setDuration","setBuffered","setMuted","setSpeed","setFullscreen","setControlsVisible","setError","reset","VideoPlayerContext","VideoPlayerProvider","children","theme","videoRef","storeRef","current","Provider","value","store","useVideoPlayerContext","ctx","Error","useVideoStore","selector","useVideoStoreApi"],"sourceRoot":"../../../../src","sources":["components/core/VideoPlayerContext.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useVideoStore","VideoPlayerProvider","useVideoPlayerContext"],"sourceRoot":"../../../../src","sources":["components/core/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,yBAAsB;AACpD,SACEC,mBAAmB,EACnBC,qBAAqB,QAChB,yBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// ─── Main component ───────────────────────────────────────────────────────────
|
|
4
|
+
export { VideoPlayer } from "./core/VideoPlayer.js";
|
|
5
|
+
export { VideoKit } from "./VideoKit.js";
|
|
6
|
+
|
|
7
|
+
// ─── Headless hook ────────────────────────────────────────────────────────────
|
|
8
|
+
export { useVideoPlayer } from "../hooks/useVideoPlayer.js";
|
|
9
|
+
|
|
10
|
+
// ─── Context & store (for advanced usage) ────────────────────────────────────
|
|
11
|
+
export { VideoPlayerProvider, useVideoPlayerContext, useVideoStore } from "./core/VideoPlayerContext.js";
|
|
12
|
+
|
|
13
|
+
// ─── Types ────────────────────────────────────────────────────────────────────
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VideoPlayer","VideoKit","useVideoPlayer","VideoPlayerProvider","useVideoPlayerContext","useVideoStore"],"sourceRoot":"../../../src","sources":["components/index.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,QAAQ,uBAAoB;AAChD,SAASC,QAAQ,QAAQ,eAAY;;AAErC;AACA,SAASC,cAAc,QAAQ,4BAAyB;;AAExD;AACA,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,aAAa,QACR,8BAA2B;;AAElC","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ActivityIndicator, StyleSheet, View } from 'react-native';
|
|
4
|
+
import { useVideoStore } from "../core/VideoPlayerContext.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
export function BufferingOverlay() {
|
|
7
|
+
const status = useVideoStore(s => s.status);
|
|
8
|
+
if (status !== 'buffering' && status !== 'loading') return null;
|
|
9
|
+
return /*#__PURE__*/_jsx(View, {
|
|
10
|
+
style: styles.container,
|
|
11
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
12
|
+
size: "large",
|
|
13
|
+
color: "#fff"
|
|
14
|
+
})
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const styles = StyleSheet.create({
|
|
18
|
+
container: {
|
|
19
|
+
...StyleSheet.absoluteFill,
|
|
20
|
+
alignItems: 'center',
|
|
21
|
+
justifyContent: 'center'
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=BufferingOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ActivityIndicator","StyleSheet","View","useVideoStore","jsx","_jsx","BufferingOverlay","status","s","style","styles","container","children","size","color","create","absoluteFill","alignItems","justifyContent"],"sourceRoot":"../../../../src","sources":["components/overlays/BufferingOverlay.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAClE,SAASC,aAAa,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3D,OAAO,SAASC,gBAAgBA,CAAA,EAAG;EACjC,MAAMC,MAAM,GAAGJ,aAAa,CAAEK,CAAC,IAAKA,CAAC,CAACD,MAAM,CAAC;EAC7C,IAAIA,MAAM,KAAK,WAAW,IAAIA,MAAM,KAAK,SAAS,EAAE,OAAO,IAAI;EAE/D,oBACEF,IAAA,CAACH,IAAI;IAACO,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,eAC5BP,IAAA,CAACL,iBAAiB;MAACa,IAAI,EAAC,OAAO;MAACC,KAAK,EAAC;IAAM,CAAE;EAAC,CAC3C,CAAC;AAEX;AAEA,MAAMJ,MAAM,GAAGT,UAAU,CAACc,MAAM,CAAC;EAC/BJ,SAAS,EAAE;IACT,GAAGV,UAAU,CAACe,YAAY;IAC1BC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { forwardRef, useImperativeHandle, useRef, useState } from 'react';
|
|
4
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withSequence, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { scheduleOnRN } from 'react-native-worklets';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
export const DoubleTapSeek = /*#__PURE__*/forwardRef((_, ref) => {
|
|
9
|
+
const [state, setState] = useState(null);
|
|
10
|
+
const opacity = useSharedValue(0);
|
|
11
|
+
const scale = useSharedValue(0.8);
|
|
12
|
+
const timerRef = useRef(undefined);
|
|
13
|
+
const hide = () => setState(null);
|
|
14
|
+
useImperativeHandle(ref, () => ({
|
|
15
|
+
show: (side, seconds) => {
|
|
16
|
+
clearTimeout(timerRef.current);
|
|
17
|
+
setState({
|
|
18
|
+
side,
|
|
19
|
+
seconds
|
|
20
|
+
});
|
|
21
|
+
opacity.value = withSequence(withTiming(1, {
|
|
22
|
+
duration: 100
|
|
23
|
+
}), withTiming(1, {
|
|
24
|
+
duration: 400
|
|
25
|
+
}), withTiming(0, {
|
|
26
|
+
duration: 200
|
|
27
|
+
}, done => {
|
|
28
|
+
if (done) scheduleOnRN(hide);
|
|
29
|
+
}));
|
|
30
|
+
scale.value = withSequence(withTiming(1, {
|
|
31
|
+
duration: 150
|
|
32
|
+
}), withTiming(0.9, {
|
|
33
|
+
duration: 350
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
const animStyle = useAnimatedStyle(() => ({
|
|
38
|
+
opacity: opacity.value,
|
|
39
|
+
transform: [{
|
|
40
|
+
scale: scale.value
|
|
41
|
+
}]
|
|
42
|
+
}));
|
|
43
|
+
if (!state) return null;
|
|
44
|
+
const isLeft = state.side === 'left';
|
|
45
|
+
return /*#__PURE__*/_jsx(View, {
|
|
46
|
+
style: [styles.container, isLeft ? styles.left : styles.right],
|
|
47
|
+
pointerEvents: "none",
|
|
48
|
+
children: /*#__PURE__*/_jsxs(Animated.View, {
|
|
49
|
+
style: [styles.ripple, animStyle],
|
|
50
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
51
|
+
style: styles.arrow,
|
|
52
|
+
children: isLeft ? '«' : '»'
|
|
53
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
54
|
+
style: styles.label,
|
|
55
|
+
children: isLeft ? `-${state.seconds}s` : `+${state.seconds}s`
|
|
56
|
+
})]
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
const styles = StyleSheet.create({
|
|
61
|
+
container: {
|
|
62
|
+
position: 'absolute',
|
|
63
|
+
top: 0,
|
|
64
|
+
bottom: 0,
|
|
65
|
+
width: '40%',
|
|
66
|
+
alignItems: 'center',
|
|
67
|
+
justifyContent: 'center'
|
|
68
|
+
},
|
|
69
|
+
left: {
|
|
70
|
+
left: 0
|
|
71
|
+
},
|
|
72
|
+
right: {
|
|
73
|
+
right: 0
|
|
74
|
+
},
|
|
75
|
+
ripple: {
|
|
76
|
+
width: 80,
|
|
77
|
+
height: 80,
|
|
78
|
+
borderRadius: 40,
|
|
79
|
+
backgroundColor: 'rgba(255,255,255,0.15)',
|
|
80
|
+
alignItems: 'center',
|
|
81
|
+
justifyContent: 'center',
|
|
82
|
+
gap: 2
|
|
83
|
+
},
|
|
84
|
+
arrow: {
|
|
85
|
+
color: '#fff',
|
|
86
|
+
fontSize: 20,
|
|
87
|
+
fontWeight: '700'
|
|
88
|
+
},
|
|
89
|
+
label: {
|
|
90
|
+
color: '#fff',
|
|
91
|
+
fontSize: 11,
|
|
92
|
+
fontWeight: '600'
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=DoubleTapSeek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["forwardRef","useImperativeHandle","useRef","useState","StyleSheet","Text","View","Animated","useSharedValue","useAnimatedStyle","withSequence","withTiming","scheduleOnRN","jsx","_jsx","jsxs","_jsxs","DoubleTapSeek","_","ref","state","setState","opacity","scale","timerRef","undefined","hide","show","side","seconds","clearTimeout","current","value","duration","done","animStyle","transform","isLeft","style","styles","container","left","right","pointerEvents","children","ripple","arrow","label","create","position","top","bottom","width","alignItems","justifyContent","height","borderRadius","backgroundColor","gap","color","fontSize","fontWeight"],"sourceRoot":"../../../../src","sources":["components/overlays/DoubleTapSeek.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
|
|
4
|
+
import { useVideoStore } from "../core/VideoPlayerContext.js";
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
export function ErrorOverlay({
|
|
7
|
+
onRetry
|
|
8
|
+
}) {
|
|
9
|
+
const status = useVideoStore(s => s.status);
|
|
10
|
+
const error = useVideoStore(s => s.error);
|
|
11
|
+
if (status !== 'error') return null;
|
|
12
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
13
|
+
style: styles.container,
|
|
14
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
15
|
+
style: styles.icon,
|
|
16
|
+
children: "\u26A0\uFE0F"
|
|
17
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
18
|
+
style: styles.message,
|
|
19
|
+
children: error ?? 'Something went wrong'
|
|
20
|
+
}), onRetry && /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
21
|
+
style: styles.retryBtn,
|
|
22
|
+
onPress: onRetry,
|
|
23
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
24
|
+
style: styles.retryText,
|
|
25
|
+
children: "Retry"
|
|
26
|
+
})
|
|
27
|
+
})]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const styles = StyleSheet.create({
|
|
31
|
+
container: {
|
|
32
|
+
...StyleSheet.absoluteFill,
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
justifyContent: 'center',
|
|
35
|
+
backgroundColor: 'rgba(0,0,0,0.75)',
|
|
36
|
+
gap: 12
|
|
37
|
+
},
|
|
38
|
+
icon: {
|
|
39
|
+
fontSize: 36
|
|
40
|
+
},
|
|
41
|
+
message: {
|
|
42
|
+
color: '#fff',
|
|
43
|
+
fontSize: 14,
|
|
44
|
+
textAlign: 'center',
|
|
45
|
+
paddingHorizontal: 24
|
|
46
|
+
},
|
|
47
|
+
retryBtn: {
|
|
48
|
+
marginTop: 8,
|
|
49
|
+
paddingHorizontal: 24,
|
|
50
|
+
paddingVertical: 10,
|
|
51
|
+
backgroundColor: '#fff',
|
|
52
|
+
borderRadius: 20
|
|
53
|
+
},
|
|
54
|
+
retryText: {
|
|
55
|
+
color: '#000',
|
|
56
|
+
fontWeight: '700',
|
|
57
|
+
fontSize: 14
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=ErrorOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","Text","TouchableOpacity","View","useVideoStore","jsx","_jsx","jsxs","_jsxs","ErrorOverlay","onRetry","status","s","error","style","styles","container","children","icon","message","retryBtn","onPress","retryText","create","absoluteFill","alignItems","justifyContent","backgroundColor","gap","fontSize","color","textAlign","paddingHorizontal","marginTop","paddingVertical","borderRadius","fontWeight"],"sourceRoot":"../../../../src","sources":["components/overlays/ErrorOverlay.tsx"],"mappings":";;AAAA,SAASA,UAAU,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AACvE,SAASC,aAAa,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAM3D,OAAO,SAASC,YAAYA,CAAC;EAAEC;AAAe,CAAC,EAAE;EAC/C,MAAMC,MAAM,GAAGP,aAAa,CAAEQ,CAAC,IAAKA,CAAC,CAACD,MAAM,CAAC;EAC7C,MAAME,KAAK,GAAGT,aAAa,CAAEQ,CAAC,IAAKA,CAAC,CAACC,KAAK,CAAC;EAC3C,IAAIF,MAAM,KAAK,OAAO,EAAE,OAAO,IAAI;EAEnC,oBACEH,KAAA,CAACL,IAAI;IAACW,KAAK,EAAEC,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5BX,IAAA,CAACL,IAAI;MAACa,KAAK,EAAEC,MAAM,CAACG,IAAK;MAAAD,QAAA,EAAC;IAAE,CAAM,CAAC,eACnCX,IAAA,CAACL,IAAI;MAACa,KAAK,EAAEC,MAAM,CAACI,OAAQ;MAAAF,QAAA,EAAEJ,KAAK,IAAI;IAAsB,CAAO,CAAC,EACpEH,OAAO,iBACNJ,IAAA,CAACJ,gBAAgB;MAACY,KAAK,EAAEC,MAAM,CAACK,QAAS;MAACC,OAAO,EAAEX,OAAQ;MAAAO,QAAA,eACzDX,IAAA,CAACL,IAAI;QAACa,KAAK,EAAEC,MAAM,CAACO,SAAU;QAAAL,QAAA,EAAC;MAAK,CAAM;IAAC,CAC3B,CACnB;EAAA,CACG,CAAC;AAEX;AAEA,MAAMF,MAAM,GAAGf,UAAU,CAACuB,MAAM,CAAC;EAC/BP,SAAS,EAAE;IACT,GAAGhB,UAAU,CAACwB,YAAY;IAC1BC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,eAAe,EAAE,kBAAkB;IACnCC,GAAG,EAAE;EACP,CAAC;EACDV,IAAI,EAAE;IAAEW,QAAQ,EAAE;EAAG,CAAC;EACtBV,OAAO,EAAE;IACPW,KAAK,EAAE,MAAM;IACbD,QAAQ,EAAE,EAAE;IACZE,SAAS,EAAE,QAAQ;IACnBC,iBAAiB,EAAE;EACrB,CAAC;EACDZ,QAAQ,EAAE;IACRa,SAAS,EAAE,CAAC;IACZD,iBAAiB,EAAE,EAAE;IACrBE,eAAe,EAAE,EAAE;IACnBP,eAAe,EAAE,MAAM;IACvBQ,YAAY,EAAE;EAChB,CAAC;EACDb,SAAS,EAAE;IAAEQ,KAAK,EAAE,MAAM;IAAEM,UAAU,EAAE,KAAK;IAAEP,QAAQ,EAAE;EAAG;AAC9D,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { forwardRef, useImperativeHandle, useCallback } from 'react';
|
|
4
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
5
|
+
import Animated, { useSharedValue, useAnimatedStyle, withTiming } from 'react-native-reanimated';
|
|
6
|
+
import { scheduleOnRN } from 'react-native-worklets';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
export const GestureIndicator = /*#__PURE__*/forwardRef((_, ref) => {
|
|
9
|
+
const opacity = useSharedValue(0);
|
|
10
|
+
const fillHeight = useSharedValue(0);
|
|
11
|
+
|
|
12
|
+
// JS state via ref to avoid re-renders
|
|
13
|
+
const typeRef = React.useRef('brightness');
|
|
14
|
+
const [type, setType] = React.useState('brightness');
|
|
15
|
+
const [value, setValue] = React.useState(0);
|
|
16
|
+
const hideTimerRef = React.useRef(undefined);
|
|
17
|
+
const scheduleAutoHide = useCallback(() => {
|
|
18
|
+
clearTimeout(hideTimerRef.current);
|
|
19
|
+
hideTimerRef.current = setTimeout(() => {
|
|
20
|
+
opacity.value = withTiming(0, {
|
|
21
|
+
duration: 300
|
|
22
|
+
});
|
|
23
|
+
}, 1200);
|
|
24
|
+
}, [opacity]);
|
|
25
|
+
useImperativeHandle(ref, () => ({
|
|
26
|
+
show: (t, v) => {
|
|
27
|
+
typeRef.current = t;
|
|
28
|
+
scheduleOnRN(() => {
|
|
29
|
+
setType(t);
|
|
30
|
+
setValue(v);
|
|
31
|
+
});
|
|
32
|
+
opacity.value = withTiming(1, {
|
|
33
|
+
duration: 150
|
|
34
|
+
});
|
|
35
|
+
fillHeight.value = withTiming(v, {
|
|
36
|
+
duration: 100
|
|
37
|
+
});
|
|
38
|
+
scheduleAutoHide();
|
|
39
|
+
},
|
|
40
|
+
update: v => {
|
|
41
|
+
scheduleOnRN(() => setValue(v));
|
|
42
|
+
fillHeight.value = withTiming(v, {
|
|
43
|
+
duration: 80
|
|
44
|
+
});
|
|
45
|
+
scheduleAutoHide();
|
|
46
|
+
},
|
|
47
|
+
hide: () => {
|
|
48
|
+
clearTimeout(hideTimerRef.current);
|
|
49
|
+
opacity.value = withTiming(0, {
|
|
50
|
+
duration: 200
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}));
|
|
54
|
+
const containerStyle = useAnimatedStyle(() => ({
|
|
55
|
+
opacity: opacity.value
|
|
56
|
+
}));
|
|
57
|
+
const fillStyle = useAnimatedStyle(() => ({
|
|
58
|
+
height: `${fillHeight.value * 100}%`
|
|
59
|
+
}));
|
|
60
|
+
const icon = type === 'brightness' ? '☀️' : value === 0 ? '🔇' : '🔊';
|
|
61
|
+
return /*#__PURE__*/_jsxs(Animated.View, {
|
|
62
|
+
style: [styles.container, containerStyle],
|
|
63
|
+
pointerEvents: "none",
|
|
64
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
65
|
+
style: styles.icon,
|
|
66
|
+
children: icon
|
|
67
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
68
|
+
style: styles.track,
|
|
69
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
70
|
+
style: [styles.fill, fillStyle]
|
|
71
|
+
})
|
|
72
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
73
|
+
style: styles.value,
|
|
74
|
+
children: [Math.round(value * 100), "%"]
|
|
75
|
+
})]
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
const styles = StyleSheet.create({
|
|
79
|
+
container: {
|
|
80
|
+
position: 'absolute',
|
|
81
|
+
top: '50%',
|
|
82
|
+
left: '50%',
|
|
83
|
+
transform: [{
|
|
84
|
+
translateX: -28
|
|
85
|
+
}, {
|
|
86
|
+
translateY: -80
|
|
87
|
+
}],
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
gap: 6,
|
|
90
|
+
backgroundColor: 'rgba(0,0,0,0.65)',
|
|
91
|
+
borderRadius: 12,
|
|
92
|
+
paddingVertical: 10,
|
|
93
|
+
paddingHorizontal: 12,
|
|
94
|
+
width: 56
|
|
95
|
+
},
|
|
96
|
+
icon: {
|
|
97
|
+
fontSize: 18
|
|
98
|
+
},
|
|
99
|
+
track: {
|
|
100
|
+
width: 4,
|
|
101
|
+
height: 80,
|
|
102
|
+
backgroundColor: 'rgba(255,255,255,0.25)',
|
|
103
|
+
borderRadius: 2,
|
|
104
|
+
justifyContent: 'flex-end',
|
|
105
|
+
overflow: 'hidden'
|
|
106
|
+
},
|
|
107
|
+
fill: {
|
|
108
|
+
width: '100%',
|
|
109
|
+
backgroundColor: '#fff',
|
|
110
|
+
borderRadius: 2
|
|
111
|
+
},
|
|
112
|
+
value: {
|
|
113
|
+
color: '#fff',
|
|
114
|
+
fontSize: 11,
|
|
115
|
+
fontWeight: '600'
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=GestureIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useImperativeHandle","useCallback","StyleSheet","Text","View","Animated","useSharedValue","useAnimatedStyle","withTiming","scheduleOnRN","jsx","_jsx","jsxs","_jsxs","GestureIndicator","_","ref","opacity","fillHeight","typeRef","useRef","type","setType","useState","value","setValue","hideTimerRef","undefined","scheduleAutoHide","clearTimeout","current","setTimeout","duration","show","t","v","update","hide","containerStyle","fillStyle","height","icon","style","styles","container","pointerEvents","children","track","fill","Math","round","create","position","top","left","transform","translateX","translateY","alignItems","gap","backgroundColor","borderRadius","paddingVertical","paddingHorizontal","width","fontSize","justifyContent","overflow","color","fontWeight"],"sourceRoot":"../../../../src","sources":["components/overlays/GestureIndicator.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Image, StyleSheet, View } from 'react-native';
|
|
4
|
+
import { useVideoStore } from "../core/VideoPlayerContext.js";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
export function LoadingPoster({
|
|
7
|
+
uri
|
|
8
|
+
}) {
|
|
9
|
+
const status = useVideoStore(s => s.status);
|
|
10
|
+
if (!uri || status !== 'idle') return null;
|
|
11
|
+
return /*#__PURE__*/_jsx(View, {
|
|
12
|
+
style: StyleSheet.absoluteFill,
|
|
13
|
+
children: /*#__PURE__*/_jsx(Image, {
|
|
14
|
+
source: {
|
|
15
|
+
uri
|
|
16
|
+
},
|
|
17
|
+
style: StyleSheet.absoluteFill,
|
|
18
|
+
resizeMode: "cover"
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=LoadingPoster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Image","StyleSheet","View","useVideoStore","jsx","_jsx","LoadingPoster","uri","status","s","style","absoluteFill","children","source","resizeMode"],"sourceRoot":"../../../../src","sources":["components/overlays/LoadingPoster.tsx"],"mappings":";;AAAA,SAASA,KAAK,EAAEC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AACtD,SAASC,aAAa,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM3D,OAAO,SAASC,aAAaA,CAAC;EAAEC;AAAW,CAAC,EAAE;EAC5C,MAAMC,MAAM,GAAGL,aAAa,CAAEM,CAAC,IAAKA,CAAC,CAACD,MAAM,CAAC;EAC7C,IAAI,CAACD,GAAG,IAAIC,MAAM,KAAK,MAAM,EAAE,OAAO,IAAI;EAE1C,oBACEH,IAAA,CAACH,IAAI;IAACQ,KAAK,EAAET,UAAU,CAACU,YAAa;IAAAC,QAAA,eACnCP,IAAA,CAACL,KAAK;MACJa,MAAM,EAAE;QAAEN;MAAI,CAAE;MAChBG,KAAK,EAAET,UAAU,CAACU,YAAa;MAC/BG,UAAU,EAAC;IAAO,CACnB;EAAC,CACE,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useVideoPlayer","useVideoControls","useVideoOrientation"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,qBAAkB;AACjD,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,mBAAmB,QAAQ,0BAAuB","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useRef } from 'react';
|
|
4
|
+
import { getBrightnessLevel, setBrightnessLevel } from '@reeq/react-native-device-brightness';
|
|
5
|
+
import { clamp } from "../utils/clamp.js";
|
|
6
|
+
export function useVideoBrightness() {
|
|
7
|
+
const current = useRef(null);
|
|
8
|
+
const init = useCallback(() => {
|
|
9
|
+
try {
|
|
10
|
+
current.current = getBrightnessLevel();
|
|
11
|
+
} catch (e) {
|
|
12
|
+
console.warn('[VideoKit] brightness init failed:', e);
|
|
13
|
+
}
|
|
14
|
+
}, []);
|
|
15
|
+
const adjust = useCallback(delta => {
|
|
16
|
+
try {
|
|
17
|
+
// lazy init — read current brightness on first adjust
|
|
18
|
+
if (current.current === null) {
|
|
19
|
+
current.current = getBrightnessLevel();
|
|
20
|
+
}
|
|
21
|
+
const next = clamp(current.current + delta, 0, 1);
|
|
22
|
+
current.current = next;
|
|
23
|
+
setBrightnessLevel(next);
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.warn('[VideoKit] brightness adjust failed:', e);
|
|
26
|
+
}
|
|
27
|
+
}, []);
|
|
28
|
+
return {
|
|
29
|
+
initBrightness: init,
|
|
30
|
+
adjustBrightness: adjust
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=useVideoBrightness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useRef","getBrightnessLevel","setBrightnessLevel","clamp","useVideoBrightness","current","init","e","console","warn","adjust","delta","next","initBrightness","adjustBrightness"],"sourceRoot":"../../../src","sources":["hooks/useVideoBrightness.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAC3C,SACEC,kBAAkB,EAClBC,kBAAkB,QACb,sCAAsC;AAC7C,SAASC,KAAK,QAAQ,mBAAgB;AAEtC,OAAO,SAASC,kBAAkBA,CAAA,EAAG;EACnC,MAAMC,OAAO,GAAGL,MAAM,CAAgB,IAAI,CAAC;EAE3C,MAAMM,IAAI,GAAGP,WAAW,CAAC,MAAM;IAC7B,IAAI;MACFM,OAAO,CAACA,OAAO,GAAGJ,kBAAkB,CAAC,CAAC;IACxC,CAAC,CAAC,OAAOM,CAAC,EAAE;MACVC,OAAO,CAACC,IAAI,CAAC,oCAAoC,EAAEF,CAAC,CAAC;IACvD;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,MAAM,GAAGX,WAAW,CAAEY,KAAa,IAAK;IAC5C,IAAI;MACF;MACA,IAAIN,OAAO,CAACA,OAAO,KAAK,IAAI,EAAE;QAC5BA,OAAO,CAACA,OAAO,GAAGJ,kBAAkB,CAAC,CAAC;MACxC;MACA,MAAMW,IAAI,GAAGT,KAAK,CAACE,OAAO,CAACA,OAAO,GAAGM,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;MACjDN,OAAO,CAACA,OAAO,GAAGO,IAAI;MACtBV,kBAAkB,CAACU,IAAI,CAAC;IAC1B,CAAC,CAAC,OAAOL,CAAC,EAAE;MACVC,OAAO,CAACC,IAAI,CAAC,sCAAsC,EAAEF,CAAC,CAAC;IACzD;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IAAEM,cAAc,EAAEP,IAAI;IAAEQ,gBAAgB,EAAEJ;EAAO,CAAC;AAC3D","ignoreList":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
4
|
+
import { useVideoStore, useVideoStoreApi } from "../components/core/VideoPlayerContext.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Manages controls visibility with an auto-hide timer.
|
|
8
|
+
* Call `showControls()` on any user interaction to reset the timer.
|
|
9
|
+
*/
|
|
10
|
+
export function useVideoControls(autoHideDelayMs = 3000) {
|
|
11
|
+
const timerRef = useRef(null);
|
|
12
|
+
const status = useVideoStore(s => s.status);
|
|
13
|
+
const {} = useVideoStore(s => s);
|
|
14
|
+
const controlsVisible = useVideoStore(s => s.controlsVisible);
|
|
15
|
+
const store = useVideoStoreApi();
|
|
16
|
+
const clearTimer = useCallback(() => {
|
|
17
|
+
if (timerRef.current) {
|
|
18
|
+
clearTimeout(timerRef.current);
|
|
19
|
+
timerRef.current = null;
|
|
20
|
+
}
|
|
21
|
+
}, []);
|
|
22
|
+
const scheduleHide = useCallback(() => {
|
|
23
|
+
clearTimer();
|
|
24
|
+
timerRef.current = setTimeout(() => {
|
|
25
|
+
store.getState().setControlsVisible(false);
|
|
26
|
+
}, autoHideDelayMs);
|
|
27
|
+
}, [clearTimer, autoHideDelayMs, store]);
|
|
28
|
+
const showControls = useCallback(() => {
|
|
29
|
+
store.getState().setControlsVisible(true);
|
|
30
|
+
if (status === 'playing') {
|
|
31
|
+
scheduleHide();
|
|
32
|
+
}
|
|
33
|
+
}, [store, status, scheduleHide]);
|
|
34
|
+
const toggleControls = useCallback(() => {
|
|
35
|
+
store.getState().setControlsVisible(!controlsVisible);
|
|
36
|
+
}, [controlsVisible, store]);
|
|
37
|
+
const keepControlsVisible = useCallback(() => {
|
|
38
|
+
// Call this during scrub to cancel auto-hide
|
|
39
|
+
clearTimer();
|
|
40
|
+
store.getState().setControlsVisible(true);
|
|
41
|
+
}, [clearTimer, store]);
|
|
42
|
+
|
|
43
|
+
// When playback starts, begin the hide countdown
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (status === 'playing' && controlsVisible) {
|
|
46
|
+
clearTimer();
|
|
47
|
+
scheduleHide();
|
|
48
|
+
} else if (status !== 'playing' && controlsVisible) {
|
|
49
|
+
clearTimer();
|
|
50
|
+
scheduleHide();
|
|
51
|
+
} else {
|
|
52
|
+
clearTimer();
|
|
53
|
+
scheduleHide();
|
|
54
|
+
}
|
|
55
|
+
return clearTimer;
|
|
56
|
+
}, [status, controlsVisible, scheduleHide, clearTimer]);
|
|
57
|
+
return {
|
|
58
|
+
controlsVisible,
|
|
59
|
+
showControls,
|
|
60
|
+
keepControlsVisible,
|
|
61
|
+
toggleControls
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=useVideoControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","useVideoStore","useVideoStoreApi","useVideoControls","autoHideDelayMs","timerRef","status","s","controlsVisible","store","clearTimer","current","clearTimeout","scheduleHide","setTimeout","getState","setControlsVisible","showControls","toggleControls","keepControlsVisible"],"sourceRoot":"../../../src","sources":["hooks/useVideoControls.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtD,SACEC,aAAa,EACbC,gBAAgB,QACX,0CAAuC;;AAE9C;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,eAAe,GAAG,IAAI,EAAE;EACvD,MAAMC,QAAQ,GAAGL,MAAM,CAAuC,IAAI,CAAC;EACnE,MAAMM,MAAM,GAAGL,aAAa,CAAEM,CAAC,IAAKA,CAAC,CAACD,MAAM,CAAC;EAC7C,MAAM,CAAC,CAAC,GAAGL,aAAa,CAAEM,CAAC,IAAKA,CAAC,CAAC;EAClC,MAAMC,eAAe,GAAGP,aAAa,CAAEM,CAAC,IAAKA,CAAC,CAACC,eAAe,CAAC;EAC/D,MAAMC,KAAK,GAAGP,gBAAgB,CAAC,CAAC;EAEhC,MAAMQ,UAAU,GAAGZ,WAAW,CAAC,MAAM;IACnC,IAAIO,QAAQ,CAACM,OAAO,EAAE;MACpBC,YAAY,CAACP,QAAQ,CAACM,OAAO,CAAC;MAC9BN,QAAQ,CAACM,OAAO,GAAG,IAAI;IACzB;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,YAAY,GAAGf,WAAW,CAAC,MAAM;IACrCY,UAAU,CAAC,CAAC;IACZL,QAAQ,CAACM,OAAO,GAAGG,UAAU,CAAC,MAAM;MAClCL,KAAK,CAACM,QAAQ,CAAC,CAAC,CAACC,kBAAkB,CAAC,KAAK,CAAC;IAC5C,CAAC,EAAEZ,eAAe,CAAC;EACrB,CAAC,EAAE,CAACM,UAAU,EAAEN,eAAe,EAAEK,KAAK,CAAC,CAAC;EAExC,MAAMQ,YAAY,GAAGnB,WAAW,CAAC,MAAM;IACrCW,KAAK,CAACM,QAAQ,CAAC,CAAC,CAACC,kBAAkB,CAAC,IAAI,CAAC;IACzC,IAAIV,MAAM,KAAK,SAAS,EAAE;MACxBO,YAAY,CAAC,CAAC;IAChB;EACF,CAAC,EAAE,CAACJ,KAAK,EAAEH,MAAM,EAAEO,YAAY,CAAC,CAAC;EAEjC,MAAMK,cAAc,GAAGpB,WAAW,CAAC,MAAM;IACvCW,KAAK,CAACM,QAAQ,CAAC,CAAC,CAACC,kBAAkB,CAAC,CAACR,eAAe,CAAC;EACvD,CAAC,EAAE,CAACA,eAAe,EAAEC,KAAK,CAAC,CAAC;EAE5B,MAAMU,mBAAmB,GAAGrB,WAAW,CAAC,MAAM;IAC5C;IACAY,UAAU,CAAC,CAAC;IACZD,KAAK,CAACM,QAAQ,CAAC,CAAC,CAACC,kBAAkB,CAAC,IAAI,CAAC;EAC3C,CAAC,EAAE,CAACN,UAAU,EAAED,KAAK,CAAC,CAAC;;EAEvB;EACAV,SAAS,CAAC,MAAM;IACd,IAAIO,MAAM,KAAK,SAAS,IAAIE,eAAe,EAAE;MAC3CE,UAAU,CAAC,CAAC;MACZG,YAAY,CAAC,CAAC;IAChB,CAAC,MAAM,IAAIP,MAAM,KAAK,SAAS,IAAIE,eAAe,EAAE;MAClDE,UAAU,CAAC,CAAC;MACZG,YAAY,CAAC,CAAC;IAChB,CAAC,MAAM;MACLH,UAAU,CAAC,CAAC;MACZG,YAAY,CAAC,CAAC;IAChB;IACA,OAAOH,UAAU;EACnB,CAAC,EAAE,CAACJ,MAAM,EAAEE,eAAe,EAAEK,YAAY,EAAEH,UAAU,CAAC,CAAC;EAEvD,OAAO;IAAEF,eAAe;IAAES,YAAY;IAAEE,mBAAmB;IAAED;EAAe,CAAC;AAC/E","ignoreList":[]}
|