@zezosoft/zezo-ott-react-native-ui-kit 1.0.8 → 1.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/README.md +1 -1
- package/lib/module/components/Account/Account.js +1 -1
- package/lib/module/components/Account/Account.js.map +1 -1
- package/lib/module/components/Auth/AuthProvider/AuthProvider.js +48 -19
- package/lib/module/components/Auth/AuthProvider/AuthProvider.js.map +1 -1
- package/lib/module/components/Auth/Login/LoginWithEmail.js +4 -2
- package/lib/module/components/Auth/Login/LoginWithEmail.js.map +1 -1
- package/lib/module/components/Auth/OTP/OTP.js +15 -1
- package/lib/module/components/Auth/OTP/OTP.js.map +1 -1
- package/lib/module/components/Auth/SignUp/SignUp.js +4 -2
- package/lib/module/components/Auth/SignUp/SignUp.js.map +1 -1
- package/lib/module/components/BlurView/BlurView.js +171 -0
- package/lib/module/components/BlurView/BlurView.js.map +1 -0
- package/lib/module/components/BlurView/index.js +9 -0
- package/lib/module/components/BlurView/index.js.map +1 -0
- package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
- package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
- package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/Four.js +2 -3
- package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/One.js +1 -2
- package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
- package/lib/module/components/Content/Card/Styles/Two.js +1 -2
- package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
- package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
- package/lib/module/components/Content/Content.js +4 -2
- package/lib/module/components/Content/Content.js.map +1 -1
- package/lib/module/components/Content/Sections.js.map +1 -1
- package/lib/module/components/ContentView/ContentView.js +4 -2
- package/lib/module/components/ContentView/ContentView.js.map +1 -1
- package/lib/module/components/ContentView/MoreContentList.js.map +1 -1
- package/lib/module/components/ContentView/components/CastCard.js +2 -1
- package/lib/module/components/ContentView/components/CastCard.js.map +1 -1
- package/lib/module/components/ContentView/components/EpisodeCard.js +3 -3
- package/lib/module/components/ContentView/components/EpisodeCard.js.map +1 -1
- package/lib/module/components/ContentView/components/GenreTags.js.map +1 -1
- package/lib/module/components/ContentView/components/MiniInfo.js +64 -19
- package/lib/module/components/ContentView/components/MiniInfo.js.map +1 -1
- package/lib/module/components/ContentView/components/Title.js.map +1 -1
- package/lib/module/components/Search/One.js.map +1 -1
- package/lib/module/components/Settings/AppSettings.js +1 -1
- package/lib/module/components/Settings/AppSettings.js.map +1 -1
- package/lib/module/components/Subscription/SubOne.js +340 -14
- package/lib/module/components/Subscription/SubOne.js.map +1 -1
- package/lib/module/components/TabBar/One.js +71 -108
- package/lib/module/components/TabBar/One.js.map +1 -1
- package/lib/module/components/TabBar/Three.js +63 -78
- package/lib/module/components/TabBar/Three.js.map +1 -1
- package/lib/module/components/TabBar/Two.js +110 -106
- package/lib/module/components/TabBar/Two.js.map +1 -1
- package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js +324 -0
- package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js.map +1 -0
- package/lib/module/components/User/WatchHistory/WatchHistory.js.map +1 -1
- package/lib/module/components/User/WatchLater/WatchLater.js.map +1 -1
- package/lib/module/components/User/index.js +2 -1
- package/lib/module/components/User/index.js.map +1 -1
- package/lib/module/components/index.js +1 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/hooks/useNavigationMode.js +34 -0
- package/lib/module/hooks/useNavigationMode.js.map +1 -0
- package/lib/module/utils/Spacing.js +26 -0
- package/lib/module/utils/Spacing.js.map +1 -0
- package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts +1 -0
- package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts.map +1 -1
- package/lib/typescript/src/components/Auth/Login/LoginWithEmail.d.ts.map +1 -1
- package/lib/typescript/src/components/Auth/OTP/OTP.d.ts +2 -0
- package/lib/typescript/src/components/Auth/OTP/OTP.d.ts.map +1 -1
- package/lib/typescript/src/components/Auth/SignUp/SignUp.d.ts.map +1 -1
- package/lib/typescript/src/components/Auth/index.d.ts +2 -0
- package/lib/typescript/src/components/Auth/index.d.ts.map +1 -1
- package/lib/typescript/src/components/BlurView/BlurView.d.ts +48 -0
- package/lib/typescript/src/components/BlurView/BlurView.d.ts.map +1 -0
- package/lib/typescript/src/components/BlurView/index.d.ts +7 -0
- package/lib/typescript/src/components/BlurView/index.d.ts.map +1 -0
- package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Sliders/index.d.ts +2 -2
- package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/One.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts +2 -1
- package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +1 -1
- package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts +1 -1
- package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Card/index.d.ts +24 -24
- package/lib/typescript/src/components/Content/Content.d.ts +2 -1
- package/lib/typescript/src/components/Content/Content.d.ts.map +1 -1
- package/lib/typescript/src/components/Content/Sections.d.ts +2 -1
- package/lib/typescript/src/components/Content/Sections.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/ContentView.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/ContentView.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/MoreContentList.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/MoreContentList.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/CastCard.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/components/CastCard.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts +18 -2
- package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts.map +1 -1
- package/lib/typescript/src/components/ContentView/components/Title.d.ts +1 -1
- package/lib/typescript/src/components/ContentView/components/Title.d.ts.map +1 -1
- package/lib/typescript/src/components/Search/One.d.ts +2 -1
- package/lib/typescript/src/components/Search/One.d.ts.map +1 -1
- package/lib/typescript/src/components/Subscription/SubOne.d.ts +6 -0
- package/lib/typescript/src/components/Subscription/SubOne.d.ts.map +1 -1
- package/lib/typescript/src/components/Subscription/index.d.ts.map +1 -1
- package/lib/typescript/src/components/TabBar/One.d.ts +2 -2
- package/lib/typescript/src/components/TabBar/One.d.ts.map +1 -1
- package/lib/typescript/src/components/TabBar/Three.d.ts +3 -2
- package/lib/typescript/src/components/TabBar/Three.d.ts.map +1 -1
- package/lib/typescript/src/components/TabBar/Two.d.ts +13 -4
- package/lib/typescript/src/components/TabBar/Two.d.ts.map +1 -1
- package/lib/typescript/src/components/TabBar/index.d.ts +1 -1
- package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts +50 -0
- package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts.map +1 -0
- package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts +1 -1
- package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts.map +1 -1
- package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts +1 -1
- package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts.map +1 -1
- package/lib/typescript/src/components/User/index.d.ts +2 -1
- package/lib/typescript/src/components/User/index.d.ts.map +1 -1
- package/lib/typescript/src/components/index.d.ts +1 -0
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useNavigationMode.d.ts +14 -0
- package/lib/typescript/src/hooks/useNavigationMode.d.ts.map +1 -0
- package/lib/typescript/src/types/content/content-view.types.d.ts +3 -1
- package/lib/typescript/src/types/content/content-view.types.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/types/sections/index.d.ts +1 -1
- package/lib/typescript/src/types/sections/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/Spacing.d.ts +16 -0
- package/lib/typescript/src/utils/Spacing.d.ts.map +1 -0
- package/package.json +10 -5
- package/src/components/Account/Account.tsx +1 -1
- package/src/components/Auth/AuthProvider/AuthProvider.tsx +82 -37
- package/src/components/Auth/Login/LoginWithEmail.tsx +9 -2
- package/src/components/Auth/OTP/OTP.tsx +37 -1
- package/src/components/Auth/SignUp/SignUp.tsx +9 -2
- package/src/components/BlurView/BlurView.tsx +199 -0
- package/src/components/BlurView/index.ts +7 -0
- package/src/components/Content/Card/NowWatching/NowWatching.tsx +2 -5
- package/src/components/Content/Card/Sliders/Styles/One.tsx +2 -1
- package/src/components/Content/Card/Sliders/Styles/Two.tsx +2 -1
- package/src/components/Content/Card/Styles/Five.tsx +1 -1
- package/src/components/Content/Card/Styles/Four.tsx +4 -2
- package/src/components/Content/Card/Styles/One.tsx +1 -1
- package/src/components/Content/Card/Styles/RotateInOut.tsx +1 -1
- package/src/components/Content/Card/Styles/Six.tsx +1 -1
- package/src/components/Content/Card/Styles/Three.tsx +1 -1
- package/src/components/Content/Card/Styles/TopTen.tsx +1 -1
- package/src/components/Content/Card/Styles/Two.tsx +1 -1
- package/src/components/Content/Card/components/CardPoster.tsx +1 -1
- package/src/components/Content/Card/components/RentOrBuyIcon.tsx +1 -1
- package/src/components/Content/Content.tsx +7 -5
- package/src/components/Content/Sections.tsx +2 -1
- package/src/components/ContentView/ContentView.tsx +8 -1
- package/src/components/ContentView/MoreContentList.tsx +1 -1
- package/src/components/ContentView/components/AboutSection.tsx +1 -1
- package/src/components/ContentView/components/CastCard.tsx +2 -1
- package/src/components/ContentView/components/EpisodeCard.tsx +5 -1
- package/src/components/ContentView/components/GenreTags.tsx +1 -1
- package/src/components/ContentView/components/MiniInfo.tsx +100 -23
- package/src/components/ContentView/components/Title.tsx +1 -1
- package/src/components/Search/One.tsx +2 -6
- package/src/components/Settings/AppSettings.tsx +1 -1
- package/src/components/Subscription/SubOne.tsx +422 -12
- package/src/components/TabBar/One.tsx +79 -141
- package/src/components/TabBar/Three.tsx +84 -99
- package/src/components/TabBar/Two.tsx +139 -110
- package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +439 -0
- package/src/components/User/WatchHistory/WatchHistory.tsx +1 -1
- package/src/components/User/WatchLater/WatchLater.tsx +1 -1
- package/src/components/User/index.ts +8 -1
- package/src/components/index.ts +1 -0
- package/src/hooks/useNavigationMode.ts +35 -0
- package/src/types/content/content-view.types.ts +6 -1
- package/src/types/index.ts +1 -1
- package/src/types/sections/index.ts +1 -1
- package/src/utils/Spacing.ts +27 -0
- package/lib/module/types/content/index.js +0 -2
- package/lib/module/types/content/index.js.map +0 -1
- package/lib/typescript/src/types/content/index.d.ts +0 -174
- package/lib/typescript/src/types/content/index.d.ts.map +0 -1
- package/src/types/content/index.ts +0 -194
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Naresh Dhamu
|
|
3
|
+
* @lastModified Thu 06 Nov 2025 at 05:00 PM
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { View, StyleSheet, type ViewStyle, type StyleProp } from 'react-native';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* BlurView Props - Same as @react-native-community/blur
|
|
11
|
+
*/
|
|
12
|
+
export interface BlurViewProps {
|
|
13
|
+
/** Style of the BlurView container */
|
|
14
|
+
style?: StyleProp<ViewStyle>;
|
|
15
|
+
|
|
16
|
+
/** The blur type (tint) - exactly matches community lib */
|
|
17
|
+
blurType?:
|
|
18
|
+
| 'dark'
|
|
19
|
+
| 'light'
|
|
20
|
+
| 'xlight'
|
|
21
|
+
| 'extraDark'
|
|
22
|
+
| 'regular'
|
|
23
|
+
| 'prominent'
|
|
24
|
+
| 'chromeMaterial'
|
|
25
|
+
| 'material'
|
|
26
|
+
| 'thickMaterial'
|
|
27
|
+
| 'thinMaterial'
|
|
28
|
+
| 'ultraThinMaterial'
|
|
29
|
+
| 'chromeMaterialDark'
|
|
30
|
+
| 'materialDark'
|
|
31
|
+
| 'thickMaterialDark'
|
|
32
|
+
| 'thinMaterialDark'
|
|
33
|
+
| 'ultraThinMaterialDark'
|
|
34
|
+
| 'chromeMaterialLight'
|
|
35
|
+
| 'materialLight'
|
|
36
|
+
| 'thickMaterialLight'
|
|
37
|
+
| 'thinMaterialLight'
|
|
38
|
+
| 'ultraThinMaterialLight';
|
|
39
|
+
|
|
40
|
+
/** The blur intensity amount (0-100) - exactly matches community lib */
|
|
41
|
+
blurAmount?: number;
|
|
42
|
+
|
|
43
|
+
/** Fallback color for reduced transparency - exactly matches community lib */
|
|
44
|
+
reducedTransparencyFallbackColor?: string;
|
|
45
|
+
|
|
46
|
+
/** iOS only: Overlay color - exactly matches community lib */
|
|
47
|
+
overlayColor?: string;
|
|
48
|
+
|
|
49
|
+
/** Android only: Downsample factor (higher = more blur but lower quality) */
|
|
50
|
+
downsampleFactor?: number;
|
|
51
|
+
|
|
52
|
+
/** Android only: Blur radius */
|
|
53
|
+
blurRadius?: number;
|
|
54
|
+
|
|
55
|
+
/** Child components */
|
|
56
|
+
children?: React.ReactNode;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Custom BlurView - 100% Compatible with @react-native-community/blur
|
|
61
|
+
*
|
|
62
|
+
* ✅ Same API as @react-native-community/blur
|
|
63
|
+
* ✅ Works on iOS, Android, and Web
|
|
64
|
+
* ✅ Drop-in replacement - just change the import
|
|
65
|
+
* 🚫 Simulates blur (no live backdrop) using semi-transparent layers
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```tsx
|
|
69
|
+
* <BlurView
|
|
70
|
+
* style={styles.blur}
|
|
71
|
+
* blurType="light"
|
|
72
|
+
* blurAmount={10}
|
|
73
|
+
* reducedTransparencyFallbackColor="white"
|
|
74
|
+
* />
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
const BlurView: React.FC<BlurViewProps> = ({
|
|
78
|
+
style,
|
|
79
|
+
blurType = 'light',
|
|
80
|
+
blurAmount = 100,
|
|
81
|
+
reducedTransparencyFallbackColor,
|
|
82
|
+
overlayColor,
|
|
83
|
+
children,
|
|
84
|
+
}) => {
|
|
85
|
+
// Clamp blur amount to 0-100 range (same as community lib)
|
|
86
|
+
const intensity = Math.max(0, Math.min(100, blurAmount));
|
|
87
|
+
|
|
88
|
+
// Get tint style based on blur type
|
|
89
|
+
const tintStyle = getBlurTintStyle(
|
|
90
|
+
blurType,
|
|
91
|
+
intensity,
|
|
92
|
+
reducedTransparencyFallbackColor,
|
|
93
|
+
overlayColor
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
// Platform-specific rendering
|
|
97
|
+
return (
|
|
98
|
+
<View style={[styles.container, style]}>
|
|
99
|
+
{/* Background blur layer */}
|
|
100
|
+
<View style={[StyleSheet.absoluteFillObject, tintStyle]} />
|
|
101
|
+
|
|
102
|
+
{/* Content layer */}
|
|
103
|
+
<View pointerEvents="box-none" style={styles.content}>
|
|
104
|
+
{children}
|
|
105
|
+
</View>
|
|
106
|
+
</View>
|
|
107
|
+
);
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Get blur tint style based on blurType
|
|
112
|
+
* Matches the exact behavior of @react-native-community/blur
|
|
113
|
+
*/
|
|
114
|
+
function getBlurTintStyle(
|
|
115
|
+
blurType: string,
|
|
116
|
+
intensity: number,
|
|
117
|
+
fallbackColor?: string,
|
|
118
|
+
overlayColor?: string
|
|
119
|
+
): ViewStyle {
|
|
120
|
+
// If overlayColor is provided, use it (iOS behavior)
|
|
121
|
+
if (overlayColor) {
|
|
122
|
+
return { backgroundColor: overlayColor };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Calculate opacity based on intensity (0-100)
|
|
126
|
+
// Higher intensity = more opaque = stronger blur effect
|
|
127
|
+
const opacity = Math.min(0.95, intensity / 100);
|
|
128
|
+
const lightOpacity = opacity * 0.7;
|
|
129
|
+
const darkOpacity = opacity * 0.8;
|
|
130
|
+
|
|
131
|
+
// Match exact blur types from @react-native-community/blur
|
|
132
|
+
switch (blurType) {
|
|
133
|
+
// Dark blur types
|
|
134
|
+
case 'dark':
|
|
135
|
+
return { backgroundColor: `rgba(0, 0, 0, ${darkOpacity})` };
|
|
136
|
+
case 'extraDark':
|
|
137
|
+
return {
|
|
138
|
+
backgroundColor: `rgba(0, 0, 0, ${Math.min(0.98, darkOpacity * 1.2)})`,
|
|
139
|
+
};
|
|
140
|
+
case 'materialDark':
|
|
141
|
+
case 'thickMaterialDark':
|
|
142
|
+
case 'chromeMaterialDark':
|
|
143
|
+
return { backgroundColor: `rgba(28, 28, 30, ${darkOpacity})` };
|
|
144
|
+
case 'thinMaterialDark':
|
|
145
|
+
return { backgroundColor: `rgba(28, 28, 30, ${darkOpacity * 0.7})` };
|
|
146
|
+
case 'ultraThinMaterialDark':
|
|
147
|
+
return { backgroundColor: `rgba(28, 28, 30, ${darkOpacity * 0.5})` };
|
|
148
|
+
|
|
149
|
+
// Light blur types
|
|
150
|
+
case 'light':
|
|
151
|
+
return {
|
|
152
|
+
backgroundColor:
|
|
153
|
+
fallbackColor || `rgba(255, 255, 255, ${lightOpacity})`,
|
|
154
|
+
};
|
|
155
|
+
case 'xlight':
|
|
156
|
+
return { backgroundColor: `rgba(255, 255, 255, ${lightOpacity * 0.6})` };
|
|
157
|
+
case 'materialLight':
|
|
158
|
+
case 'chromeMaterialLight':
|
|
159
|
+
return { backgroundColor: `rgba(255, 255, 255, ${lightOpacity})` };
|
|
160
|
+
case 'thickMaterialLight':
|
|
161
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity})` };
|
|
162
|
+
case 'thinMaterialLight':
|
|
163
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity * 0.7})` };
|
|
164
|
+
case 'ultraThinMaterialLight':
|
|
165
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity * 0.5})` };
|
|
166
|
+
|
|
167
|
+
// Regular/prominent types
|
|
168
|
+
case 'regular':
|
|
169
|
+
case 'prominent':
|
|
170
|
+
return { backgroundColor: `rgba(255, 255, 255, ${lightOpacity * 0.8})` };
|
|
171
|
+
case 'material':
|
|
172
|
+
case 'chromeMaterial':
|
|
173
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity})` };
|
|
174
|
+
case 'thickMaterial':
|
|
175
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity * 1.1})` };
|
|
176
|
+
case 'thinMaterial':
|
|
177
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity * 0.7})` };
|
|
178
|
+
case 'ultraThinMaterial':
|
|
179
|
+
return { backgroundColor: `rgba(242, 242, 247, ${lightOpacity * 0.5})` };
|
|
180
|
+
|
|
181
|
+
// Default
|
|
182
|
+
default:
|
|
183
|
+
return {
|
|
184
|
+
backgroundColor:
|
|
185
|
+
fallbackColor || `rgba(255, 255, 255, ${lightOpacity})`,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const styles = StyleSheet.create({
|
|
191
|
+
container: {
|
|
192
|
+
overflow: 'hidden',
|
|
193
|
+
},
|
|
194
|
+
content: {
|
|
195
|
+
flex: 1,
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
export default BlurView;
|
|
@@ -28,15 +28,12 @@ import Animated, {
|
|
|
28
28
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
29
29
|
import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
30
30
|
import NavigateToMore from '../components/NavigateToMore';
|
|
31
|
-
import type {
|
|
32
|
-
IContentData,
|
|
33
|
-
IGetSectionData,
|
|
34
|
-
MoreFetchData,
|
|
35
|
-
} from '../../../../types';
|
|
31
|
+
import type { IGetSectionData, MoreFetchData } from '../../../../types';
|
|
36
32
|
import type { ITheme, ThemeOverride } from '../../../../theme/themes';
|
|
37
33
|
import { Text } from '../../../Text';
|
|
38
34
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
39
35
|
import RentOrBuyIcon from '../components/RentOrBuyIcon';
|
|
36
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
40
37
|
|
|
41
38
|
export interface IHistoryItem {
|
|
42
39
|
_id: string;
|
|
@@ -18,11 +18,12 @@ import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
|
|
|
18
18
|
import { Play } from 'lucide-react-native';
|
|
19
19
|
import { Text } from '../../../../Text';
|
|
20
20
|
import Display from '../../../../../utils/Display';
|
|
21
|
-
import type {
|
|
21
|
+
import type { ISectionContent } from '../../../../../types';
|
|
22
22
|
import { useInternalTheme } from '../../../../../theme/hook/useInternalTheme';
|
|
23
23
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
24
24
|
import RentOrBuyIcon from '../../components/RentOrBuyIcon';
|
|
25
25
|
import type { ThemeOverride } from '../../../../../theme/themes';
|
|
26
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
26
27
|
|
|
27
28
|
// Constants
|
|
28
29
|
const DEFAULT_SKELETON_COUNT = 3;
|
|
@@ -18,10 +18,11 @@ import { Text } from '../../../../Text';
|
|
|
18
18
|
import { useInternalTheme } from '../../../../../theme/hook/useInternalTheme';
|
|
19
19
|
import Display from '../../../../../utils/Display';
|
|
20
20
|
import { ThumbnailCard } from '../../components/ThumbnailCard';
|
|
21
|
-
import type {
|
|
21
|
+
import type { ISectionContent } from '../../../../../types';
|
|
22
22
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
23
23
|
import RentOrBuyIcon from '../../components/RentOrBuyIcon';
|
|
24
24
|
import type { ThemeOverride } from '../../../../../theme/themes';
|
|
25
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
25
26
|
|
|
26
27
|
const FULL_WIDTH = Display.fullWidth;
|
|
27
28
|
const FULL_HEIGHT = FULL_WIDTH * (9 / 16);
|
|
@@ -26,12 +26,12 @@ import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
|
26
26
|
import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
27
27
|
import type { ITheme, ThemeOverride } from '../../../../theme/themes';
|
|
28
28
|
import type {
|
|
29
|
-
IContentData,
|
|
30
29
|
IGetSectionData,
|
|
31
30
|
ISectionContent,
|
|
32
31
|
MoreFetchData,
|
|
33
32
|
} from '../../../../types';
|
|
34
33
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
34
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
35
35
|
|
|
36
36
|
const DEFAULT_ITEM_WIDTH = moderateScale(140);
|
|
37
37
|
const DEFAULT_BORDER_RADIUS = moderateScale(5);
|
|
@@ -24,13 +24,13 @@ import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
|
24
24
|
import CardPoster from '../components/CardPoster';
|
|
25
25
|
import FastImage from 'react-native-fast-image';
|
|
26
26
|
import type {
|
|
27
|
-
IContentData,
|
|
28
27
|
IGetSectionData,
|
|
29
28
|
ISectionContent,
|
|
30
29
|
MoreFetchData,
|
|
31
30
|
} from '../../../../types';
|
|
32
31
|
import type { ITheme, ThemeOverride } from '../../../../theme/themes';
|
|
33
32
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
33
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
34
34
|
|
|
35
35
|
// default values
|
|
36
36
|
const DEFAULT_ITEM_WIDTH = moderateScale(100);
|
|
@@ -234,7 +234,9 @@ const MovieCardFour: React.FC<MovieCardFourProps> = ({
|
|
|
234
234
|
ref={flatListRef}
|
|
235
235
|
data={data}
|
|
236
236
|
horizontal
|
|
237
|
-
keyExtractor={(item, index) =>
|
|
237
|
+
keyExtractor={(item, index) =>
|
|
238
|
+
item._id || `item-${item.slug || item.name || index}`
|
|
239
|
+
}
|
|
238
240
|
renderItem={renderItem}
|
|
239
241
|
showsHorizontalScrollIndicator={false}
|
|
240
242
|
contentContainerStyle={styles.listContent}
|
|
@@ -23,13 +23,13 @@ import CardPoster from '../components/CardPoster';
|
|
|
23
23
|
import NavigateToMore from '../components/NavigateToMore';
|
|
24
24
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
25
25
|
import type {
|
|
26
|
-
IContentData,
|
|
27
26
|
IGetSectionData,
|
|
28
27
|
ISectionContent,
|
|
29
28
|
MoreFetchData,
|
|
30
29
|
} from '../../../../types';
|
|
31
30
|
import type { ITheme, ThemeOverride } from '../../../../theme/themes';
|
|
32
31
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
32
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
33
33
|
|
|
34
34
|
// Constants
|
|
35
35
|
const DEFAULT_ITEM_WIDTH = moderateScale(105);
|
|
@@ -25,13 +25,13 @@ import NavigateToMore from '../components/NavigateToMore';
|
|
|
25
25
|
|
|
26
26
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
27
27
|
import type {
|
|
28
|
-
IContentData,
|
|
29
28
|
IGetSectionData,
|
|
30
29
|
ISectionContent,
|
|
31
30
|
MoreFetchData,
|
|
32
31
|
} from '../../../../types';
|
|
33
32
|
import type { ThemeOverride } from '../../../../theme/themes';
|
|
34
33
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
34
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
35
35
|
|
|
36
36
|
const { width, height } = Dimensions.get('window');
|
|
37
37
|
|
|
@@ -27,13 +27,13 @@ import { Text } from '../../../Text';
|
|
|
27
27
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
28
28
|
import type { ThemeOverride } from '../../../../theme/themes';
|
|
29
29
|
import type {
|
|
30
|
-
IContentData,
|
|
31
30
|
IGetSectionData,
|
|
32
31
|
ISectionContent,
|
|
33
32
|
MoreFetchData,
|
|
34
33
|
} from '../../../../types';
|
|
35
34
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
36
35
|
import RentOrBuyIcon from '../components/RentOrBuyIcon';
|
|
36
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
37
37
|
const DEFAULT_ITEM_WIDTH = moderateScale(160);
|
|
38
38
|
const DEFAULT_BORDER_RADIUS = moderateScale(5);
|
|
39
39
|
const DEFAULT_SKELETON_COUNT = 3;
|
|
@@ -25,13 +25,13 @@ import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
|
25
25
|
import CardPoster from '../components/CardPoster';
|
|
26
26
|
import NavigateToMore from '../components/NavigateToMore';
|
|
27
27
|
import type {
|
|
28
|
-
IContentData,
|
|
29
28
|
IGetSectionData,
|
|
30
29
|
ISectionContent,
|
|
31
30
|
MoreFetchData,
|
|
32
31
|
} from '../../../../types';
|
|
33
32
|
import type { ThemeOverride } from '../../../../theme/themes';
|
|
34
33
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
34
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
35
35
|
|
|
36
36
|
const { width, height } = Dimensions.get('window');
|
|
37
37
|
|
|
@@ -21,7 +21,6 @@ import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
|
21
21
|
import NavigateToMore from '../components/NavigateToMore';
|
|
22
22
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
23
23
|
import type {
|
|
24
|
-
IContentData,
|
|
25
24
|
IGetSectionData,
|
|
26
25
|
ISectionContent,
|
|
27
26
|
MoreFetchData,
|
|
@@ -32,6 +31,7 @@ import LinearGradient from 'react-native-linear-gradient';
|
|
|
32
31
|
import { Text } from '../../../Text';
|
|
33
32
|
import CardPoster from '../components/CardPoster';
|
|
34
33
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
34
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
35
35
|
|
|
36
36
|
const DEFAULT_ITEM_WIDTH = moderateScale(120);
|
|
37
37
|
const DEFAULT_ITEM_HEIGHT = moderateScale(180);
|
|
@@ -22,7 +22,6 @@ import { moderateScale, verticalScale } from 'react-native-size-matters';
|
|
|
22
22
|
|
|
23
23
|
import { usePaginatedSection } from '../../../../hooks/usePaginatedSection';
|
|
24
24
|
import type {
|
|
25
|
-
IContentData,
|
|
26
25
|
IGetSectionData,
|
|
27
26
|
ISectionContent,
|
|
28
27
|
MoreFetchData,
|
|
@@ -32,6 +31,7 @@ import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
|
|
|
32
31
|
import NavigateToMore from '../components/NavigateToMore';
|
|
33
32
|
import CardPoster from '../components/CardPoster';
|
|
34
33
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
34
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
35
35
|
|
|
36
36
|
// Defaults
|
|
37
37
|
const DEFAULT_WIDTH = moderateScale(172);
|
|
@@ -14,8 +14,8 @@ import { scale } from 'react-native-size-matters';
|
|
|
14
14
|
import { Text } from '../../../Text';
|
|
15
15
|
import { ImageOff } from 'lucide-react-native';
|
|
16
16
|
import type { ITheme } from '../../../../theme/themes';
|
|
17
|
-
import type { IContentData } from '../../../../types';
|
|
18
17
|
import RentOrBuyIcon from './RentOrBuyIcon';
|
|
18
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
19
19
|
|
|
20
20
|
export type CardPosterProps = {
|
|
21
21
|
content_offering_type?: IContentData['content_offering_type'];
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { View, StyleSheet, type StyleProp, type ViewStyle } from 'react-native';
|
|
3
3
|
import Svg, { Path } from 'react-native-svg';
|
|
4
4
|
import { scale } from 'react-native-size-matters';
|
|
5
|
-
import type { IContentData } from '
|
|
5
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
6
6
|
import type { ITheme } from '../../../../theme/themes';
|
|
7
7
|
|
|
8
8
|
interface RentOrBuyIconProps {
|
|
@@ -12,20 +12,22 @@ import {
|
|
|
12
12
|
type StyleProp,
|
|
13
13
|
type ViewStyle,
|
|
14
14
|
} from 'react-native';
|
|
15
|
-
import { scale } from 'react-native-size-matters';
|
|
15
|
+
import { scale, verticalScale } from 'react-native-size-matters';
|
|
16
16
|
import Animated, {
|
|
17
17
|
type AnimatedStyle,
|
|
18
18
|
type SharedValue,
|
|
19
19
|
} from 'react-native-reanimated';
|
|
20
20
|
|
|
21
21
|
import SectionType from './Sections';
|
|
22
|
-
import type {
|
|
22
|
+
import type { IGetSectionData, MoreFetchData } from '../../types';
|
|
23
23
|
import { dummySections } from '../../constants/dummySections';
|
|
24
24
|
import CategoryCard, { type ICategory } from './Card/Category/Category';
|
|
25
25
|
import type { IHistoryItem } from './Card/NowWatching/NowWatching';
|
|
26
26
|
import type { ThemeOverride } from '../../theme/themes';
|
|
27
27
|
import { NoContentFallback, type NoContentFallbackProps } from '../Fallbacks';
|
|
28
28
|
import { useInternalTheme } from '../../theme/hook';
|
|
29
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
30
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
29
31
|
|
|
30
32
|
export interface ICustomComponentsForContent {
|
|
31
33
|
type: string;
|
|
@@ -150,6 +152,7 @@ export const Content: React.FC<IContentProps> = ({
|
|
|
150
152
|
isLoading,
|
|
151
153
|
noContentFallbackProps,
|
|
152
154
|
}) => {
|
|
155
|
+
const insets = useSafeAreaInsets();
|
|
153
156
|
const sectionData = useMemo<IGetSectionData[]>(
|
|
154
157
|
() => contentData?.sectionData ?? [],
|
|
155
158
|
[contentData?.sectionData]
|
|
@@ -247,9 +250,8 @@ export const Content: React.FC<IContentProps> = ({
|
|
|
247
250
|
}
|
|
248
251
|
onEndReachedThreshold={0.7}
|
|
249
252
|
contentContainerStyle={[
|
|
250
|
-
{
|
|
251
|
-
|
|
252
|
-
},
|
|
253
|
+
{ paddingBottom: verticalScale(100) + insets.bottom },
|
|
254
|
+
|
|
253
255
|
contentContainerStyle,
|
|
254
256
|
]}
|
|
255
257
|
/>
|
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
import Sliders from './Card/Sliders';
|
|
7
7
|
import Cards from './Card';
|
|
8
|
-
import type {
|
|
8
|
+
import type { IGetSectionData, MoreFetchData } from '../../types';
|
|
9
9
|
import type { IHistoryItem } from './Card/NowWatching/NowWatching';
|
|
10
10
|
import type { ICategory } from './Card/Category/Category';
|
|
11
11
|
import type { ThemeOverride } from '../../theme/themes';
|
|
12
12
|
import type { IContentLoading } from './Content';
|
|
13
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
13
14
|
|
|
14
15
|
export interface ICustomComponentsForSections {
|
|
15
16
|
type: string;
|
|
@@ -33,6 +33,7 @@ export const ContentView = ({
|
|
|
33
33
|
recommendedContentCardStyles,
|
|
34
34
|
history,
|
|
35
35
|
episodeCardMode,
|
|
36
|
+
pricingAndExpiryInfo,
|
|
36
37
|
}: ComponentProps) => {
|
|
37
38
|
const { theme: appliedTheme } = useInternalTheme(theme);
|
|
38
39
|
const seekTime = history?.currentTime || 0;
|
|
@@ -95,7 +96,13 @@ export const ContentView = ({
|
|
|
95
96
|
isLoading={isLoading}
|
|
96
97
|
style={genreTagsStyles}
|
|
97
98
|
/>
|
|
98
|
-
<MiniInfo
|
|
99
|
+
<MiniInfo
|
|
100
|
+
content={content}
|
|
101
|
+
theme={theme}
|
|
102
|
+
isLoading={isLoading}
|
|
103
|
+
{...pricingAndExpiryInfo}
|
|
104
|
+
/>
|
|
105
|
+
|
|
99
106
|
<AboutSection
|
|
100
107
|
theme={appliedTheme}
|
|
101
108
|
description={content?.description}
|
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
} from 'react-native';
|
|
14
14
|
import { scale, verticalScale } from 'react-native-size-matters';
|
|
15
15
|
import Display from '../../utils/Display';
|
|
16
|
-
import type { IContentData } from '../../types';
|
|
17
16
|
import { Text } from '../Text';
|
|
18
17
|
import { View } from '../View';
|
|
19
18
|
import AppHeader, { type AppHeaderProps } from '../Headers/AppHeader';
|
|
@@ -23,6 +22,7 @@ import type { ThemeOverride } from '../../theme/themes';
|
|
|
23
22
|
import { useInternalTheme } from '../../theme/hook';
|
|
24
23
|
import Animated from 'react-native-reanimated';
|
|
25
24
|
import { Search } from 'lucide-react-native';
|
|
25
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
26
26
|
|
|
27
27
|
interface Props {
|
|
28
28
|
headerProps?: AppHeaderProps;
|
|
@@ -18,7 +18,7 @@ import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
|
|
|
18
18
|
import { scale, verticalScale } from 'react-native-size-matters';
|
|
19
19
|
import type { ITheme } from '../../../theme/themes';
|
|
20
20
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
21
|
-
import type { IContentData } from '
|
|
21
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
22
22
|
|
|
23
23
|
type Props = {
|
|
24
24
|
theme: ITheme;
|
|
@@ -18,8 +18,8 @@ import FastImage, { type ImageStyle } from 'react-native-fast-image';
|
|
|
18
18
|
import { scale } from 'react-native-size-matters';
|
|
19
19
|
import { Text } from '../../Text';
|
|
20
20
|
import type { ITheme } from '../../../theme/themes';
|
|
21
|
-
import type { IContentCast } from '../../../types';
|
|
22
21
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
22
|
+
import type { IContentCast } from '@zezosoft/zezo-ott-api-client';
|
|
23
23
|
|
|
24
24
|
type StyleProps = {
|
|
25
25
|
container?: StyleProp<ViewStyle>;
|
|
@@ -61,6 +61,7 @@ export const CastCard = ({
|
|
|
61
61
|
name: '',
|
|
62
62
|
avatar: '',
|
|
63
63
|
castType: '',
|
|
64
|
+
type: 'actor',
|
|
64
65
|
}));
|
|
65
66
|
|
|
66
67
|
const listData = isLoading ? placeholderData : (data ?? []);
|
|
@@ -10,12 +10,15 @@ import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
|
|
|
10
10
|
import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
|
|
11
11
|
import { Text } from '../../Text';
|
|
12
12
|
import Display from '../../../utils/Display';
|
|
13
|
-
import type { IContentEpisodes, IContentSeasons } from '../../../types';
|
|
14
13
|
import type { ITheme, ThemeOverride } from '../../../theme/themes';
|
|
15
14
|
import { ThumbnailCard } from '../../Content/Card/components/ThumbnailCard';
|
|
16
15
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
17
16
|
import RentOrBuyIcon from '../../Content/Card/components/RentOrBuyIcon';
|
|
18
17
|
import { useInternalTheme } from '../../../theme/hook';
|
|
18
|
+
import type {
|
|
19
|
+
IContentEpisodes,
|
|
20
|
+
IContentSeasons,
|
|
21
|
+
} from '@zezosoft/zezo-ott-api-client';
|
|
19
22
|
|
|
20
23
|
// Constants
|
|
21
24
|
const SKELETON_COUNT = 3;
|
|
@@ -367,6 +370,7 @@ export const EpisodeCard = ({
|
|
|
367
370
|
source_type: 'HLS',
|
|
368
371
|
content_offering_type: 'FREE',
|
|
369
372
|
status: true,
|
|
373
|
+
data: '',
|
|
370
374
|
}}
|
|
371
375
|
onPress={onPress}
|
|
372
376
|
style={{ width: cardWidth }}
|
|
@@ -14,9 +14,9 @@ import {
|
|
|
14
14
|
import { Text } from '../../Text';
|
|
15
15
|
import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
|
|
16
16
|
import { scale, verticalScale } from 'react-native-size-matters';
|
|
17
|
-
import type { IContentData } from '../../../types';
|
|
18
17
|
import type { ITheme } from '../../../theme/themes';
|
|
19
18
|
import { RFValue } from 'react-native-responsive-fontsize';
|
|
19
|
+
import type { IContentData } from '@zezosoft/zezo-ott-api-client';
|
|
20
20
|
|
|
21
21
|
type Props = {
|
|
22
22
|
genres?: IContentData['genres'];
|