@kesha-antonov/react-native-chat 4.2.0 → 4.3.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 +252 -47
- package/lib/Actions.d.ts +5 -5
- package/lib/Actions.d.ts.map +1 -1
- package/lib/Actions.js +28 -39
- package/lib/Actions.js.map +1 -1
- package/lib/Avatar.d.ts.map +1 -1
- package/lib/Avatar.js +22 -27
- package/lib/Avatar.js.map +1 -1
- package/lib/Bubble/index.d.ts.map +1 -1
- package/lib/Bubble/index.js +86 -25
- package/lib/Bubble/index.js.map +1 -1
- package/lib/Bubble/styles.d.ts +28 -11
- package/lib/Bubble/styles.d.ts.map +1 -1
- package/lib/Bubble/styles.js +108 -80
- package/lib/Bubble/styles.js.map +1 -1
- package/lib/Bubble/types.d.ts +12 -7
- package/lib/Bubble/types.d.ts.map +1 -1
- package/lib/Chat/ChatKeyboardAvoidingView.d.ts +8 -3
- package/lib/Chat/ChatKeyboardAvoidingView.d.ts.map +1 -1
- package/lib/Chat/ChatKeyboardAvoidingView.js +3 -5
- package/lib/Chat/ChatKeyboardAvoidingView.js.map +1 -1
- package/lib/Chat/index.d.ts.map +1 -1
- package/lib/Chat/index.js +65 -25
- package/lib/Chat/index.js.map +1 -1
- package/lib/Chat/types.d.ts +35 -25
- package/lib/Chat/types.d.ts.map +1 -1
- package/lib/ChatAvatar.d.ts.map +1 -1
- package/lib/ChatAvatar.js +11 -17
- package/lib/ChatAvatar.js.map +1 -1
- package/lib/ChatContext.d.ts +29 -1
- package/lib/ChatContext.d.ts.map +1 -1
- package/lib/ChatContext.js +3 -0
- package/lib/ChatContext.js.map +1 -1
- package/lib/Color.d.ts.map +1 -1
- package/lib/Color.js +6 -2
- package/lib/Color.js.map +1 -1
- package/lib/Composer.d.ts +14 -1
- package/lib/Composer.d.ts.map +1 -1
- package/lib/Composer.js +63 -50
- package/lib/Composer.js.map +1 -1
- package/lib/Day/index.d.ts.map +1 -1
- package/lib/Day/index.js +7 -3
- package/lib/Day/index.js.map +1 -1
- package/lib/Day/styles.d.ts +6 -7
- package/lib/Day/styles.d.ts.map +1 -1
- package/lib/Day/styles.js +11 -13
- package/lib/Day/styles.js.map +1 -1
- package/lib/Icons.d.ts +24 -0
- package/lib/Icons.d.ts.map +1 -0
- package/lib/Icons.js +2 -0
- package/lib/Icons.js.map +1 -0
- package/lib/InputToolbar.d.ts +18 -5
- package/lib/InputToolbar.d.ts.map +1 -1
- package/lib/InputToolbar.js +223 -19
- package/lib/InputToolbar.js.map +1 -1
- package/lib/LoadEarlierMessages.d.ts.map +1 -1
- package/lib/LoadEarlierMessages.js +12 -7
- package/lib/LoadEarlierMessages.js.map +1 -1
- package/lib/Message/index.d.ts.map +1 -1
- package/lib/Message/index.js +10 -9
- package/lib/Message/index.js.map +1 -1
- package/lib/Message/styles.js +2 -2
- package/lib/Message/styles.js.map +1 -1
- package/lib/MessageAudio.d.ts +2 -1
- package/lib/MessageAudio.d.ts.map +1 -1
- package/lib/MessageAudio.js +121 -19
- package/lib/MessageAudio.js.map +1 -1
- package/lib/MessageLocation.d.ts +9 -0
- package/lib/MessageLocation.d.ts.map +1 -0
- package/lib/MessageLocation.js +85 -0
- package/lib/MessageLocation.js.map +1 -0
- package/lib/MessageText.d.ts +12 -1
- package/lib/MessageText.d.ts.map +1 -1
- package/lib/MessageText.js +38 -11
- package/lib/MessageText.js.map +1 -1
- package/lib/MessageVideo.d.ts +2 -1
- package/lib/MessageVideo.d.ts.map +1 -1
- package/lib/MessageVideo.js +156 -18
- package/lib/MessageVideo.js.map +1 -1
- package/lib/MessagesContainer/components/Item/index.d.ts +2 -1
- package/lib/MessagesContainer/components/Item/index.d.ts.map +1 -1
- package/lib/MessagesContainer/components/Item/index.js +23 -1
- package/lib/MessagesContainer/components/Item/index.js.map +1 -1
- package/lib/MessagesContainer/index.d.ts.map +1 -1
- package/lib/MessagesContainer/index.js +24 -11
- package/lib/MessagesContainer/index.js.map +1 -1
- package/lib/MessagesContainer/styles.d.ts +23 -3
- package/lib/MessagesContainer/styles.d.ts.map +1 -1
- package/lib/MessagesContainer/styles.js +25 -5
- package/lib/MessagesContainer/styles.js.map +1 -1
- package/lib/Models.d.ts +72 -0
- package/lib/Models.d.ts.map +1 -1
- package/lib/QuickReplies.d.ts +1 -1
- package/lib/QuickReplies.d.ts.map +1 -1
- package/lib/QuickReplies.js +13 -7
- package/lib/QuickReplies.js.map +1 -1
- package/lib/Reactions/MessageReactions.d.ts.map +1 -1
- package/lib/Reactions/MessageReactions.js +11 -10
- package/lib/Reactions/MessageReactions.js.map +1 -1
- package/lib/Reactions/ReactionPicker.d.ts.map +1 -1
- package/lib/Reactions/ReactionPicker.js +5 -3
- package/lib/Reactions/ReactionPicker.js.map +1 -1
- package/lib/Send.d.ts +2 -2
- package/lib/Send.d.ts.map +1 -1
- package/lib/Send.js +37 -37
- package/lib/Send.js.map +1 -1
- package/lib/SystemMessage.d.ts.map +1 -1
- package/lib/SystemMessage.js +8 -5
- package/lib/SystemMessage.js.map +1 -1
- package/lib/Theme.d.ts +148 -0
- package/lib/Theme.d.ts.map +1 -0
- package/lib/Theme.js +142 -0
- package/lib/Theme.js.map +1 -0
- package/lib/Time.d.ts.map +1 -1
- package/lib/Time.js +7 -5
- package/lib/Time.js.map +1 -1
- package/lib/TypingIndicator/index.d.ts.map +1 -1
- package/lib/TypingIndicator/index.js +4 -1
- package/lib/TypingIndicator/index.js.map +1 -1
- package/lib/TypingIndicator/styles.d.ts +2 -2
- package/lib/TypingIndicator/styles.d.ts.map +1 -1
- package/lib/TypingIndicator/styles.js +4 -5
- package/lib/TypingIndicator/styles.js.map +1 -1
- package/lib/components/AttachmentSheet.d.ts +28 -0
- package/lib/components/AttachmentSheet.d.ts.map +1 -0
- package/lib/components/AttachmentSheet.js +177 -0
- package/lib/components/AttachmentSheet.js.map +1 -0
- package/lib/components/BasicMarkdown.d.ts +12 -0
- package/lib/components/BasicMarkdown.d.ts.map +1 -0
- package/lib/components/BasicMarkdown.js +220 -0
- package/lib/components/BasicMarkdown.js.map +1 -0
- package/lib/components/ContextMenu.d.ts +25 -0
- package/lib/components/ContextMenu.d.ts.map +1 -0
- package/lib/components/ContextMenu.js +122 -0
- package/lib/components/ContextMenu.js.map +1 -0
- package/lib/components/Icon.d.ts +17 -0
- package/lib/components/Icon.d.ts.map +1 -0
- package/lib/components/Icon.js +19 -0
- package/lib/components/Icon.js.map +1 -0
- package/lib/components/LucideIcon.d.ts +10 -0
- package/lib/components/LucideIcon.d.ts.map +1 -0
- package/lib/components/LucideIcon.js +118 -0
- package/lib/components/LucideIcon.js.map +1 -0
- package/lib/components/MarkdownMessageText.d.ts +19 -0
- package/lib/components/MarkdownMessageText.d.ts.map +1 -0
- package/lib/components/MarkdownMessageText.js +35 -0
- package/lib/components/MarkdownMessageText.js.map +1 -0
- package/lib/components/MediaCard.d.ts +19 -0
- package/lib/components/MediaCard.d.ts.map +1 -0
- package/lib/components/MediaCard.js +102 -0
- package/lib/components/MediaCard.js.map +1 -0
- package/lib/components/MediaControls.d.ts +41 -0
- package/lib/components/MediaControls.d.ts.map +1 -0
- package/lib/components/MediaControls.js +523 -0
- package/lib/components/MediaControls.js.map +1 -0
- package/lib/components/MessageReply.d.ts.map +1 -1
- package/lib/components/MessageReply.js +11 -9
- package/lib/components/MessageReply.js.map +1 -1
- package/lib/components/ReplyPreview.d.ts +3 -1
- package/lib/components/ReplyPreview.d.ts.map +1 -1
- package/lib/components/ReplyPreview.js +36 -36
- package/lib/components/ReplyPreview.js.map +1 -1
- package/lib/components/SendIcon.d.ts +13 -0
- package/lib/components/SendIcon.d.ts.map +1 -0
- package/lib/components/SendIcon.js +37 -0
- package/lib/components/SendIcon.js.map +1 -0
- package/lib/components/Ticks.d.ts +25 -0
- package/lib/components/Ticks.d.ts.map +1 -0
- package/lib/components/Ticks.js +102 -0
- package/lib/components/Ticks.js.map +1 -0
- package/lib/components/VideoNoteOverlay.d.ts +25 -0
- package/lib/components/VideoNoteOverlay.d.ts.map +1 -0
- package/lib/components/VideoNoteOverlay.js +151 -0
- package/lib/components/VideoNoteOverlay.js.map +1 -0
- package/lib/components/VideoNoteRecorder.d.ts +19 -0
- package/lib/components/VideoNoteRecorder.d.ts.map +1 -0
- package/lib/components/VideoNoteRecorder.js +634 -0
- package/lib/components/VideoNoteRecorder.js.map +1 -0
- package/lib/components/VideoRecordButton.d.ts +29 -0
- package/lib/components/VideoRecordButton.d.ts.map +1 -0
- package/lib/components/VideoRecordButton.js +117 -0
- package/lib/components/VideoRecordButton.js.map +1 -0
- package/lib/components/VoiceMessageInput.d.ts +33 -0
- package/lib/components/VoiceMessageInput.d.ts.map +1 -0
- package/lib/components/VoiceMessageInput.js +396 -0
- package/lib/components/VoiceMessageInput.js.map +1 -0
- package/lib/components/WaveformPlayer.d.ts +19 -0
- package/lib/components/WaveformPlayer.d.ts.map +1 -0
- package/lib/components/WaveformPlayer.js +367 -0
- package/lib/components/WaveformPlayer.js.map +1 -0
- package/lib/components/mediaPalette.d.ts +23 -0
- package/lib/components/mediaPalette.d.ts.map +1 -0
- package/lib/components/mediaPalette.js +16 -0
- package/lib/components/mediaPalette.js.map +1 -0
- package/lib/components/mediaPlayback.d.ts +22 -0
- package/lib/components/mediaPlayback.d.ts.map +1 -0
- package/lib/components/mediaPlayback.js +34 -0
- package/lib/components/mediaPlayback.js.map +1 -0
- package/lib/hooks/useColorScheme.d.ts +9 -2
- package/lib/hooks/useColorScheme.d.ts.map +1 -1
- package/lib/hooks/useColorScheme.js +9 -3
- package/lib/hooks/useColorScheme.js.map +1 -1
- package/lib/hooks/useIcons.d.ts +4 -0
- package/lib/hooks/useIcons.d.ts.map +1 -0
- package/lib/hooks/useIcons.js +8 -0
- package/lib/hooks/useIcons.js.map +1 -0
- package/lib/hooks/useKeyboardVerticalOffset.d.ts +17 -8
- package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
- package/lib/hooks/useKeyboardVerticalOffset.js +29 -8
- package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
- package/lib/hooks/useLabels.d.ts +4 -0
- package/lib/hooks/useLabels.d.ts.map +1 -0
- package/lib/hooks/useLabels.js +8 -0
- package/lib/hooks/useLabels.js.map +1 -0
- package/lib/hooks/useTheme.d.ts +21 -0
- package/lib/hooks/useTheme.d.ts.map +1 -0
- package/lib/hooks/useTheme.js +32 -0
- package/lib/hooks/useTheme.js.map +1 -0
- package/lib/i18n.d.ts +59 -0
- package/lib/i18n.d.ts.map +1 -0
- package/lib/i18n.js +122 -0
- package/lib/i18n.js.map +1 -0
- package/lib/index.d.ts +17 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -1
- package/lib/types.d.ts +2 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +99 -44
- package/lib/MessageReply.d.ts +0 -15
- package/lib/MessageReply.d.ts.map +0 -1
- package/lib/MessageReply.js +0 -102
- package/lib/MessageReply.js.map +0 -1
- package/lib/ReplyPreview.d.ts +0 -14
- package/lib/ReplyPreview.d.ts.map +0 -1
- package/lib/ReplyPreview.js +0 -94
- package/lib/ReplyPreview.js.map +0 -1
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import React, { useEffect } from 'react';
|
|
2
2
|
import { Image, Pressable, StyleSheet, Text, View, } from 'react-native';
|
|
3
3
|
import Animated, { useAnimatedStyle, useSharedValue, withTiming, Easing, interpolate, runOnJS, } from 'react-native-reanimated';
|
|
4
|
-
import {
|
|
4
|
+
import { useLabels } from '../hooks/useLabels';
|
|
5
|
+
import { useThemedStyles } from '../hooks/useTheme';
|
|
6
|
+
import { formatLabel } from '../i18n';
|
|
7
|
+
import { Icon } from './Icon';
|
|
8
|
+
import { CloseIcon, PencilIcon, ReplyArrowIcon } from './MediaControls';
|
|
5
9
|
const ANIMATION_DURATION = 200;
|
|
6
10
|
const ANIMATION_EASING = Easing.bezier(0.25, 0.1, 0.25, 1);
|
|
7
11
|
const DEFAULT_HEIGHT = 68;
|
|
8
|
-
const
|
|
12
|
+
const createStyles = (theme) => StyleSheet.create({
|
|
9
13
|
borderIndicator: {
|
|
10
|
-
backgroundColor:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
backgroundColor: theme.colors.accent,
|
|
15
|
+
borderRadius: 2,
|
|
16
|
+
width: 3,
|
|
17
|
+
alignSelf: 'stretch',
|
|
18
|
+
marginVertical: 8,
|
|
14
19
|
},
|
|
15
20
|
clearButton: {
|
|
16
21
|
alignItems: 'center',
|
|
@@ -22,23 +27,25 @@ const styles = StyleSheet.create({
|
|
|
22
27
|
clearButtonText: {
|
|
23
28
|
fontSize: 18,
|
|
24
29
|
fontWeight: '600',
|
|
30
|
+
color: theme.colors.placeholder,
|
|
25
31
|
},
|
|
32
|
+
// Flush banner: full-bleed inside the bar, sharing the bar background with a
|
|
33
|
+
// bottom hairline, so it reads as the composer growing a header.
|
|
26
34
|
container: {
|
|
27
|
-
borderRadius: 8,
|
|
28
35
|
flexDirection: 'row',
|
|
29
|
-
|
|
30
|
-
marginHorizontal: 10,
|
|
36
|
+
alignItems: 'center',
|
|
31
37
|
overflow: 'hidden',
|
|
38
|
+
paddingHorizontal: theme.spacing.screenEdge,
|
|
39
|
+
backgroundColor: theme.colors.inputBarBackground,
|
|
40
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
41
|
+
borderBottomColor: theme.colors.separator,
|
|
32
42
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
},
|
|
36
|
-
containerLight: {
|
|
37
|
-
backgroundColor: '#e9e9eb',
|
|
43
|
+
leadingIcon: {
|
|
44
|
+
marginRight: 8,
|
|
38
45
|
},
|
|
39
46
|
content: {
|
|
40
47
|
flex: 1,
|
|
41
|
-
paddingHorizontal:
|
|
48
|
+
paddingHorizontal: 8,
|
|
42
49
|
paddingVertical: 8,
|
|
43
50
|
},
|
|
44
51
|
image: {
|
|
@@ -53,15 +60,10 @@ const styles = StyleSheet.create({
|
|
|
53
60
|
},
|
|
54
61
|
text: {
|
|
55
62
|
fontSize: 14,
|
|
56
|
-
|
|
57
|
-
textDark: {
|
|
58
|
-
color: '#fff',
|
|
59
|
-
},
|
|
60
|
-
textLight: {
|
|
61
|
-
color: '#333',
|
|
63
|
+
color: theme.colors.inputText,
|
|
62
64
|
},
|
|
63
65
|
username: {
|
|
64
|
-
color:
|
|
66
|
+
color: theme.colors.accent,
|
|
65
67
|
fontSize: 13,
|
|
66
68
|
fontWeight: '600',
|
|
67
69
|
marginBottom: 2,
|
|
@@ -70,9 +72,9 @@ const styles = StyleSheet.create({
|
|
|
70
72
|
overflow: 'hidden',
|
|
71
73
|
},
|
|
72
74
|
});
|
|
73
|
-
export function ReplyPreview({ replyMessage, onClearReply, containerStyle, textStyle, imageStyle, }) {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
75
|
+
export function ReplyPreview({ replyMessage, onClearReply, mode = 'reply', containerStyle, textStyle, imageStyle, }) {
|
|
76
|
+
const styles = useThemedStyles(createStyles);
|
|
77
|
+
const labels = useLabels();
|
|
76
78
|
const animationProgress = useSharedValue(0);
|
|
77
79
|
const contentHeight = useSharedValue(DEFAULT_HEIGHT);
|
|
78
80
|
// Animate in on mount
|
|
@@ -95,18 +97,17 @@ export function ReplyPreview({ replyMessage, onClearReply, containerStyle, textS
|
|
|
95
97
|
const wrapperAnimatedStyle = useAnimatedStyle(() => {
|
|
96
98
|
const height = interpolate(animationProgress.value, [0, 1], [0, contentHeight.value]);
|
|
97
99
|
const opacity = interpolate(animationProgress.value, [0, 0.5, 1], [0, 0.5, 1]);
|
|
98
|
-
const translateY = interpolate(animationProgress.value, [0, 1], [10, 0]);
|
|
99
100
|
return {
|
|
100
101
|
height,
|
|
101
102
|
opacity,
|
|
102
|
-
transform: [{ translateY }],
|
|
103
103
|
};
|
|
104
104
|
});
|
|
105
105
|
const displayName = replyMessage.user?.name || 'Unknown';
|
|
106
|
+
const accent = styles.username.color;
|
|
107
|
+
const title = mode === 'edit' ? labels.editing : formatLabel(labels.replyingTo, { name: displayName });
|
|
106
108
|
return (<Animated.View style={[styles.wrapper, wrapperAnimatedStyle]}>
|
|
107
109
|
<View style={[
|
|
108
110
|
styles.container,
|
|
109
|
-
isDark ? styles.containerDark : styles.containerLight,
|
|
110
111
|
containerStyle,
|
|
111
112
|
]} onLayout={e => {
|
|
112
113
|
const newHeight = e.nativeEvent.layout.height + 8;
|
|
@@ -116,17 +117,21 @@ export function ReplyPreview({ replyMessage, onClearReply, containerStyle, textS
|
|
|
116
117
|
easing: ANIMATION_EASING,
|
|
117
118
|
});
|
|
118
119
|
}}>
|
|
120
|
+
<View style={styles.leadingIcon}>
|
|
121
|
+
{mode === 'edit'
|
|
122
|
+
? <Icon name='pencil' color={accent} size={18} fallback={<PencilIcon color={accent} size={18}/>}/>
|
|
123
|
+
: <Icon name='reply' color={accent} size={18} fallback={<ReplyArrowIcon color={accent} size={18}/>}/>}
|
|
124
|
+
</View>
|
|
119
125
|
<View style={styles.borderIndicator}/>
|
|
120
126
|
<View style={styles.content}>
|
|
121
127
|
<View style={styles.row}>
|
|
122
128
|
{replyMessage.image && (<Image source={{ uri: replyMessage.image }} style={[styles.image, imageStyle]}/>)}
|
|
123
129
|
<View style={{ flex: 1 }}>
|
|
124
130
|
<Text style={styles.username} numberOfLines={1}>
|
|
125
|
-
|
|
131
|
+
{title}
|
|
126
132
|
</Text>
|
|
127
133
|
{replyMessage.text && (<Text style={[
|
|
128
134
|
styles.text,
|
|
129
|
-
isDark ? styles.textDark : styles.textLight,
|
|
130
135
|
textStyle,
|
|
131
136
|
]} numberOfLines={2}>
|
|
132
137
|
{replyMessage.text}
|
|
@@ -135,12 +140,7 @@ export function ReplyPreview({ replyMessage, onClearReply, containerStyle, textS
|
|
|
135
140
|
</View>
|
|
136
141
|
</View>
|
|
137
142
|
<Pressable style={styles.clearButton} onPress={handleClear} hitSlop={8}>
|
|
138
|
-
<
|
|
139
|
-
styles.clearButtonText,
|
|
140
|
-
isDark ? styles.textDark : styles.textLight,
|
|
141
|
-
]}>
|
|
142
|
-
×
|
|
143
|
-
</Text>
|
|
143
|
+
<Icon name='close' color={styles.clearButtonText.color} size={16} fallback={<CloseIcon color={styles.clearButtonText.color} size={16}/>}/>
|
|
144
144
|
</Pressable>
|
|
145
145
|
</View>
|
|
146
146
|
</Animated.View>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReplyPreview.js","sourceRoot":"","sources":["../../src/components/ReplyPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EACL,KAAK,EAEL,SAAS,EAET,UAAU,EACV,IAAI,EAEJ,IAAI,GAEL,MAAM,cAAc,CAAA;AACrB,OAAO,QAAQ,EAAE,EACf,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,MAAM,EACN,WAAW,EACX,OAAO,GACR,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ReplyPreview.js","sourceRoot":"","sources":["../../src/components/ReplyPreview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface SendIconProps {
|
|
3
|
+
color?: string;
|
|
4
|
+
/** Overall icon box size; the glyph scales to fit. Defaults to 20. */
|
|
5
|
+
size?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Dependency-free fallback send glyph (used when react-native-svg is not
|
|
9
|
+
* installed; otherwise the Lucide "send" icon is rendered via the Icon
|
|
10
|
+
* resolver). A triangle tilted to point up-and-to-the-right.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SendIcon: ({ color, size }: SendIconProps) => React.JSX.Element;
|
|
13
|
+
//# sourceMappingURL=SendIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendIcon.d.ts","sourceRoot":"","sources":["../../src/components/SendIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAGtC,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,iBAA+B,aAAa,sBAQpE,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
/**
|
|
4
|
+
* Dependency-free fallback send glyph (used when react-native-svg is not
|
|
5
|
+
* installed; otherwise the Lucide "send" icon is rendered via the Icon
|
|
6
|
+
* resolver). A triangle tilted to point up-and-to-the-right.
|
|
7
|
+
*/
|
|
8
|
+
export const SendIcon = ({ color = '#fff', size = 20 }) => {
|
|
9
|
+
const styles = useMemo(() => createStyles(color, size), [color, size]);
|
|
10
|
+
return (<View style={styles.container}>
|
|
11
|
+
<View style={styles.triangle}/>
|
|
12
|
+
</View>);
|
|
13
|
+
};
|
|
14
|
+
const createStyles = (color, size) => {
|
|
15
|
+
const side = size * 0.82;
|
|
16
|
+
return StyleSheet.create({
|
|
17
|
+
container: {
|
|
18
|
+
width: size,
|
|
19
|
+
height: size,
|
|
20
|
+
alignItems: 'center',
|
|
21
|
+
justifyContent: 'center',
|
|
22
|
+
transform: [{ rotate: '-45deg' }],
|
|
23
|
+
},
|
|
24
|
+
triangle: {
|
|
25
|
+
width: 0,
|
|
26
|
+
height: 0,
|
|
27
|
+
borderTopWidth: side / 2,
|
|
28
|
+
borderBottomWidth: side / 2,
|
|
29
|
+
borderLeftWidth: side,
|
|
30
|
+
borderTopColor: 'transparent',
|
|
31
|
+
borderBottomColor: 'transparent',
|
|
32
|
+
borderLeftColor: color,
|
|
33
|
+
marginLeft: size * 0.16,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=SendIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendIcon.js","sourceRoot":"","sources":["../../src/components/SendIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAQ/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,EAAiB,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAEtE,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAC/B;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,EAAE;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IAExB,OAAO,UAAU,CAAC,MAAM,CAAC;QACvB,SAAS,EAAE;YACT,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SAClC;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,IAAI,GAAG,CAAC;YACxB,iBAAiB,EAAE,IAAI,GAAG,CAAC;YAC3B,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,aAAa;YAC7B,iBAAiB,EAAE,aAAa;YAChC,eAAe,EAAE,KAAK;YACtB,UAAU,EAAE,IAAI,GAAG,IAAI;SACxB;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface TicksProps {
|
|
3
|
+
/** Render a double check (delivered / read) instead of a single check (sent). */
|
|
4
|
+
double?: boolean;
|
|
5
|
+
color: string;
|
|
6
|
+
/** Visual height of a single check; defaults to 9. */
|
|
7
|
+
size?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Telegram-style delivery ticks: one check = sent, double check = delivered/read.
|
|
11
|
+
* Color the read state with the accent (or a brighter shade on colored bubbles).
|
|
12
|
+
*/
|
|
13
|
+
export declare const Ticks: ({ double, color, size }: TicksProps) => React.JSX.Element;
|
|
14
|
+
export interface PendingClockProps {
|
|
15
|
+
color: string;
|
|
16
|
+
size?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A minimal clock-outline icon for the "pending" (sending) state, replacing the
|
|
20
|
+
* old "🕓" emoji. The hands rotate continuously while the message is sending,
|
|
21
|
+
* mirroring Telegram's spinning clock. Respects the system reduce-motion
|
|
22
|
+
* setting (the hands simply hold still).
|
|
23
|
+
*/
|
|
24
|
+
export declare const PendingClock: ({ color, size }: PendingClockProps) => React.JSX.Element;
|
|
25
|
+
//# sourceMappingURL=Ticks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ticks.d.ts","sourceRoot":"","sources":["../../src/components/Ticks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAA;AA2BjD,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,yBAAqC,UAAU,sBASpE,CAAA;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,iBAAsB,iBAAiB,sBA0BnE,CAAA"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import React, { useEffect, useMemo } from 'react';
|
|
2
|
+
import { StyleSheet, View } from 'react-native';
|
|
3
|
+
import Animated, { Easing, ReduceMotion, cancelAnimation, useAnimatedStyle, useSharedValue, withRepeat, withTiming, } from 'react-native-reanimated';
|
|
4
|
+
/**
|
|
5
|
+
* A single checkmark drawn with two borders rotated 45deg - no SVG dependency.
|
|
6
|
+
* Replaces the old literal "✓" glyph so the tick is crisp at any size and color.
|
|
7
|
+
*/
|
|
8
|
+
const Check = ({ color, size, style }) => {
|
|
9
|
+
const styles = useMemo(() => createCheckStyles(color, size), [color, size]);
|
|
10
|
+
return <View style={[styles.check, style]}/>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Telegram-style delivery ticks: one check = sent, double check = delivered/read.
|
|
14
|
+
* Color the read state with the accent (or a brighter shade on colored bubbles).
|
|
15
|
+
*/
|
|
16
|
+
export const Ticks = ({ double = false, color, size = 9 }) => {
|
|
17
|
+
const styles = useMemo(() => createTicksStyles(size), [size]);
|
|
18
|
+
return (<View style={styles.row}>
|
|
19
|
+
<Check color={color} size={size}/>
|
|
20
|
+
{double && <Check color={color} size={size} style={styles.secondCheck}/>}
|
|
21
|
+
</View>);
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A minimal clock-outline icon for the "pending" (sending) state, replacing the
|
|
25
|
+
* old "🕓" emoji. The hands rotate continuously while the message is sending,
|
|
26
|
+
* mirroring Telegram's spinning clock. Respects the system reduce-motion
|
|
27
|
+
* setting (the hands simply hold still).
|
|
28
|
+
*/
|
|
29
|
+
export const PendingClock = ({ color, size = 11 }) => {
|
|
30
|
+
const styles = useMemo(() => createClockStyles(color, size), [color, size]);
|
|
31
|
+
const rotation = useSharedValue(0);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
rotation.value = withRepeat(withTiming(360, { duration: 1200, easing: Easing.linear, reduceMotion: ReduceMotion.System }), -1, false);
|
|
34
|
+
return () => cancelAnimation(rotation);
|
|
35
|
+
}, [rotation]);
|
|
36
|
+
const handsStyle = useAnimatedStyle(() => ({
|
|
37
|
+
transform: [{ rotate: `${rotation.value}deg` }],
|
|
38
|
+
}));
|
|
39
|
+
return (<View style={styles.face}>
|
|
40
|
+
<Animated.View style={[styles.hands, StyleSheet.absoluteFill, handsStyle]}>
|
|
41
|
+
<View style={styles.minuteHand}/>
|
|
42
|
+
<View style={styles.hourHand}/>
|
|
43
|
+
</Animated.View>
|
|
44
|
+
</View>);
|
|
45
|
+
};
|
|
46
|
+
const createCheckStyles = (color, size) => {
|
|
47
|
+
const thickness = Math.max(1.5, Math.round(size * 0.16));
|
|
48
|
+
return StyleSheet.create({
|
|
49
|
+
check: {
|
|
50
|
+
width: size * 0.55,
|
|
51
|
+
height: size,
|
|
52
|
+
borderColor: color,
|
|
53
|
+
borderRightWidth: thickness,
|
|
54
|
+
borderBottomWidth: thickness,
|
|
55
|
+
transform: [{ rotate: '45deg' }],
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const createTicksStyles = (size) => StyleSheet.create({
|
|
60
|
+
row: {
|
|
61
|
+
flexDirection: 'row',
|
|
62
|
+
alignItems: 'center',
|
|
63
|
+
justifyContent: 'center',
|
|
64
|
+
height: size + 2,
|
|
65
|
+
},
|
|
66
|
+
secondCheck: {
|
|
67
|
+
marginLeft: -size * 0.35,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const createClockStyles = (color, size) => {
|
|
71
|
+
const hand = Math.max(1, Math.round(size * 0.09));
|
|
72
|
+
return StyleSheet.create({
|
|
73
|
+
face: {
|
|
74
|
+
width: size,
|
|
75
|
+
height: size,
|
|
76
|
+
borderRadius: size / 2,
|
|
77
|
+
borderColor: color,
|
|
78
|
+
borderWidth: hand,
|
|
79
|
+
alignItems: 'center',
|
|
80
|
+
justifyContent: 'center',
|
|
81
|
+
},
|
|
82
|
+
hands: {
|
|
83
|
+
alignItems: 'center',
|
|
84
|
+
justifyContent: 'center',
|
|
85
|
+
},
|
|
86
|
+
minuteHand: {
|
|
87
|
+
position: 'absolute',
|
|
88
|
+
width: hand,
|
|
89
|
+
height: size * 0.32,
|
|
90
|
+
backgroundColor: color,
|
|
91
|
+
bottom: '50%',
|
|
92
|
+
},
|
|
93
|
+
hourHand: {
|
|
94
|
+
position: 'absolute',
|
|
95
|
+
height: hand,
|
|
96
|
+
width: size * 0.24,
|
|
97
|
+
backgroundColor: color,
|
|
98
|
+
left: '50%',
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=Ticks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ticks.js","sourceRoot":"","sources":["../../src/components/Ticks.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface VideoNoteOverlayProps {
|
|
3
|
+
/** Diameter of the note this overlays. */
|
|
4
|
+
size: number;
|
|
5
|
+
/** Playback position, 0..1. */
|
|
6
|
+
progress: number;
|
|
7
|
+
isMuted: boolean;
|
|
8
|
+
isPlaying: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Chrome drawn *on* a round video note: the progress ring sweeping its edge, a
|
|
12
|
+
* mute badge while it is silent, and a stop target once it is playing.
|
|
13
|
+
*
|
|
14
|
+
* The duration is deliberately not here - Telegram renders it under the circle
|
|
15
|
+
* on the chat background, so it lives in `MessageVideo` beside the note.
|
|
16
|
+
*
|
|
17
|
+
* Non-interactive: the note's own press target handles taps.
|
|
18
|
+
*/
|
|
19
|
+
export declare function VideoNoteOverlay({ size, progress, isMuted, isPlaying, }: VideoNoteOverlayProps): React.JSX.Element;
|
|
20
|
+
/** Duration and unwatched dot, rendered under the note on the chat background. */
|
|
21
|
+
export declare function VideoNoteMeta({ duration, isWatched, }: {
|
|
22
|
+
duration?: number;
|
|
23
|
+
isWatched: boolean;
|
|
24
|
+
}): React.JSX.Element | null;
|
|
25
|
+
//# sourceMappingURL=VideoNoteOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoNoteOverlay.d.ts","sourceRoot":"","sources":["../../src/components/VideoNoteOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAwCtC,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAE,EAChC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,GACV,EAAE,qBAAqB,qBAwCvB;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAE,EAC7B,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;CACnB,4BAUA"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
3
|
+
import { CloseIcon } from './MediaControls';
|
|
4
|
+
// Optional SVG, used to draw the circular progress ring. When absent the note
|
|
5
|
+
// still plays, just without the ring - the same optional-require pattern the
|
|
6
|
+
// recorder uses.
|
|
7
|
+
let Svg = null;
|
|
8
|
+
let SvgCircle = null;
|
|
9
|
+
try {
|
|
10
|
+
const svg = require('react-native-svg');
|
|
11
|
+
Svg = svg.Svg ?? svg.default;
|
|
12
|
+
SvgCircle = svg.Circle;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
Svg = null;
|
|
16
|
+
SvgCircle = null;
|
|
17
|
+
}
|
|
18
|
+
const formatTime = (seconds) => {
|
|
19
|
+
if (!Number.isFinite(seconds) || seconds < 0)
|
|
20
|
+
seconds = 0;
|
|
21
|
+
const mins = Math.floor(seconds / 60);
|
|
22
|
+
const secs = Math.floor(seconds % 60);
|
|
23
|
+
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
24
|
+
};
|
|
25
|
+
/** A speaker glyph, crossed through when muted. */
|
|
26
|
+
const SpeakerIcon = ({ size = 14, isMuted }) => {
|
|
27
|
+
const styles = useMemo(() => createSpeakerStyles(size), [size]);
|
|
28
|
+
return (<View style={styles.wrapper}>
|
|
29
|
+
<View style={styles.body}/>
|
|
30
|
+
<View style={styles.cone}/>
|
|
31
|
+
{isMuted && <View style={styles.slash}/>}
|
|
32
|
+
</View>);
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Chrome drawn *on* a round video note: the progress ring sweeping its edge, a
|
|
36
|
+
* mute badge while it is silent, and a stop target once it is playing.
|
|
37
|
+
*
|
|
38
|
+
* The duration is deliberately not here - Telegram renders it under the circle
|
|
39
|
+
* on the chat background, so it lives in `MessageVideo` beside the note.
|
|
40
|
+
*
|
|
41
|
+
* Non-interactive: the note's own press target handles taps.
|
|
42
|
+
*/
|
|
43
|
+
export function VideoNoteOverlay({ size, progress, isMuted, isPlaying, }) {
|
|
44
|
+
const stroke = 3;
|
|
45
|
+
const radius = size / 2 - stroke / 2;
|
|
46
|
+
const circumference = 2 * Math.PI * radius;
|
|
47
|
+
const clamped = Math.max(0, Math.min(1, progress));
|
|
48
|
+
return (<View style={StyleSheet.absoluteFill} pointerEvents='none'>
|
|
49
|
+
{SvgCircle && clamped > 0 && (<Svg width={size} height={size} style={StyleSheet.absoluteFill}>
|
|
50
|
+
{/* Only the elapsed arc, no track - matching Telegram. */}
|
|
51
|
+
<SvgCircle cx={size / 2} cy={size / 2} r={radius} stroke='#FFFFFF' strokeWidth={stroke} fill='none' strokeLinecap='round' strokeDasharray={circumference} strokeDashoffset={circumference * (1 - clamped)} transform={`rotate(-90 ${size / 2} ${size / 2})`}/>
|
|
52
|
+
</Svg>)}
|
|
53
|
+
|
|
54
|
+
{isPlaying
|
|
55
|
+
? (
|
|
56
|
+
// Playing: a stop target in the middle, as Telegram shows.
|
|
57
|
+
<View style={styles.centerBadge}>
|
|
58
|
+
<CloseIcon color='#fff' size={18}/>
|
|
59
|
+
</View>)
|
|
60
|
+
: isMuted && (<View style={styles.muteBadge}>
|
|
61
|
+
<SpeakerIcon isMuted size={14}/>
|
|
62
|
+
</View>)}
|
|
63
|
+
</View>);
|
|
64
|
+
}
|
|
65
|
+
/** Duration and unwatched dot, rendered under the note on the chat background. */
|
|
66
|
+
export function VideoNoteMeta({ duration, isWatched, }) {
|
|
67
|
+
if (duration == null)
|
|
68
|
+
return null;
|
|
69
|
+
return (<View style={styles.metaRow}>
|
|
70
|
+
<Text style={styles.metaText}>{formatTime(duration)}</Text>
|
|
71
|
+
{!isWatched && <View style={styles.unwatchedDot}/>}
|
|
72
|
+
</View>);
|
|
73
|
+
}
|
|
74
|
+
const styles = StyleSheet.create({
|
|
75
|
+
centerBadge: {
|
|
76
|
+
position: 'absolute',
|
|
77
|
+
alignSelf: 'center',
|
|
78
|
+
top: '50%',
|
|
79
|
+
marginTop: -22,
|
|
80
|
+
width: 44,
|
|
81
|
+
height: 44,
|
|
82
|
+
borderRadius: 22,
|
|
83
|
+
backgroundColor: 'rgba(0, 0, 0, 0.45)',
|
|
84
|
+
alignItems: 'center',
|
|
85
|
+
justifyContent: 'center',
|
|
86
|
+
},
|
|
87
|
+
muteBadge: {
|
|
88
|
+
position: 'absolute',
|
|
89
|
+
bottom: 16,
|
|
90
|
+
alignSelf: 'center',
|
|
91
|
+
width: 28,
|
|
92
|
+
height: 28,
|
|
93
|
+
borderRadius: 14,
|
|
94
|
+
backgroundColor: 'rgba(0, 0, 0, 0.45)',
|
|
95
|
+
alignItems: 'center',
|
|
96
|
+
justifyContent: 'center',
|
|
97
|
+
},
|
|
98
|
+
metaRow: {
|
|
99
|
+
flexDirection: 'row',
|
|
100
|
+
alignItems: 'center',
|
|
101
|
+
gap: 6,
|
|
102
|
+
marginTop: 6,
|
|
103
|
+
alignSelf: 'center',
|
|
104
|
+
},
|
|
105
|
+
metaText: {
|
|
106
|
+
fontSize: 13,
|
|
107
|
+
color: 'rgba(0, 0, 0, 0.45)',
|
|
108
|
+
fontVariant: ['tabular-nums'],
|
|
109
|
+
},
|
|
110
|
+
// Telegram marks a note you have not played yet with a small accent dot.
|
|
111
|
+
unwatchedDot: {
|
|
112
|
+
width: 6,
|
|
113
|
+
height: 6,
|
|
114
|
+
borderRadius: 3,
|
|
115
|
+
backgroundColor: '#3390EC',
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
const createSpeakerStyles = (size) => StyleSheet.create({
|
|
119
|
+
wrapper: {
|
|
120
|
+
width: size,
|
|
121
|
+
height: size,
|
|
122
|
+
alignItems: 'center',
|
|
123
|
+
justifyContent: 'center',
|
|
124
|
+
flexDirection: 'row',
|
|
125
|
+
},
|
|
126
|
+
body: {
|
|
127
|
+
width: size * 0.3,
|
|
128
|
+
height: size * 0.42,
|
|
129
|
+
backgroundColor: '#FFFFFF',
|
|
130
|
+
},
|
|
131
|
+
cone: {
|
|
132
|
+
width: 0,
|
|
133
|
+
height: 0,
|
|
134
|
+
borderTopWidth: size * 0.42,
|
|
135
|
+
borderBottomWidth: size * 0.42,
|
|
136
|
+
borderRightWidth: size * 0.34,
|
|
137
|
+
borderTopColor: 'transparent',
|
|
138
|
+
borderBottomColor: 'transparent',
|
|
139
|
+
borderRightColor: '#FFFFFF',
|
|
140
|
+
transform: [{ rotate: '180deg' }],
|
|
141
|
+
},
|
|
142
|
+
slash: {
|
|
143
|
+
position: 'absolute',
|
|
144
|
+
width: size * 1.1,
|
|
145
|
+
height: 1.5,
|
|
146
|
+
borderRadius: 1,
|
|
147
|
+
backgroundColor: '#FFFFFF',
|
|
148
|
+
transform: [{ rotate: '-45deg' }],
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=VideoNoteOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoNoteOverlay.js","sourceRoot":"","sources":["../../src/components/VideoNoteOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { IMessage, VideoRecordingProps } from '../Models';
|
|
3
|
+
export declare const isVisionCameraAvailable: boolean;
|
|
4
|
+
export declare const isVisionCameraNativeReady: boolean;
|
|
5
|
+
export interface VideoNoteRecorderProps<TMessage extends IMessage = IMessage> {
|
|
6
|
+
config?: VideoRecordingProps;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onSend?: (message: Partial<TMessage>, shouldResetInputToolbar: boolean) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Telegram-style round video note recorder: records the front camera into a
|
|
12
|
+
* circular preview. When react-native-vision-camera's native module is missing
|
|
13
|
+
* (a simulator, or a binary built before the dependency was added) it shows an
|
|
14
|
+
* unavailable state with the shutter disabled rather than fabricating a note.
|
|
15
|
+
* The two paths are separate components so the vision-camera hooks are only ever
|
|
16
|
+
* called when the native module is present (no crash, stable hook order).
|
|
17
|
+
*/
|
|
18
|
+
export declare function VideoNoteRecorder<TMessage extends IMessage = IMessage>(props: VideoNoteRecorderProps<TMessage>): React.JSX.Element;
|
|
19
|
+
//# sourceMappingURL=VideoNoteRecorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VideoNoteRecorder.d.ts","sourceRoot":"","sources":["../../src/components/VideoNoteRecorder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAOhF,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AA2BzD,eAAO,MAAM,uBAAuB,SAAyB,CAAA;AAO7D,eAAO,MAAM,yBAAyB,SASlC,CAAA;AA0BJ,MAAM,WAAW,sBAAsB,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ;IAC1E,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,CACP,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,uBAAuB,EAAE,OAAO,KAC7B,IAAI,CAAA;CACV;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ,EACpE,KAAK,EAAE,sBAAsB,CAAC,QAAQ,CAAC,qBAKxC"}
|