kasunk99-livestream-core 0.3.9 → 0.3.11
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiveStreamViewerItem.d.ts","sourceRoot":"","sources":["../../src/components/LiveStreamViewerItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAgB1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO/C,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;
|
|
1
|
+
{"version":3,"file":"LiveStreamViewerItem.d.ts","sourceRoot":"","sources":["../../src/components/LiveStreamViewerItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAgB1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO/C,KAAK,yBAAyB,GAAG;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF;;GAEG;AACH,eAAO,MAAM,oBAAoB,uDAqY/B,CAAC"}
|
|
@@ -14,6 +14,15 @@ try {
|
|
|
14
14
|
catch {
|
|
15
15
|
// react-native-webrtc not available in Expo Go
|
|
16
16
|
}
|
|
17
|
+
// expo-linear-gradient — lazy require so the package stays safe in non-Expo environments.
|
|
18
|
+
// The consuming app (social-casino-mobile) has expo-linear-gradient as a dependency.
|
|
19
|
+
let LinearGradient = null;
|
|
20
|
+
try {
|
|
21
|
+
LinearGradient = require('expo-linear-gradient').LinearGradient;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// expo-linear-gradient not available
|
|
25
|
+
}
|
|
17
26
|
/**
|
|
18
27
|
* Single full-screen viewer cell. When isActive, joins the stream room and consumes video/audio.
|
|
19
28
|
*/
|
|
@@ -200,7 +209,12 @@ export const LiveStreamViewerItem = memo(function LiveStreamViewerItem({ stream,
|
|
|
200
209
|
};
|
|
201
210
|
const hostLabel = stream.hostDisplayName || stream.title || 'Live';
|
|
202
211
|
const avatarLetter = hostLabel[0]?.toUpperCase() ?? 'L';
|
|
203
|
-
return (_jsxs(View, { style: styles.container, children: [showVideo && RTCViewComponent && streamURL ? (_jsx(RTCViewComponent, { streamURL: streamURL, stream: displayStream, style: styles.rtcView, objectFit: "cover", mirror: false }, `rtc-${trackCount}-${streamURL}`)) : (_jsxs(View, { style: styles.videoPlaceholder, children: [joining && (_jsx(ActivityIndicator, { size: "large", color: "rgba(255,255,255,0.6)" })), !joining && error && (_jsx(Text, { style: styles.placeholderError, children: error })), joined && !joining && !error && hasVideo && !remoteStream && (_jsx(ActivityIndicator, { size: "large", color: "rgba(255,255,255,0.45)" })), joined && !joining && !error && hasVideo && webrtcUnavailable && (_jsx(Text, { style: styles.placeholderHint, children: "Video needs a development build" })), joined && !joining && !error && hasVideo && consumeError && (_jsx(Text, { style: styles.placeholderError, children: consumeError }))] })),
|
|
212
|
+
return (_jsxs(View, { style: styles.container, children: [showVideo && RTCViewComponent && streamURL ? (_jsx(RTCViewComponent, { streamURL: streamURL, stream: displayStream, style: styles.rtcView, objectFit: "cover", mirror: false }, `rtc-${trackCount}-${streamURL}`)) : (_jsxs(View, { style: styles.videoPlaceholder, children: [joining && (_jsx(ActivityIndicator, { size: "large", color: "rgba(255,255,255,0.6)" })), !joining && error && (_jsx(Text, { style: styles.placeholderError, children: error })), joined && !joining && !error && hasVideo && !remoteStream && (_jsx(ActivityIndicator, { size: "large", color: "rgba(255,255,255,0.45)" })), joined && !joining && !error && hasVideo && webrtcUnavailable && (_jsx(Text, { style: styles.placeholderHint, children: "Video needs a development build" })), joined && !joining && !error && hasVideo && consumeError && (_jsx(Text, { style: styles.placeholderError, children: consumeError }))] })), LinearGradient ? (_jsx(LinearGradient, { colors: [
|
|
213
|
+
'rgba(0,0,0,0.70)', // top edge — opaque for host info readability
|
|
214
|
+
'rgba(0,0,0,0.0)', // clears out ~30% down
|
|
215
|
+
'rgba(0,0,0,0.0)', // stays clear through mid-screen
|
|
216
|
+
'rgba(0,0,0,0.78)', // darkens toward bottom for chat / input
|
|
217
|
+
], locations: [0, 0.28, 0.48, 1], style: styles.gradientOverlay, pointerEvents: "none" })) : null, _jsxs(View, { style: styles.topBar, pointerEvents: "box-none", children: [_jsxs(View, { style: styles.hostRow, pointerEvents: "none", children: [_jsx(View, { style: styles.avatar, children: _jsx(Text, { style: styles.avatarLetter, children: avatarLetter }) }), _jsx(Text, { style: styles.hostName, numberOfLines: 1, children: hostLabel }), _jsx(View, { style: styles.livePill, children: _jsx(Text, { style: styles.livePillText, children: "LIVE" }) })] }), _jsxs(View, { style: styles.viewerChip, pointerEvents: "none", children: [_jsx(Text, { style: styles.viewerEye, children: "\uD83D\uDC41" }), _jsx(Text, { style: styles.viewerCount, children: viewerCount > 0 ? viewerCount.toLocaleString() : '—' })] })] }), _jsxs(View, { style: styles.rightColumn, pointerEvents: "box-none", children: [_jsxs(TouchableOpacity, { style: styles.actionBtn, activeOpacity: 0.75, children: [_jsx(View, { style: styles.actionCircle, children: _jsx(Text, { style: styles.actionIcon, children: "\u2665" }) }), _jsx(Text, { style: styles.actionLabel, children: "Like" })] }), _jsxs(TouchableOpacity, { style: styles.actionBtn, activeOpacity: 0.75, children: [_jsx(View, { style: styles.actionCircle, children: _jsx(Text, { style: styles.actionIcon, children: "\uD83C\uDF81" }) }), _jsx(Text, { style: styles.actionLabel, children: "Gift" })] }), _jsxs(TouchableOpacity, { style: styles.actionBtn, activeOpacity: 0.75, children: [_jsx(View, { style: styles.actionCircle, children: _jsx(Text, { style: styles.actionIcon, children: "\u2197" }) }), _jsx(Text, { style: styles.actionLabel, children: "Share" })] })] }), _jsxs(Animated.View, { style: [styles.bottomPanel, { bottom: kbOffset }], pointerEvents: "box-none", children: [_jsx(View, { style: styles.chatColumn, pointerEvents: "box-none", children: _jsx(ScrollView, { ref: chatListRef, contentContainerStyle: styles.chatContent, showsVerticalScrollIndicator: false, keyboardShouldPersistTaps: "always", keyboardDismissMode: "none", children: chatData.map((item) => item.displayName ? (_jsx(View, { style: styles.chatBubble, children: _jsxs(Text, { style: styles.chatLine, numberOfLines: 3, children: [_jsxs(Text, { style: [styles.chatUsername, { color: getNameColor(item.displayName) }], children: [item.displayName, ' '] }), _jsx(Text, { style: styles.chatMsg, children: item.text })] }) }, item.id)) : (_jsx(View, { style: styles.joinBubble, children: _jsx(Text, { style: styles.joinText, children: item.text }) }, item.id))) }) }), _jsxs(View, { style: styles.inputBar, children: [_jsx(TouchableOpacity, { style: styles.inputIconBtn, activeOpacity: 0.7, children: _jsx(Text, { style: styles.inputIconGlyph, children: "\u263A" }) }), _jsx(TextInput, { style: styles.textInput, value: chatInput, onChangeText: setChatInput, placeholder: joined ? 'Say something...' : 'Connecting...', placeholderTextColor: "rgba(255,255,255,0.35)", editable: joined && !joining && !error, onSubmitEditing: sendChat, returnKeyType: "send", blurOnSubmit: false }), _jsx(TouchableOpacity, { style: styles.inputIconBtn, activeOpacity: 0.7, children: _jsx(Text, { style: styles.inputIconGlyph, children: "\uD83C\uDF39" }) }), _jsx(TouchableOpacity, { style: [styles.sendBtn, (!chatInput.trim() || !joined) && styles.sendBtnOff], onPress: sendChat, activeOpacity: 0.75, disabled: !joined || !chatInput.trim(), children: _jsx(Text, { style: styles.sendIcon, children: "\u25B6" }) })] })] }), streamEnded && (_jsx(View, { style: styles.endedOverlay, children: _jsxs(View, { style: styles.endedCard, children: [_jsx(Text, { style: styles.endedTitle, children: "Stream ended" }), _jsx(Text, { style: styles.endedSub, children: "The host has ended this live stream" })] }) }))] }));
|
|
204
218
|
});
|
|
205
219
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
206
220
|
const styles = StyleSheet.create({
|
|
@@ -232,23 +246,6 @@ const styles = StyleSheet.create({
|
|
|
232
246
|
textAlign: 'center',
|
|
233
247
|
paddingHorizontal: 28,
|
|
234
248
|
},
|
|
235
|
-
// ── Gradient overlays ─────────────────────────────────────────────────────
|
|
236
|
-
topGradient: {
|
|
237
|
-
position: 'absolute',
|
|
238
|
-
top: 0,
|
|
239
|
-
left: 0,
|
|
240
|
-
right: 0,
|
|
241
|
-
height: 140,
|
|
242
|
-
backgroundColor: 'rgba(0,0,0,0.45)',
|
|
243
|
-
},
|
|
244
|
-
bottomGradient: {
|
|
245
|
-
position: 'absolute',
|
|
246
|
-
bottom: 0,
|
|
247
|
-
left: 0,
|
|
248
|
-
right: 0,
|
|
249
|
-
height: 260,
|
|
250
|
-
backgroundColor: 'rgba(0,0,0,0.38)',
|
|
251
|
-
},
|
|
252
249
|
// ── Top bar ───────────────────────────────────────────────────────────────
|
|
253
250
|
topBar: {
|
|
254
251
|
position: 'absolute',
|
|
@@ -469,4 +466,11 @@ const styles = StyleSheet.create({
|
|
|
469
466
|
textAlign: 'center',
|
|
470
467
|
lineHeight: 20,
|
|
471
468
|
},
|
|
469
|
+
gradientOverlay: {
|
|
470
|
+
position: 'absolute',
|
|
471
|
+
top: 0,
|
|
472
|
+
left: 0,
|
|
473
|
+
right: 0,
|
|
474
|
+
bottom: 0,
|
|
475
|
+
},
|
|
472
476
|
});
|
package/package.json
CHANGED