@zezosoft/zezo-ott-react-native-ui-kit 1.1.0 → 1.1.1
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/lib/module/components/BottomSheet/BottomSheet.js +152 -0
- package/lib/module/components/BottomSheet/BottomSheet.js.map +1 -0
- package/lib/module/components/BottomSheet/index.js +4 -0
- package/lib/module/components/BottomSheet/index.js.map +1 -0
- package/lib/module/components/Button/BackBtn.js +28 -2
- package/lib/module/components/Button/BackBtn.js.map +1 -1
- package/lib/module/components/Reels/ReelsSeries/MediaControls/BottomControls.js +134 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/BottomControls.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.js +154 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/MiddleControls.js +173 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/MiddleControls.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/RightControls.js +77 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/RightControls.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/TopControls.js +132 -0
- package/lib/module/components/Reels/ReelsSeries/MediaControls/TopControls.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/Model/DetailsModal.js +165 -0
- package/lib/module/components/Reels/ReelsSeries/Model/DetailsModal.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/Model/SettingModal.js +106 -0
- package/lib/module/components/Reels/ReelsSeries/Model/SettingModal.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/Model/UnlockModal.js +124 -0
- package/lib/module/components/Reels/ReelsSeries/Model/UnlockModal.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/ReelsSeries.js +102 -64
- package/lib/module/components/Reels/ReelsSeries/ReelsSeries.js.map +1 -1
- package/lib/module/components/Reels/ReelsSeries/ReelsSeriesItem.js +241 -232
- package/lib/module/components/Reels/ReelsSeries/ReelsSeriesItem.js.map +1 -1
- package/lib/module/components/Reels/ReelsSeries/components/AnimatedThreeLines.js +153 -0
- package/lib/module/components/Reels/ReelsSeries/components/AnimatedThreeLines.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/{Model → components}/Episodes.js +46 -36
- package/lib/module/components/Reels/ReelsSeries/components/Episodes.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/GradientOverlay.js +35 -0
- package/lib/module/components/Reels/ReelsSeries/components/GradientOverlay.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/Like.js +37 -0
- package/lib/module/components/Reels/ReelsSeries/components/Like.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/RotatingLoader.js +55 -0
- package/lib/module/components/Reels/ReelsSeries/components/RotatingLoader.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/Synopsis.js +268 -0
- package/lib/module/components/Reels/ReelsSeries/components/Synopsis.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/QualityControl.js +143 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/QualityControl.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.js +56 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.js.map +1 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/index.js +5 -0
- package/lib/module/components/Reels/ReelsSeries/components/VideoControls/index.js.map +1 -0
- package/lib/module/components/Reels/utils/Controls/gestureUtils.js +30 -0
- package/lib/module/components/Reels/utils/Controls/gestureUtils.js.map +1 -0
- package/lib/module/components/Reels/utils/Controls/index.js +7 -0
- package/lib/module/components/Reels/utils/Controls/index.js.map +1 -0
- package/lib/module/components/Reels/utils/Controls/overlayUtils.js +28 -0
- package/lib/module/components/Reels/utils/Controls/overlayUtils.js.map +1 -0
- package/lib/module/components/Reels/utils/Controls/videoControlsConstants.js +27 -0
- package/lib/module/components/Reels/utils/Controls/videoControlsConstants.js.map +1 -0
- package/lib/module/components/Reels/utils/Controls/videoRef.js +5 -0
- package/lib/module/components/Reels/utils/Controls/videoRef.js.map +1 -0
- package/lib/module/components/Reels/utils/index.js +4 -0
- package/lib/module/components/Reels/utils/index.js.map +1 -0
- package/lib/module/components/Reels/utils/timeoutUtils.js +24 -0
- package/lib/module/components/Reels/utils/timeoutUtils.js.map +1 -0
- package/lib/module/components/index.js +1 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/theme/ThemeProvider.js +7 -4
- package/lib/module/theme/ThemeProvider.js.map +1 -1
- package/lib/module/theme/themes.js +3 -3
- package/lib/typescript/src/components/BottomSheet/BottomSheet.d.ts +18 -0
- package/lib/typescript/src/components/BottomSheet/BottomSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/BottomSheet/index.d.ts +3 -0
- package/lib/typescript/src/components/BottomSheet/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Button/BackBtn.d.ts +3 -1
- package/lib/typescript/src/components/Button/BackBtn.d.ts.map +1 -1
- package/lib/typescript/src/components/Button/index.d.ts +2 -0
- package/lib/typescript/src/components/Button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/BottomControls.d.ts +14 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/BottomControls.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.d.ts +60 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.d.ts +14 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/RightControls.d.ts +14 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/RightControls.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/TopControls.d.ts +12 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/MediaControls/TopControls.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/DetailsModal.d.ts +16 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/DetailsModal.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/SettingModal.d.ts +15 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/SettingModal.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/UnlockModal.d.ts +14 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/UnlockModal.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeries.d.ts +8 -2
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeries.d.ts.map +1 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeriesItem.d.ts +8 -2
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelsSeriesItem.d.ts.map +1 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.d.ts +13 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/{Model → components}/Episodes.d.ts +3 -2
- package/lib/typescript/src/components/Reels/ReelsSeries/components/Episodes.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/GradientOverlay.d.ts +7 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/GradientOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/Like.d.ts +7 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/Like.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/RotatingLoader.d.ts +12 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/RotatingLoader.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/Synopsis.d.ts +12 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/Synopsis.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.d.ts +11 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.d.ts +10 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/index.d.ts +3 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/components/VideoControls/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/types.d.ts +13 -0
- package/lib/typescript/src/components/Reels/ReelsSeries/types.d.ts.map +1 -1
- package/lib/typescript/src/components/Reels/utils/Controls/gestureUtils.d.ts +10 -0
- package/lib/typescript/src/components/Reels/utils/Controls/gestureUtils.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/Controls/index.d.ts +5 -0
- package/lib/typescript/src/components/Reels/utils/Controls/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/Controls/overlayUtils.d.ts +12 -0
- package/lib/typescript/src/components/Reels/utils/Controls/overlayUtils.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/Controls/videoControlsConstants.d.ts +24 -0
- package/lib/typescript/src/components/Reels/utils/Controls/videoControlsConstants.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/Controls/videoRef.d.ts +3 -0
- package/lib/typescript/src/components/Reels/utils/Controls/videoRef.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/index.d.ts +2 -0
- package/lib/typescript/src/components/Reels/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Reels/utils/timeoutUtils.d.ts +14 -0
- package/lib/typescript/src/components/Reels/utils/timeoutUtils.d.ts.map +1 -0
- package/lib/typescript/src/components/index.d.ts +1 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/BottomSheet/BottomSheet.tsx +195 -0
- package/src/components/BottomSheet/index.ts +2 -0
- package/src/components/Button/BackBtn.tsx +33 -0
- package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +156 -0
- package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +234 -0
- package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +196 -0
- package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +92 -0
- package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +163 -0
- package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +210 -0
- package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +143 -0
- package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +154 -0
- package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +142 -74
- package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +349 -250
- package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +184 -0
- package/src/components/Reels/ReelsSeries/{Model → components}/Episodes.tsx +54 -33
- package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +41 -0
- package/src/components/Reels/ReelsSeries/components/Like.tsx +40 -0
- package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +79 -0
- package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +332 -0
- package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +190 -0
- package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +80 -0
- package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +2 -0
- package/src/components/Reels/ReelsSeries/types.ts +13 -2
- package/src/components/Reels/utils/Controls/gestureUtils.ts +42 -0
- package/src/components/Reels/utils/Controls/index.ts +4 -0
- package/src/components/Reels/utils/Controls/overlayUtils.ts +35 -0
- package/src/components/Reels/utils/Controls/videoControlsConstants.ts +25 -0
- package/src/components/Reels/utils/Controls/videoRef.ts +4 -0
- package/src/components/Reels/utils/index.ts +1 -0
- package/src/components/Reels/utils/timeoutUtils.ts +29 -0
- package/src/components/index.ts +1 -0
- package/src/theme/ThemeProvider.tsx +8 -2
- package/src/theme/themes.ts +3 -3
- package/lib/module/components/Reels/ReelsSeries/Model/Episodes.js.map +0 -1
- package/lib/module/components/Reels/ReelsSeries/Model/Synopsis.js +0 -212
- package/lib/module/components/Reels/ReelsSeries/Model/Synopsis.js.map +0 -1
- package/lib/module/components/Reels/ReelsSeries/ReelSeriesDetailsModal.js +0 -182
- package/lib/module/components/Reels/ReelsSeries/ReelSeriesDetailsModal.js.map +0 -1
- package/lib/module/components/Reels/ReelsSeries/ReelSeriesOverlay.js +0 -203
- package/lib/module/components/Reels/ReelsSeries/ReelSeriesOverlay.js.map +0 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/Episodes.d.ts.map +0 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/Synopsis.d.ts +0 -9
- package/lib/typescript/src/components/Reels/ReelsSeries/Model/Synopsis.d.ts.map +0 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.d.ts +0 -13
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.d.ts.map +0 -1
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesOverlay.d.ts +0 -18
- package/lib/typescript/src/components/Reels/ReelsSeries/ReelSeriesOverlay.d.ts.map +0 -1
- package/src/components/Reels/ReelsSeries/Model/Synopsis.tsx +0 -242
- package/src/components/Reels/ReelsSeries/ReelSeriesDetailsModal.tsx +0 -209
- package/src/components/Reels/ReelsSeries/ReelSeriesOverlay.tsx +0 -185
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Reels/ReelsSeries/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Reels/ReelsSeries/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;CAChC;AACD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;CACvC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Gesture } from 'react-native-gesture-handler';
|
|
2
|
+
/**
|
|
3
|
+
* Create a tap gesture handler
|
|
4
|
+
*/
|
|
5
|
+
export declare const useCreateTapGesture: (isInOverlay: (x: number, y: number) => boolean, isLocked: boolean, handleLockedTap: () => void) => (onAction: () => void, numberOfTaps?: number) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/tapGesture").TapGesture;
|
|
6
|
+
/**
|
|
7
|
+
* Create combined gesture (single tap and double tap)
|
|
8
|
+
*/
|
|
9
|
+
export declare const useCombinedGesture: (singleTap: ReturnType<typeof Gesture.Tap>, doubleTap: ReturnType<typeof Gesture.Tap>) => import("react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition").ExclusiveGesture;
|
|
10
|
+
//# sourceMappingURL=gestureUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gestureUtils.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/Reels/utils/Controls/gestureUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAGvD;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,EAC9C,UAAU,OAAO,EACjB,iBAAiB,MAAM,IAAI,gBAGd,MAAM,IAAI,yHAexB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,WAAW,UAAU,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,EACzC,WAAW,UAAU,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,gHAM1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/Reels/utils/Controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculate overlay thresholds
|
|
3
|
+
*/
|
|
4
|
+
export declare const useOverlayThresholds: (videoHeight: number) => {
|
|
5
|
+
rightThreshold: number;
|
|
6
|
+
bottomThreshold: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Check if coordinates are in overlay area
|
|
10
|
+
*/
|
|
11
|
+
export declare const useIsInOverlay: (rightThreshold: number, bottomThreshold: number) => (x: number, y: number) => boolean;
|
|
12
|
+
//# sourceMappingURL=overlayUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlayUtils.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/Reels/utils/Controls/overlayUtils.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,aAAa,MAAM;;;CASvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,gBAAgB,MAAM,EACtB,iBAAiB,MAAM,SAGjB,MAAM,KAAK,MAAM,YAGxB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video Controls Constants
|
|
3
|
+
*/
|
|
4
|
+
export declare const GESTURE_MAX_DURATION = 300;
|
|
5
|
+
export declare const PAUSE_ICON_TIMEOUT = 800;
|
|
6
|
+
export declare const LIKE_ANIM_TIMEOUT = 1200;
|
|
7
|
+
export declare const UNLOCK_MODAL_DELAY = 500;
|
|
8
|
+
export declare const OVERLAY_RIGHT_OFFSET = 80;
|
|
9
|
+
export declare const OVERLAY_BOTTOM_OFFSET = 150;
|
|
10
|
+
export declare const videoControlsStyles: {
|
|
11
|
+
hideForward: boolean;
|
|
12
|
+
hideDuration: boolean;
|
|
13
|
+
hideFullscreen: boolean;
|
|
14
|
+
hidePlayPause: boolean;
|
|
15
|
+
hideNavigationBarOnFullScreenMode: boolean;
|
|
16
|
+
hideNotificationBarOnFullScreenMode: boolean;
|
|
17
|
+
hideNext: boolean;
|
|
18
|
+
hidePosition: boolean;
|
|
19
|
+
hidePrevious: boolean;
|
|
20
|
+
hideRewind: boolean;
|
|
21
|
+
hideSeekBar: boolean;
|
|
22
|
+
hideSettingButton: boolean;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=videoControlsConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoControlsConstants.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/Reels/utils/Controls/videoControlsConstants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;CAa/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoRef.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/Reels/utils/Controls/videoRef.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,eAAO,MAAM,QAAQ,4CAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Reels/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type MutableRefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Safely clears a timeout stored in a ref
|
|
4
|
+
* @param ref - React ref containing the timeout
|
|
5
|
+
*/
|
|
6
|
+
export declare const clearTimeoutSafely: (ref: MutableRefObject<NodeJS.Timeout | null>) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Safely sets a timeout and stores it in a ref, clearing any existing timeout first
|
|
9
|
+
* @param ref - React ref to store the timeout
|
|
10
|
+
* @param callback - Function to execute after delay
|
|
11
|
+
* @param delay - Delay in milliseconds
|
|
12
|
+
*/
|
|
13
|
+
export declare const setTimeoutSafely: (ref: MutableRefObject<NodeJS.Timeout | null>, callback: () => void, delay: number) => void;
|
|
14
|
+
//# sourceMappingURL=timeoutUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeoutUtils.d.ts","sourceRoot":"","sources":["../../../../../../src/components/Reels/utils/timeoutUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,KAAK,gBAAgB,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,KAC3C,IAKF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,gBAAgB,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAC5C,UAAU,MAAM,IAAI,EACpB,OAAO,MAAM,KACZ,IAGF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zezosoft/zezo-ott-react-native-ui-kit",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "A professional React Native UI component library built for OTT applications.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"types": "lib/typescript/src/index.d.ts",
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import React, { useCallback, useMemo } from 'react';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
3
|
+
import {
|
|
4
|
+
TouchableOpacity,
|
|
5
|
+
StyleSheet,
|
|
6
|
+
View,
|
|
7
|
+
ScrollView,
|
|
8
|
+
Dimensions,
|
|
9
|
+
} from 'react-native';
|
|
10
|
+
import type { ViewStyle } from 'react-native';
|
|
11
|
+
import Modal from 'react-native-modal';
|
|
12
|
+
import { X } from 'lucide-react-native';
|
|
13
|
+
import { moderateScale, verticalScale } from 'react-native-size-matters';
|
|
14
|
+
import { RFValue } from 'react-native-responsive-fontsize';
|
|
15
|
+
import Animated from 'react-native-reanimated';
|
|
16
|
+
import type { ITheme } from '../../theme';
|
|
17
|
+
import { Text } from '../Text';
|
|
18
|
+
|
|
19
|
+
const { height: SCREEN_HEIGHT } = Dimensions.get('window');
|
|
20
|
+
|
|
21
|
+
export interface BottomSheetProps {
|
|
22
|
+
theme: ITheme;
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
title?: string;
|
|
25
|
+
height?: string | number;
|
|
26
|
+
showCloseButton?: boolean;
|
|
27
|
+
visible?: boolean;
|
|
28
|
+
onClose?: () => void;
|
|
29
|
+
handleIndicatorStyle?: ViewStyle;
|
|
30
|
+
scrollable?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const BottomSheet: React.FC<BottomSheetProps> = ({
|
|
34
|
+
theme,
|
|
35
|
+
children,
|
|
36
|
+
title,
|
|
37
|
+
height,
|
|
38
|
+
showCloseButton = true,
|
|
39
|
+
visible = false,
|
|
40
|
+
onClose,
|
|
41
|
+
handleIndicatorStyle,
|
|
42
|
+
scrollable = true,
|
|
43
|
+
}) => {
|
|
44
|
+
const calculatedHeight = useMemo(() => {
|
|
45
|
+
if (!height) return SCREEN_HEIGHT * 0.75;
|
|
46
|
+
|
|
47
|
+
if (typeof height === 'number') return height;
|
|
48
|
+
|
|
49
|
+
if (typeof height === 'string' && height.includes('%')) {
|
|
50
|
+
const num = parseFloat(height);
|
|
51
|
+
if (!isNaN(num)) {
|
|
52
|
+
return (num / 100) * SCREEN_HEIGHT;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return SCREEN_HEIGHT * 0.75;
|
|
57
|
+
}, [height]);
|
|
58
|
+
|
|
59
|
+
const handleClosePress = useCallback(() => {
|
|
60
|
+
onClose?.();
|
|
61
|
+
}, [onClose]);
|
|
62
|
+
|
|
63
|
+
const renderHeader = useMemo(() => {
|
|
64
|
+
if (title) {
|
|
65
|
+
return (
|
|
66
|
+
<Text style={[styles.title, { color: theme.colors.textPrimary }]}>
|
|
67
|
+
{title}
|
|
68
|
+
</Text>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}, [title, theme.colors.textPrimary]);
|
|
73
|
+
|
|
74
|
+
const renderCloseButton = useMemo(() => {
|
|
75
|
+
if (!showCloseButton) return null;
|
|
76
|
+
return (
|
|
77
|
+
<TouchableOpacity
|
|
78
|
+
onPress={handleClosePress}
|
|
79
|
+
style={[
|
|
80
|
+
styles.closeButtonWrapper,
|
|
81
|
+
{ backgroundColor: theme.colors.button },
|
|
82
|
+
]}
|
|
83
|
+
activeOpacity={0.8}
|
|
84
|
+
>
|
|
85
|
+
<X size={moderateScale(16)} color={theme.colors.buttonText} />
|
|
86
|
+
</TouchableOpacity>
|
|
87
|
+
);
|
|
88
|
+
}, [showCloseButton, handleClosePress, theme.colors]);
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<Modal
|
|
92
|
+
isVisible={visible}
|
|
93
|
+
onBackdropPress={handleClosePress}
|
|
94
|
+
onSwipeComplete={handleClosePress}
|
|
95
|
+
style={styles.modal}
|
|
96
|
+
backdropOpacity={0.45}
|
|
97
|
+
// swipeDirection="down"
|
|
98
|
+
animationIn="slideInUp"
|
|
99
|
+
animationOut="slideOutDown"
|
|
100
|
+
animationInTiming={260}
|
|
101
|
+
animationOutTiming={220}
|
|
102
|
+
useNativeDriver
|
|
103
|
+
useNativeDriverForBackdrop
|
|
104
|
+
propagateSwipe
|
|
105
|
+
avoidKeyboard
|
|
106
|
+
statusBarTranslucent={false}
|
|
107
|
+
hardwareAccelerated
|
|
108
|
+
>
|
|
109
|
+
<Animated.View
|
|
110
|
+
style={[
|
|
111
|
+
styles.bottomSheetContainer,
|
|
112
|
+
{
|
|
113
|
+
backgroundColor: theme.colors.background,
|
|
114
|
+
maxHeight: calculatedHeight,
|
|
115
|
+
},
|
|
116
|
+
]}
|
|
117
|
+
>
|
|
118
|
+
{renderCloseButton}
|
|
119
|
+
<View
|
|
120
|
+
style={[
|
|
121
|
+
styles.handleIndicator,
|
|
122
|
+
{ backgroundColor: theme.colors.button },
|
|
123
|
+
handleIndicatorStyle,
|
|
124
|
+
]}
|
|
125
|
+
/>
|
|
126
|
+
|
|
127
|
+
{scrollable ? (
|
|
128
|
+
<ScrollView
|
|
129
|
+
showsVerticalScrollIndicator={false}
|
|
130
|
+
bounces={false}
|
|
131
|
+
nestedScrollEnabled
|
|
132
|
+
keyboardShouldPersistTaps="handled"
|
|
133
|
+
contentContainerStyle={styles.scrollContent}
|
|
134
|
+
>
|
|
135
|
+
{renderHeader}
|
|
136
|
+
{children}
|
|
137
|
+
</ScrollView>
|
|
138
|
+
) : (
|
|
139
|
+
<View style={styles.viewContent}>
|
|
140
|
+
{renderHeader}
|
|
141
|
+
{children}
|
|
142
|
+
</View>
|
|
143
|
+
)}
|
|
144
|
+
</Animated.View>
|
|
145
|
+
</Modal>
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default BottomSheet;
|
|
150
|
+
|
|
151
|
+
const styles = StyleSheet.create({
|
|
152
|
+
modal: {
|
|
153
|
+
justifyContent: 'flex-end',
|
|
154
|
+
margin: 0,
|
|
155
|
+
},
|
|
156
|
+
bottomSheetContainer: {
|
|
157
|
+
borderTopLeftRadius: moderateScale(22),
|
|
158
|
+
borderTopRightRadius: moderateScale(22),
|
|
159
|
+
overflow: 'hidden',
|
|
160
|
+
position: 'relative',
|
|
161
|
+
flex: 1,
|
|
162
|
+
},
|
|
163
|
+
handleIndicator: {
|
|
164
|
+
width: moderateScale(45),
|
|
165
|
+
height: verticalScale(4),
|
|
166
|
+
borderRadius: moderateScale(3),
|
|
167
|
+
alignSelf: 'center',
|
|
168
|
+
marginVertical: verticalScale(10),
|
|
169
|
+
},
|
|
170
|
+
scrollContent: {
|
|
171
|
+
flex: 1,
|
|
172
|
+
paddingBottom: verticalScale(30),
|
|
173
|
+
paddingHorizontal: moderateScale(12),
|
|
174
|
+
},
|
|
175
|
+
viewContent: {
|
|
176
|
+
paddingBottom: verticalScale(10),
|
|
177
|
+
paddingHorizontal: moderateScale(12),
|
|
178
|
+
flex: 1,
|
|
179
|
+
},
|
|
180
|
+
closeButtonWrapper: {
|
|
181
|
+
position: 'absolute',
|
|
182
|
+
top: verticalScale(10),
|
|
183
|
+
right: moderateScale(14),
|
|
184
|
+
borderRadius: moderateScale(18),
|
|
185
|
+
padding: moderateScale(6),
|
|
186
|
+
zIndex: 1000,
|
|
187
|
+
elevation: 10,
|
|
188
|
+
},
|
|
189
|
+
title: {
|
|
190
|
+
fontSize: RFValue(16),
|
|
191
|
+
fontWeight: '700',
|
|
192
|
+
textAlign: 'center',
|
|
193
|
+
marginBottom: verticalScale(15),
|
|
194
|
+
},
|
|
195
|
+
});
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
Alert,
|
|
10
10
|
Platform,
|
|
11
11
|
type ViewStyle,
|
|
12
|
+
type TextStyle,
|
|
12
13
|
type StyleProp,
|
|
13
14
|
} from 'react-native';
|
|
14
15
|
import { ArrowLeft } from 'lucide-react-native';
|
|
@@ -17,6 +18,7 @@ import { useInternalTheme } from '../../theme/hook/useInternalTheme';
|
|
|
17
18
|
import { scale, verticalScale } from 'react-native-size-matters';
|
|
18
19
|
import { BlurView } from '@react-native-community/blur';
|
|
19
20
|
import type { ThemeOverride } from '../../theme/themes';
|
|
21
|
+
import { Text } from '../Text';
|
|
20
22
|
|
|
21
23
|
type BackBtnProps = {
|
|
22
24
|
size?: number;
|
|
@@ -25,6 +27,8 @@ type BackBtnProps = {
|
|
|
25
27
|
style?: StyleProp<ViewStyle>;
|
|
26
28
|
theme?: ThemeOverride;
|
|
27
29
|
enableBlur?: boolean;
|
|
30
|
+
label?: string;
|
|
31
|
+
textStyle?: StyleProp<TextStyle>;
|
|
28
32
|
};
|
|
29
33
|
|
|
30
34
|
const BackBtn: React.FC<BackBtnProps> = ({
|
|
@@ -34,6 +38,8 @@ const BackBtn: React.FC<BackBtnProps> = ({
|
|
|
34
38
|
style,
|
|
35
39
|
theme,
|
|
36
40
|
enableBlur = false,
|
|
41
|
+
label,
|
|
42
|
+
textStyle,
|
|
37
43
|
}) => {
|
|
38
44
|
const insets = useSafeAreaInsets();
|
|
39
45
|
const { theme: appliedTheme } = useInternalTheme(theme);
|
|
@@ -61,12 +67,14 @@ const BackBtn: React.FC<BackBtnProps> = ({
|
|
|
61
67
|
const hasBackground = !!flattenedStyle.backgroundColor;
|
|
62
68
|
|
|
63
69
|
const shouldRenderBlur = enableBlur && hasBackground;
|
|
70
|
+
const hasLabel = !!label;
|
|
64
71
|
|
|
65
72
|
return (
|
|
66
73
|
<TouchableOpacity
|
|
67
74
|
activeOpacity={0.8}
|
|
68
75
|
style={[
|
|
69
76
|
styles.container,
|
|
77
|
+
hasLabel && styles.containerWithText,
|
|
70
78
|
!hasTopInStyle && { top: calculatedTop },
|
|
71
79
|
style,
|
|
72
80
|
]}
|
|
@@ -86,6 +94,18 @@ const BackBtn: React.FC<BackBtnProps> = ({
|
|
|
86
94
|
)}
|
|
87
95
|
|
|
88
96
|
<ArrowLeft size={size} color={color || appliedTheme.colors.textPrimary} />
|
|
97
|
+
{hasLabel && (
|
|
98
|
+
<Text
|
|
99
|
+
style={[
|
|
100
|
+
styles.text,
|
|
101
|
+
{ color: color || appliedTheme.colors.textPrimary },
|
|
102
|
+
textStyle,
|
|
103
|
+
]}
|
|
104
|
+
color={color || appliedTheme.colors.textPrimary}
|
|
105
|
+
>
|
|
106
|
+
{label}
|
|
107
|
+
</Text>
|
|
108
|
+
)}
|
|
89
109
|
</TouchableOpacity>
|
|
90
110
|
);
|
|
91
111
|
};
|
|
@@ -102,4 +122,17 @@ const styles = StyleSheet.create({
|
|
|
102
122
|
alignItems: 'center',
|
|
103
123
|
overflow: 'hidden',
|
|
104
124
|
},
|
|
125
|
+
containerWithText: {
|
|
126
|
+
flexDirection: 'row',
|
|
127
|
+
borderRadius: scale(20),
|
|
128
|
+
paddingHorizontal: scale(12),
|
|
129
|
+
},
|
|
130
|
+
text: {
|
|
131
|
+
fontSize: scale(14),
|
|
132
|
+
fontWeight: '600',
|
|
133
|
+
marginLeft: scale(8),
|
|
134
|
+
textShadowColor: 'rgba(0, 0, 0, 0.75)',
|
|
135
|
+
textShadowOffset: { width: 0, height: 1 },
|
|
136
|
+
textShadowRadius: 3,
|
|
137
|
+
},
|
|
105
138
|
});
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
|
|
3
|
+
import { ChevronRight, ListVideo } from 'lucide-react-native';
|
|
4
|
+
import { moderateScale, verticalScale } from 'react-native-size-matters';
|
|
5
|
+
import { RFValue } from 'react-native-responsive-fontsize';
|
|
6
|
+
import type { ISeriesItem } from '../types';
|
|
7
|
+
import type { ITheme } from '../../../../theme';
|
|
8
|
+
|
|
9
|
+
interface BottomControlsProps {
|
|
10
|
+
series: ISeriesItem;
|
|
11
|
+
episodeIndex: number;
|
|
12
|
+
videoCurrentTime: number;
|
|
13
|
+
videoDuration: number;
|
|
14
|
+
onEpisodesPress?: () => void;
|
|
15
|
+
theme: ITheme;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const BottomControls: React.FC<BottomControlsProps> = ({
|
|
19
|
+
series,
|
|
20
|
+
episodeIndex,
|
|
21
|
+
videoCurrentTime,
|
|
22
|
+
videoDuration,
|
|
23
|
+
onEpisodesPress,
|
|
24
|
+
theme,
|
|
25
|
+
}) => {
|
|
26
|
+
const progressPercentage =
|
|
27
|
+
videoDuration > 0 ? (videoCurrentTime / videoDuration) * 100 : 0;
|
|
28
|
+
|
|
29
|
+
const truncatedTitle =
|
|
30
|
+
series.title.length <= 25
|
|
31
|
+
? series.title
|
|
32
|
+
: series.title.slice(0, 25) + '...';
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<View style={styles.container}>
|
|
36
|
+
{/* Series Info Section */}
|
|
37
|
+
<View style={styles.seriesInfo}>
|
|
38
|
+
<Text style={styles.seriesTitle}>{truncatedTitle}</Text>
|
|
39
|
+
<Text numberOfLines={2} style={styles.seriesDescription}>
|
|
40
|
+
{series.description}
|
|
41
|
+
</Text>
|
|
42
|
+
</View>
|
|
43
|
+
|
|
44
|
+
{/* Episodes Selector Button */}
|
|
45
|
+
<TouchableOpacity
|
|
46
|
+
style={styles.episodesButton}
|
|
47
|
+
onPress={onEpisodesPress}
|
|
48
|
+
activeOpacity={0.7}
|
|
49
|
+
>
|
|
50
|
+
<View style={styles.episodesButtonContent}>
|
|
51
|
+
<ListVideo
|
|
52
|
+
color={'#fff'}
|
|
53
|
+
width={moderateScale(20)}
|
|
54
|
+
height={moderateScale(20)}
|
|
55
|
+
/>
|
|
56
|
+
<Text style={styles.episodesText}>
|
|
57
|
+
{episodeIndex + 1} / {series.episodes.length} Episodes
|
|
58
|
+
</Text>
|
|
59
|
+
</View>
|
|
60
|
+
<ChevronRight color={'#fff'} size={moderateScale(22)} />
|
|
61
|
+
</TouchableOpacity>
|
|
62
|
+
|
|
63
|
+
{/* Video Progress Bar */}
|
|
64
|
+
<View style={styles.progressBarContainer}>
|
|
65
|
+
<View style={styles.progressBarWrapper}>
|
|
66
|
+
<View
|
|
67
|
+
style={[
|
|
68
|
+
styles.progressBarFill,
|
|
69
|
+
{
|
|
70
|
+
width: `${progressPercentage}%`,
|
|
71
|
+
backgroundColor: theme.colors.primary,
|
|
72
|
+
},
|
|
73
|
+
]}
|
|
74
|
+
/>
|
|
75
|
+
{videoDuration > 0 && (
|
|
76
|
+
<View
|
|
77
|
+
style={[
|
|
78
|
+
styles.progressBarKnob,
|
|
79
|
+
{
|
|
80
|
+
left: `${progressPercentage}%`,
|
|
81
|
+
},
|
|
82
|
+
]}
|
|
83
|
+
/>
|
|
84
|
+
)}
|
|
85
|
+
</View>
|
|
86
|
+
</View>
|
|
87
|
+
</View>
|
|
88
|
+
);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export default BottomControls;
|
|
92
|
+
|
|
93
|
+
const styles = StyleSheet.create({
|
|
94
|
+
container: {
|
|
95
|
+
position: 'absolute',
|
|
96
|
+
bottom: 0,
|
|
97
|
+
zIndex: 10,
|
|
98
|
+
marginHorizontal: moderateScale(8),
|
|
99
|
+
},
|
|
100
|
+
seriesInfo: {
|
|
101
|
+
marginBottom: verticalScale(10),
|
|
102
|
+
},
|
|
103
|
+
seriesTitle: {
|
|
104
|
+
fontSize: RFValue(13),
|
|
105
|
+
fontWeight: '500',
|
|
106
|
+
color: '#fff',
|
|
107
|
+
},
|
|
108
|
+
seriesDescription: {
|
|
109
|
+
fontSize: RFValue(10),
|
|
110
|
+
color: '#fff',
|
|
111
|
+
marginTop: 2.5,
|
|
112
|
+
opacity: 0.9,
|
|
113
|
+
},
|
|
114
|
+
episodesButton: {
|
|
115
|
+
flexDirection: 'row',
|
|
116
|
+
justifyContent: 'space-between',
|
|
117
|
+
alignItems: 'center',
|
|
118
|
+
backgroundColor: 'rgba(0,0,0,0.5)',
|
|
119
|
+
borderRadius: moderateScale(8),
|
|
120
|
+
paddingHorizontal: moderateScale(12),
|
|
121
|
+
paddingVertical: verticalScale(8),
|
|
122
|
+
},
|
|
123
|
+
episodesButtonContent: {
|
|
124
|
+
flexDirection: 'row',
|
|
125
|
+
alignItems: 'center',
|
|
126
|
+
},
|
|
127
|
+
episodesText: {
|
|
128
|
+
fontSize: RFValue(13),
|
|
129
|
+
color: '#fff',
|
|
130
|
+
marginLeft: moderateScale(10),
|
|
131
|
+
},
|
|
132
|
+
progressBarContainer: {
|
|
133
|
+
marginVertical: verticalScale(10),
|
|
134
|
+
marginHorizontal: moderateScale(5),
|
|
135
|
+
},
|
|
136
|
+
progressBarWrapper: {
|
|
137
|
+
height: verticalScale(2),
|
|
138
|
+
backgroundColor: 'rgba(255, 255, 255, 0.3)',
|
|
139
|
+
borderRadius: moderateScale(1),
|
|
140
|
+
position: 'relative',
|
|
141
|
+
},
|
|
142
|
+
progressBarFill: {
|
|
143
|
+
height: '100%',
|
|
144
|
+
// backgroundColor: '#fff',
|
|
145
|
+
borderRadius: moderateScale(1),
|
|
146
|
+
},
|
|
147
|
+
progressBarKnob: {
|
|
148
|
+
position: 'absolute',
|
|
149
|
+
top: -verticalScale(2),
|
|
150
|
+
width: moderateScale(7),
|
|
151
|
+
height: moderateScale(7),
|
|
152
|
+
borderRadius: moderateScale(5),
|
|
153
|
+
backgroundColor: '#fff',
|
|
154
|
+
transform: [{ translateX: -moderateScale(3.5) }],
|
|
155
|
+
},
|
|
156
|
+
});
|