@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.
Files changed (237) hide show
  1. package/README.md +252 -47
  2. package/lib/Actions.d.ts +5 -5
  3. package/lib/Actions.d.ts.map +1 -1
  4. package/lib/Actions.js +28 -39
  5. package/lib/Actions.js.map +1 -1
  6. package/lib/Avatar.d.ts.map +1 -1
  7. package/lib/Avatar.js +22 -27
  8. package/lib/Avatar.js.map +1 -1
  9. package/lib/Bubble/index.d.ts.map +1 -1
  10. package/lib/Bubble/index.js +86 -25
  11. package/lib/Bubble/index.js.map +1 -1
  12. package/lib/Bubble/styles.d.ts +28 -11
  13. package/lib/Bubble/styles.d.ts.map +1 -1
  14. package/lib/Bubble/styles.js +108 -80
  15. package/lib/Bubble/styles.js.map +1 -1
  16. package/lib/Bubble/types.d.ts +12 -7
  17. package/lib/Bubble/types.d.ts.map +1 -1
  18. package/lib/Chat/ChatKeyboardAvoidingView.d.ts +8 -3
  19. package/lib/Chat/ChatKeyboardAvoidingView.d.ts.map +1 -1
  20. package/lib/Chat/ChatKeyboardAvoidingView.js +3 -5
  21. package/lib/Chat/ChatKeyboardAvoidingView.js.map +1 -1
  22. package/lib/Chat/index.d.ts.map +1 -1
  23. package/lib/Chat/index.js +65 -25
  24. package/lib/Chat/index.js.map +1 -1
  25. package/lib/Chat/types.d.ts +35 -25
  26. package/lib/Chat/types.d.ts.map +1 -1
  27. package/lib/ChatAvatar.d.ts.map +1 -1
  28. package/lib/ChatAvatar.js +11 -17
  29. package/lib/ChatAvatar.js.map +1 -1
  30. package/lib/ChatContext.d.ts +29 -1
  31. package/lib/ChatContext.d.ts.map +1 -1
  32. package/lib/ChatContext.js +3 -0
  33. package/lib/ChatContext.js.map +1 -1
  34. package/lib/Color.d.ts.map +1 -1
  35. package/lib/Color.js +6 -2
  36. package/lib/Color.js.map +1 -1
  37. package/lib/Composer.d.ts +14 -1
  38. package/lib/Composer.d.ts.map +1 -1
  39. package/lib/Composer.js +63 -50
  40. package/lib/Composer.js.map +1 -1
  41. package/lib/Day/index.d.ts.map +1 -1
  42. package/lib/Day/index.js +7 -3
  43. package/lib/Day/index.js.map +1 -1
  44. package/lib/Day/styles.d.ts +6 -7
  45. package/lib/Day/styles.d.ts.map +1 -1
  46. package/lib/Day/styles.js +11 -13
  47. package/lib/Day/styles.js.map +1 -1
  48. package/lib/Icons.d.ts +24 -0
  49. package/lib/Icons.d.ts.map +1 -0
  50. package/lib/Icons.js +2 -0
  51. package/lib/Icons.js.map +1 -0
  52. package/lib/InputToolbar.d.ts +18 -5
  53. package/lib/InputToolbar.d.ts.map +1 -1
  54. package/lib/InputToolbar.js +223 -19
  55. package/lib/InputToolbar.js.map +1 -1
  56. package/lib/LoadEarlierMessages.d.ts.map +1 -1
  57. package/lib/LoadEarlierMessages.js +12 -7
  58. package/lib/LoadEarlierMessages.js.map +1 -1
  59. package/lib/Message/index.d.ts.map +1 -1
  60. package/lib/Message/index.js +10 -9
  61. package/lib/Message/index.js.map +1 -1
  62. package/lib/Message/styles.js +2 -2
  63. package/lib/Message/styles.js.map +1 -1
  64. package/lib/MessageAudio.d.ts +2 -1
  65. package/lib/MessageAudio.d.ts.map +1 -1
  66. package/lib/MessageAudio.js +121 -19
  67. package/lib/MessageAudio.js.map +1 -1
  68. package/lib/MessageLocation.d.ts +9 -0
  69. package/lib/MessageLocation.d.ts.map +1 -0
  70. package/lib/MessageLocation.js +85 -0
  71. package/lib/MessageLocation.js.map +1 -0
  72. package/lib/MessageText.d.ts +12 -1
  73. package/lib/MessageText.d.ts.map +1 -1
  74. package/lib/MessageText.js +38 -11
  75. package/lib/MessageText.js.map +1 -1
  76. package/lib/MessageVideo.d.ts +2 -1
  77. package/lib/MessageVideo.d.ts.map +1 -1
  78. package/lib/MessageVideo.js +156 -18
  79. package/lib/MessageVideo.js.map +1 -1
  80. package/lib/MessagesContainer/components/Item/index.d.ts +2 -1
  81. package/lib/MessagesContainer/components/Item/index.d.ts.map +1 -1
  82. package/lib/MessagesContainer/components/Item/index.js +23 -1
  83. package/lib/MessagesContainer/components/Item/index.js.map +1 -1
  84. package/lib/MessagesContainer/index.d.ts.map +1 -1
  85. package/lib/MessagesContainer/index.js +24 -11
  86. package/lib/MessagesContainer/index.js.map +1 -1
  87. package/lib/MessagesContainer/styles.d.ts +23 -3
  88. package/lib/MessagesContainer/styles.d.ts.map +1 -1
  89. package/lib/MessagesContainer/styles.js +25 -5
  90. package/lib/MessagesContainer/styles.js.map +1 -1
  91. package/lib/Models.d.ts +72 -0
  92. package/lib/Models.d.ts.map +1 -1
  93. package/lib/QuickReplies.d.ts +1 -1
  94. package/lib/QuickReplies.d.ts.map +1 -1
  95. package/lib/QuickReplies.js +13 -7
  96. package/lib/QuickReplies.js.map +1 -1
  97. package/lib/Reactions/MessageReactions.d.ts.map +1 -1
  98. package/lib/Reactions/MessageReactions.js +11 -10
  99. package/lib/Reactions/MessageReactions.js.map +1 -1
  100. package/lib/Reactions/ReactionPicker.d.ts.map +1 -1
  101. package/lib/Reactions/ReactionPicker.js +5 -3
  102. package/lib/Reactions/ReactionPicker.js.map +1 -1
  103. package/lib/Send.d.ts +2 -2
  104. package/lib/Send.d.ts.map +1 -1
  105. package/lib/Send.js +37 -37
  106. package/lib/Send.js.map +1 -1
  107. package/lib/SystemMessage.d.ts.map +1 -1
  108. package/lib/SystemMessage.js +8 -5
  109. package/lib/SystemMessage.js.map +1 -1
  110. package/lib/Theme.d.ts +148 -0
  111. package/lib/Theme.d.ts.map +1 -0
  112. package/lib/Theme.js +142 -0
  113. package/lib/Theme.js.map +1 -0
  114. package/lib/Time.d.ts.map +1 -1
  115. package/lib/Time.js +7 -5
  116. package/lib/Time.js.map +1 -1
  117. package/lib/TypingIndicator/index.d.ts.map +1 -1
  118. package/lib/TypingIndicator/index.js +4 -1
  119. package/lib/TypingIndicator/index.js.map +1 -1
  120. package/lib/TypingIndicator/styles.d.ts +2 -2
  121. package/lib/TypingIndicator/styles.d.ts.map +1 -1
  122. package/lib/TypingIndicator/styles.js +4 -5
  123. package/lib/TypingIndicator/styles.js.map +1 -1
  124. package/lib/components/AttachmentSheet.d.ts +28 -0
  125. package/lib/components/AttachmentSheet.d.ts.map +1 -0
  126. package/lib/components/AttachmentSheet.js +177 -0
  127. package/lib/components/AttachmentSheet.js.map +1 -0
  128. package/lib/components/BasicMarkdown.d.ts +12 -0
  129. package/lib/components/BasicMarkdown.d.ts.map +1 -0
  130. package/lib/components/BasicMarkdown.js +220 -0
  131. package/lib/components/BasicMarkdown.js.map +1 -0
  132. package/lib/components/ContextMenu.d.ts +25 -0
  133. package/lib/components/ContextMenu.d.ts.map +1 -0
  134. package/lib/components/ContextMenu.js +122 -0
  135. package/lib/components/ContextMenu.js.map +1 -0
  136. package/lib/components/Icon.d.ts +17 -0
  137. package/lib/components/Icon.d.ts.map +1 -0
  138. package/lib/components/Icon.js +19 -0
  139. package/lib/components/Icon.js.map +1 -0
  140. package/lib/components/LucideIcon.d.ts +10 -0
  141. package/lib/components/LucideIcon.d.ts.map +1 -0
  142. package/lib/components/LucideIcon.js +118 -0
  143. package/lib/components/LucideIcon.js.map +1 -0
  144. package/lib/components/MarkdownMessageText.d.ts +19 -0
  145. package/lib/components/MarkdownMessageText.d.ts.map +1 -0
  146. package/lib/components/MarkdownMessageText.js +35 -0
  147. package/lib/components/MarkdownMessageText.js.map +1 -0
  148. package/lib/components/MediaCard.d.ts +19 -0
  149. package/lib/components/MediaCard.d.ts.map +1 -0
  150. package/lib/components/MediaCard.js +102 -0
  151. package/lib/components/MediaCard.js.map +1 -0
  152. package/lib/components/MediaControls.d.ts +41 -0
  153. package/lib/components/MediaControls.d.ts.map +1 -0
  154. package/lib/components/MediaControls.js +523 -0
  155. package/lib/components/MediaControls.js.map +1 -0
  156. package/lib/components/MessageReply.d.ts.map +1 -1
  157. package/lib/components/MessageReply.js +11 -9
  158. package/lib/components/MessageReply.js.map +1 -1
  159. package/lib/components/ReplyPreview.d.ts +3 -1
  160. package/lib/components/ReplyPreview.d.ts.map +1 -1
  161. package/lib/components/ReplyPreview.js +36 -36
  162. package/lib/components/ReplyPreview.js.map +1 -1
  163. package/lib/components/SendIcon.d.ts +13 -0
  164. package/lib/components/SendIcon.d.ts.map +1 -0
  165. package/lib/components/SendIcon.js +37 -0
  166. package/lib/components/SendIcon.js.map +1 -0
  167. package/lib/components/Ticks.d.ts +25 -0
  168. package/lib/components/Ticks.d.ts.map +1 -0
  169. package/lib/components/Ticks.js +102 -0
  170. package/lib/components/Ticks.js.map +1 -0
  171. package/lib/components/VideoNoteOverlay.d.ts +25 -0
  172. package/lib/components/VideoNoteOverlay.d.ts.map +1 -0
  173. package/lib/components/VideoNoteOverlay.js +151 -0
  174. package/lib/components/VideoNoteOverlay.js.map +1 -0
  175. package/lib/components/VideoNoteRecorder.d.ts +19 -0
  176. package/lib/components/VideoNoteRecorder.d.ts.map +1 -0
  177. package/lib/components/VideoNoteRecorder.js +634 -0
  178. package/lib/components/VideoNoteRecorder.js.map +1 -0
  179. package/lib/components/VideoRecordButton.d.ts +29 -0
  180. package/lib/components/VideoRecordButton.d.ts.map +1 -0
  181. package/lib/components/VideoRecordButton.js +117 -0
  182. package/lib/components/VideoRecordButton.js.map +1 -0
  183. package/lib/components/VoiceMessageInput.d.ts +33 -0
  184. package/lib/components/VoiceMessageInput.d.ts.map +1 -0
  185. package/lib/components/VoiceMessageInput.js +396 -0
  186. package/lib/components/VoiceMessageInput.js.map +1 -0
  187. package/lib/components/WaveformPlayer.d.ts +19 -0
  188. package/lib/components/WaveformPlayer.d.ts.map +1 -0
  189. package/lib/components/WaveformPlayer.js +367 -0
  190. package/lib/components/WaveformPlayer.js.map +1 -0
  191. package/lib/components/mediaPalette.d.ts +23 -0
  192. package/lib/components/mediaPalette.d.ts.map +1 -0
  193. package/lib/components/mediaPalette.js +16 -0
  194. package/lib/components/mediaPalette.js.map +1 -0
  195. package/lib/components/mediaPlayback.d.ts +22 -0
  196. package/lib/components/mediaPlayback.d.ts.map +1 -0
  197. package/lib/components/mediaPlayback.js +34 -0
  198. package/lib/components/mediaPlayback.js.map +1 -0
  199. package/lib/hooks/useColorScheme.d.ts +9 -2
  200. package/lib/hooks/useColorScheme.d.ts.map +1 -1
  201. package/lib/hooks/useColorScheme.js +9 -3
  202. package/lib/hooks/useColorScheme.js.map +1 -1
  203. package/lib/hooks/useIcons.d.ts +4 -0
  204. package/lib/hooks/useIcons.d.ts.map +1 -0
  205. package/lib/hooks/useIcons.js +8 -0
  206. package/lib/hooks/useIcons.js.map +1 -0
  207. package/lib/hooks/useKeyboardVerticalOffset.d.ts +17 -8
  208. package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
  209. package/lib/hooks/useKeyboardVerticalOffset.js +29 -8
  210. package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
  211. package/lib/hooks/useLabels.d.ts +4 -0
  212. package/lib/hooks/useLabels.d.ts.map +1 -0
  213. package/lib/hooks/useLabels.js +8 -0
  214. package/lib/hooks/useLabels.js.map +1 -0
  215. package/lib/hooks/useTheme.d.ts +21 -0
  216. package/lib/hooks/useTheme.d.ts.map +1 -0
  217. package/lib/hooks/useTheme.js +32 -0
  218. package/lib/hooks/useTheme.js.map +1 -0
  219. package/lib/i18n.d.ts +59 -0
  220. package/lib/i18n.d.ts.map +1 -0
  221. package/lib/i18n.js +122 -0
  222. package/lib/i18n.js.map +1 -0
  223. package/lib/index.d.ts +17 -0
  224. package/lib/index.d.ts.map +1 -1
  225. package/lib/index.js +17 -0
  226. package/lib/index.js.map +1 -1
  227. package/lib/types.d.ts +2 -1
  228. package/lib/types.d.ts.map +1 -1
  229. package/package.json +99 -44
  230. package/lib/MessageReply.d.ts +0 -15
  231. package/lib/MessageReply.d.ts.map +0 -1
  232. package/lib/MessageReply.js +0 -102
  233. package/lib/MessageReply.js.map +0 -1
  234. package/lib/ReplyPreview.d.ts +0 -14
  235. package/lib/ReplyPreview.d.ts.map +0 -1
  236. package/lib/ReplyPreview.js +0 -94
  237. package/lib/ReplyPreview.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VoiceMessageInput.js","sourceRoot":"","sources":["../../src/components/VoiceMessageInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ export declare const isWaveformAvailable: boolean;
3
+ export interface WaveformPlayerProps {
4
+ uri: string;
5
+ position?: 'left' | 'right';
6
+ /**
7
+ * Length in seconds from the message, shown before the file has decoded so a
8
+ * note is labelled immediately instead of reading 0:00.
9
+ */
10
+ duration?: number;
11
+ }
12
+ /**
13
+ * Telegram-style voice note: a decoded waveform with a play/pause control, a
14
+ * progress cursor, drag-to-scrub and a playback-speed pill. Powered by
15
+ * react-native-audio-api (decode + playback). Falls back to a tappable MediaCard
16
+ * if decoding fails. Only mounted when audio-api is available.
17
+ */
18
+ export declare function WaveformPlayer({ uri, position, duration: durationProp }: WaveformPlayerProps): React.JSX.Element;
19
+ //# sourceMappingURL=WaveformPlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformPlayer.d.ts","sourceRoot":"","sources":["../../src/components/WaveformPlayer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmE,MAAM,OAAO,CAAA;AAsBvF,eAAO,MAAM,mBAAmB,SAA2B,CAAA;AAa3D,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AA0BD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAE,EAAE,GAAG,EAAE,QAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,mBAAmB,qBA0StG"}
@@ -0,0 +1,367 @@
1
+ import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
2
+ import { Pressable, StyleSheet, Text, View } from 'react-native';
3
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
4
+ import { runOnJS } from 'react-native-reanimated';
5
+ import { useThemedStyles } from '../hooks/useTheme';
6
+ import { Icon } from './Icon';
7
+ import { MediaCard } from './MediaCard';
8
+ import { PauseIcon, PlayIcon } from './MediaControls';
9
+ import { getMediaPalette } from './mediaPalette';
10
+ import { claimPlayback, releasePlayback } from './mediaPlayback';
11
+ // Optional waveform engine. Resolved through a try/catch require so the bundle
12
+ // works whether or not the consumer installed `react-native-audio-api`.
13
+ let audioApi = null;
14
+ try {
15
+ audioApi = require('react-native-audio-api');
16
+ }
17
+ catch {
18
+ audioApi = null;
19
+ }
20
+ export const isWaveformAvailable = !!audioApi?.AudioContext;
21
+ // Bar geometry. The count is derived from the measured track width so the bars
22
+ // always fit: a fixed count with a min bar width overflowed its row and pushed
23
+ // the bubble past its max width.
24
+ const BAR_WIDTH = 2;
25
+ const BAR_GAP = 1;
26
+ const BAR_MIN_HEIGHT = 3;
27
+ const BAR_MAX_HEIGHT = 22;
28
+ const FALLBACK_BAR_COUNT = 32;
29
+ /** Telegram cycles through these on the speed pill. */
30
+ const SPEED_STEPS = [1, 1.5, 2];
31
+ const formatTime = (seconds) => {
32
+ if (!Number.isFinite(seconds) || seconds < 0)
33
+ seconds = 0;
34
+ const mins = Math.floor(seconds / 60);
35
+ const secs = Math.floor(seconds % 60);
36
+ return `${mins}:${secs.toString().padStart(2, '0')}`;
37
+ };
38
+ const downsample = (data, buckets) => {
39
+ const block = Math.floor(data.length / buckets) || 1;
40
+ const out = [];
41
+ for (let i = 0; i < buckets; i++) {
42
+ let sum = 0;
43
+ for (let j = 0; j < block; j++) {
44
+ const v = data[i * block + j] || 0;
45
+ sum += v * v;
46
+ }
47
+ out.push(Math.sqrt(sum / block));
48
+ }
49
+ const max = Math.max(...out, 0.0001);
50
+ return out.map(v => Math.max(0.08, v / max));
51
+ };
52
+ /**
53
+ * Telegram-style voice note: a decoded waveform with a play/pause control, a
54
+ * progress cursor, drag-to-scrub and a playback-speed pill. Powered by
55
+ * react-native-audio-api (decode + playback). Falls back to a tappable MediaCard
56
+ * if decoding fails. Only mounted when audio-api is available.
57
+ */
58
+ export function WaveformPlayer({ uri, position = 'left', duration: durationProp }) {
59
+ const styles = useThemedStyles(position === 'right' ? createRightStyles : createLeftStyles);
60
+ const playerId = useId();
61
+ const [bars, setBars] = useState([]);
62
+ const [failed, setFailed] = useState(false);
63
+ const [isLoading, setIsLoading] = useState(true);
64
+ const [isPlaying, setIsPlaying] = useState(false);
65
+ const [progress, setProgress] = useState(0);
66
+ const [rate, setRate] = useState(1);
67
+ const [trackWidth, setTrackWidth] = useState(0);
68
+ const ctxRef = useRef(null);
69
+ const bufferRef = useRef(null);
70
+ const sourceRef = useRef(null);
71
+ const startedAtRef = useRef(0);
72
+ const rafRef = useRef(null);
73
+ const durationRef = useRef(durationProp ?? 0);
74
+ const rateRef = useRef(1);
75
+ // Latest progress, readable from callbacks that must not re-subscribe on
76
+ // every frame (the scrub gesture and the resume offset).
77
+ const progressRef = useRef(0);
78
+ progressRef.current = progress;
79
+ const barCount = trackWidth > 0
80
+ ? Math.max(8, Math.floor(trackWidth / (BAR_WIDTH + BAR_GAP)))
81
+ : FALLBACK_BAR_COUNT;
82
+ const stopRaf = useCallback(() => {
83
+ if (rafRef.current != null) {
84
+ cancelAnimationFrame(rafRef.current);
85
+ rafRef.current = null;
86
+ }
87
+ }, []);
88
+ useEffect(() => {
89
+ let cancelled = false;
90
+ const ctx = new audioApi.AudioContext();
91
+ ctxRef.current = ctx;
92
+ (async () => {
93
+ try {
94
+ // `decodeAudioData(uri)` is the current API; `decodeAudioDataSource` was
95
+ // its name in older react-native-audio-api releases and no longer exists
96
+ // in 0.13+, where calling it silently degraded every voice note to the
97
+ // MediaCard fallback. Support both so either version works.
98
+ const decode = typeof ctx.decodeAudioData === 'function'
99
+ ? (source) => ctx.decodeAudioData(source)
100
+ : (source) => ctx.decodeAudioDataSource(source);
101
+ const buffer = await decode(uri);
102
+ if (cancelled)
103
+ return;
104
+ bufferRef.current = buffer;
105
+ durationRef.current = buffer.duration ?? durationProp ?? 0;
106
+ setBars(downsample(buffer.getChannelData(0), barCount));
107
+ setIsLoading(false);
108
+ }
109
+ catch {
110
+ if (!cancelled) {
111
+ setFailed(true);
112
+ setIsLoading(false);
113
+ }
114
+ }
115
+ })();
116
+ return () => {
117
+ cancelled = true;
118
+ stopRaf();
119
+ releasePlayback(playerId);
120
+ try {
121
+ sourceRef.current?.stop?.();
122
+ }
123
+ catch {
124
+ // already stopped
125
+ }
126
+ try {
127
+ ctx.close?.();
128
+ }
129
+ catch {
130
+ // noop
131
+ }
132
+ };
133
+ // `barCount` intentionally omitted: it settles on first layout, and
134
+ // re-decoding the file on a width change would be wasteful. The bar list is
135
+ // re-bucketed separately below.
136
+ // eslint-disable-next-line react-hooks/exhaustive-deps
137
+ }, [uri, stopRaf, playerId, durationProp]);
138
+ // Re-bucket an already-decoded waveform when the measured width changes.
139
+ useEffect(() => {
140
+ const buffer = bufferRef.current;
141
+ if (!buffer || trackWidth <= 0)
142
+ return;
143
+ setBars(downsample(buffer.getChannelData(0), barCount));
144
+ }, [barCount, trackWidth]);
145
+ const tick = useCallback(() => {
146
+ const ctx = ctxRef.current;
147
+ const duration = durationRef.current;
148
+ if (!ctx || duration <= 0)
149
+ return;
150
+ const elapsed = (ctx.currentTime - startedAtRef.current) * rateRef.current;
151
+ const next = Math.min(1, elapsed / duration);
152
+ setProgress(next);
153
+ if (next >= 1) {
154
+ setIsPlaying(false);
155
+ setProgress(0);
156
+ stopRaf();
157
+ return;
158
+ }
159
+ rafRef.current = requestAnimationFrame(tick);
160
+ }, [stopRaf]);
161
+ const stopSource = useCallback(() => {
162
+ try {
163
+ sourceRef.current?.stop?.();
164
+ }
165
+ catch {
166
+ // already stopped
167
+ }
168
+ sourceRef.current = null;
169
+ stopRaf();
170
+ setIsPlaying(false);
171
+ }, [stopRaf]);
172
+ const playFrom = useCallback((fraction) => {
173
+ const ctx = ctxRef.current;
174
+ const buffer = bufferRef.current;
175
+ if (!ctx || !buffer)
176
+ return;
177
+ try {
178
+ // Replace any source already running (a scrub mid-playback).
179
+ try {
180
+ sourceRef.current?.stop?.();
181
+ }
182
+ catch {
183
+ // already stopped
184
+ }
185
+ sourceRef.current = null;
186
+ const source = ctx.createBufferSource();
187
+ source.buffer = buffer;
188
+ if (source.playbackRate)
189
+ source.playbackRate.value = rateRef.current;
190
+ source.connect(ctx.destination);
191
+ // `stop()` also fires `ended`, so a pause or a scrub would otherwise run
192
+ // the completion handler and rewind the note. Only the source still owning
193
+ // playback may reset the cursor.
194
+ source.onended = () => {
195
+ if (sourceRef.current !== source)
196
+ return;
197
+ sourceRef.current = null;
198
+ releasePlayback(playerId);
199
+ setIsPlaying(false);
200
+ setProgress(0);
201
+ stopRaf();
202
+ };
203
+ const offset = fraction > 0 && fraction < 1 ? fraction * durationRef.current : 0;
204
+ startedAtRef.current = ctx.currentTime - offset / rateRef.current;
205
+ source.start(0, offset);
206
+ sourceRef.current = source;
207
+ setIsPlaying(true);
208
+ // Starting stops whatever else was playing, the way Telegram does.
209
+ claimPlayback(playerId, stopSource);
210
+ stopRaf();
211
+ rafRef.current = requestAnimationFrame(tick);
212
+ }
213
+ catch {
214
+ setFailed(true);
215
+ }
216
+ }, [tick, stopRaf, playerId, stopSource]);
217
+ const pause = useCallback(() => {
218
+ stopSource();
219
+ releasePlayback(playerId);
220
+ }, [stopSource, playerId]);
221
+ const togglePlayback = useCallback(() => {
222
+ if (isPlaying)
223
+ pause();
224
+ else
225
+ playFrom(progressRef.current);
226
+ }, [isPlaying, pause, playFrom]);
227
+ const cycleRate = useCallback(() => {
228
+ const next = SPEED_STEPS[(SPEED_STEPS.indexOf(rateRef.current) + 1) % SPEED_STEPS.length];
229
+ rateRef.current = next;
230
+ setRate(next);
231
+ // Re-seat a running source so the new rate takes effect immediately.
232
+ if (sourceRef.current)
233
+ playFrom(progressRef.current);
234
+ }, [playFrom]);
235
+ // Tap or drag anywhere on the waveform to seek, like Telegram's scrubber.
236
+ const seekTo = useCallback((x) => {
237
+ if (trackWidth <= 0 || durationRef.current <= 0)
238
+ return;
239
+ const fraction = Math.max(0, Math.min(1, x / trackWidth));
240
+ setProgress(fraction);
241
+ progressRef.current = fraction;
242
+ if (sourceRef.current)
243
+ playFrom(fraction);
244
+ }, [trackWidth, playFrom]);
245
+ // A tap seeks; a horizontal drag scrubs. The pan must only claim horizontal
246
+ // movement, or it fights the message list: without these offsets a vertical
247
+ // drag over a voice note either scrolled *and* scrubbed, or was swallowed
248
+ // entirely and left the note seeking to wherever the finger went down.
249
+ const scrubGesture = useMemo(() => Gesture.Race(Gesture.Tap().onEnd(event => {
250
+ runOnJS(seekTo)(event.x);
251
+ }), Gesture.Pan()
252
+ .activeOffsetX([-6, 6])
253
+ .failOffsetY([-12, 12])
254
+ .onUpdate(event => {
255
+ runOnJS(seekTo)(event.x);
256
+ })), [seekTo]);
257
+ const onTrackLayout = useCallback((event) => {
258
+ setTrackWidth(event.nativeEvent.layout.width);
259
+ }, []);
260
+ if (failed)
261
+ return <MediaCard kind='audio' uri={uri} position={position}/>;
262
+ const displayBars = bars.length ? bars : new Array(barCount).fill(0).map((_, i) => 0.25 + 0.15 * Math.sin(i));
263
+ const playedBars = Math.round(progress * displayBars.length);
264
+ const elapsedTime = isPlaying || progress > 0
265
+ ? progress * durationRef.current
266
+ : (durationRef.current || durationProp || 0);
267
+ return (<View style={styles.row}>
268
+ <Pressable onPress={togglePlayback} disabled={isLoading} accessibilityRole='button' accessibilityState={{ disabled: isLoading, busy: isLoading }} accessibilityLabel={isPlaying ? 'pause' : 'play'} hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }} style={[styles.playCircle, isLoading && styles.playCircleLoading]}>
269
+ {isPlaying
270
+ ? <Icon name='pause' color={styles.glyphColor.color} size={14} fallback={<PauseIcon color={styles.glyphColor.color} size={14}/>}/>
271
+ : <Icon name='play' color={styles.glyphColor.color} size={14} fallback={<PlayIcon color={styles.glyphColor.color} size={14}/>}/>}
272
+ </Pressable>
273
+
274
+ <GestureDetector gesture={scrubGesture}>
275
+ <View style={styles.waveform} onLayout={onTrackLayout} accessibilityRole='adjustable' accessibilityLabel='seek' accessibilityValue={{ min: 0, max: 100, now: Math.round(progress * 100) }}>
276
+ {displayBars.map((value, index) => (<View key={index} style={[
277
+ styles.bar,
278
+ // Heights are per-sample runtime values, so they stay inline.
279
+ { height: BAR_MIN_HEIGHT + value * (BAR_MAX_HEIGHT - BAR_MIN_HEIGHT) },
280
+ index < playedBars ? styles.barPlayed : styles.barUnplayed,
281
+ isLoading && styles.barLoading,
282
+ ]}/>))}
283
+ </View>
284
+ </GestureDetector>
285
+
286
+ <View style={styles.metaColumn}>
287
+ <Text style={styles.time}>{formatTime(elapsedTime)}</Text>
288
+ {(isPlaying || progress > 0) && (<Pressable onPress={cycleRate} accessibilityRole='button' accessibilityLabel={`playback speed ${rate}x`} hitSlop={{ top: 6, bottom: 6, left: 6, right: 6 }} style={styles.speedPill}>
289
+ <Text style={styles.speedText}>{rate}x</Text>
290
+ </Pressable>)}
291
+ </View>
292
+ </View>);
293
+ }
294
+ const makeStyles = (theme, position) => {
295
+ const palette = getMediaPalette(theme, position);
296
+ return StyleSheet.create({
297
+ // Carries the glyph color out of JSX and into the stylesheet.
298
+ glyphColor: {
299
+ color: palette.glyph,
300
+ },
301
+ row: {
302
+ flexDirection: 'row',
303
+ alignItems: 'center',
304
+ paddingVertical: 6,
305
+ paddingHorizontal: 8,
306
+ gap: 10,
307
+ minWidth: 200,
308
+ },
309
+ playCircle: {
310
+ width: 36,
311
+ height: 36,
312
+ borderRadius: 18,
313
+ backgroundColor: palette.control,
314
+ alignItems: 'center',
315
+ justifyContent: 'center',
316
+ },
317
+ playCircleLoading: {
318
+ opacity: 0.5,
319
+ },
320
+ waveform: {
321
+ flex: 1,
322
+ flexDirection: 'row',
323
+ alignItems: 'center',
324
+ height: BAR_MAX_HEIGHT + 4,
325
+ gap: BAR_GAP,
326
+ },
327
+ bar: {
328
+ width: BAR_WIDTH,
329
+ borderRadius: BAR_WIDTH / 2,
330
+ },
331
+ barPlayed: {
332
+ backgroundColor: palette.progress,
333
+ },
334
+ barUnplayed: {
335
+ backgroundColor: palette.track,
336
+ },
337
+ // Decoding: the placeholder comb reads as inert rather than as real data.
338
+ barLoading: {
339
+ opacity: 0.4,
340
+ },
341
+ metaColumn: {
342
+ alignItems: 'flex-end',
343
+ gap: 3,
344
+ },
345
+ time: {
346
+ fontSize: 12,
347
+ color: palette.meta,
348
+ minWidth: 34,
349
+ textAlign: 'right',
350
+ fontVariant: ['tabular-nums'],
351
+ },
352
+ speedPill: {
353
+ paddingHorizontal: 5,
354
+ paddingVertical: 1,
355
+ borderRadius: 8,
356
+ backgroundColor: palette.track,
357
+ },
358
+ speedText: {
359
+ fontSize: 10,
360
+ fontWeight: '600',
361
+ color: palette.meta,
362
+ },
363
+ });
364
+ };
365
+ const createLeftStyles = (theme) => makeStyles(theme, 'left');
366
+ const createRightStyles = (theme) => makeStyles(theme, 'right');
367
+ //# sourceMappingURL=WaveformPlayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformPlayer.js","sourceRoot":"","sources":["../../src/components/WaveformPlayer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ChatTheme } from '../Theme';
2
+ /**
3
+ * Colors for the play/pause control and progress track inside a media bubble.
4
+ *
5
+ * The accent cannot be used for both positions: in the default light theme
6
+ * `colors.accent` and `colors.outgoingBubble` are the same azure, so an accent
7
+ * circle on an outgoing bubble is invisible (1:1 contrast). Telegram solves this
8
+ * the same way - the control inverts on the sender's side.
9
+ */
10
+ export interface MediaPalette {
11
+ /** Filled circle behind the play/pause glyph. */
12
+ control: string;
13
+ /** The glyph itself. */
14
+ glyph: string;
15
+ /** Played portion of the waveform / progress track. */
16
+ progress: string;
17
+ /** Unplayed portion. */
18
+ track: string;
19
+ /** Duration and other meta text. */
20
+ meta: string;
21
+ }
22
+ export declare const getMediaPalette: (theme: ChatTheme, position: "left" | "right") => MediaPalette;
23
+ //# sourceMappingURL=mediaPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaPalette.d.ts","sourceRoot":"","sources":["../../src/components/mediaPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAA;IACf,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,eAAe,GAC1B,OAAO,SAAS,EAChB,UAAU,MAAM,GAAG,OAAO,KACzB,YAeE,CAAA"}
@@ -0,0 +1,16 @@
1
+ export const getMediaPalette = (theme, position) => position === 'right'
2
+ ? {
3
+ control: theme.colors.outgoingText,
4
+ glyph: theme.colors.outgoingBubble,
5
+ progress: theme.colors.outgoingText,
6
+ track: 'rgba(255, 255, 255, 0.45)',
7
+ meta: theme.colors.outgoingText,
8
+ }
9
+ : {
10
+ control: theme.colors.accent,
11
+ glyph: '#FFFFFF',
12
+ progress: theme.colors.accent,
13
+ track: 'rgba(0, 0, 0, 0.20)',
14
+ meta: theme.colors.incomingMeta,
15
+ };
16
+ //# sourceMappingURL=mediaPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaPalette.js","sourceRoot":"","sources":["../../src/components/mediaPalette.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAgB,EAChB,QAA0B,EACZ,EAAE,CAChB,QAAQ,KAAK,OAAO;IAClB,CAAC,CAAC;QACA,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;QAClC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;QAClC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;QACnC,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;KAChC;IACD,CAAC,CAAC;QACA,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC5B,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC7B,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;KAChC,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Module-level registry so only one piece of media plays at a time.
3
+ *
4
+ * Every voice note and round video note owns its own player, and nothing
5
+ * coordinated them: starting a second note left the first one playing, and a
6
+ * chat with several round notes played all of them at once. Telegram always
7
+ * stops the current one when a new one starts.
8
+ *
9
+ * Deliberately not React context - bubbles are recycled by the list, and the
10
+ * registry has to outlive individual mounts to stop a player whose row has
11
+ * already scrolled away.
12
+ */
13
+ type StopHandler = () => void;
14
+ /**
15
+ * Claim playback for `id`, stopping whatever else was playing.
16
+ * Call when a player actually starts.
17
+ */
18
+ export declare const claimPlayback: (id: string, stop: StopHandler) => void;
19
+ /** Give up the claim (on pause, completion or unmount). */
20
+ export declare const releasePlayback: (id: string) => void;
21
+ export {};
22
+ //# sourceMappingURL=mediaPlayback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaPlayback.d.ts","sourceRoot":"","sources":["../../src/components/mediaPlayback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,WAAW,GAAG,MAAM,IAAI,CAAA;AAI7B;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,EAAE,MAAM,WAAW,SAW1D,CAAA;AAED,2DAA2D;AAC3D,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,SAEzC,CAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Module-level registry so only one piece of media plays at a time.
3
+ *
4
+ * Every voice note and round video note owns its own player, and nothing
5
+ * coordinated them: starting a second note left the first one playing, and a
6
+ * chat with several round notes played all of them at once. Telegram always
7
+ * stops the current one when a new one starts.
8
+ *
9
+ * Deliberately not React context - bubbles are recycled by the list, and the
10
+ * registry has to outlive individual mounts to stop a player whose row has
11
+ * already scrolled away.
12
+ */
13
+ const players = new Map();
14
+ /**
15
+ * Claim playback for `id`, stopping whatever else was playing.
16
+ * Call when a player actually starts.
17
+ */
18
+ export const claimPlayback = (id, stop) => {
19
+ for (const [otherId, stopOther] of players)
20
+ if (otherId !== id)
21
+ try {
22
+ stopOther();
23
+ }
24
+ catch {
25
+ // a player that fails to stop must not block the new one
26
+ }
27
+ players.clear();
28
+ players.set(id, stop);
29
+ };
30
+ /** Give up the claim (on pause, completion or unmount). */
31
+ export const releasePlayback = (id) => {
32
+ players.delete(id);
33
+ };
34
+ //# sourceMappingURL=mediaPlayback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaPlayback.js","sourceRoot":"","sources":["../../src/components/mediaPlayback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAU,EAAE,IAAiB,EAAE,EAAE;IAC7D,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO;QACxC,IAAI,OAAO,KAAK,EAAE;YAChB,IAAI,CAAC;gBACH,SAAS,EAAE,CAAA;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;YAC3D,CAAC;IAEL,OAAO,CAAC,KAAK,EAAE,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,EAAE;IAC5C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACpB,CAAC,CAAA"}
@@ -1,8 +1,15 @@
1
+ import { ColorSchemeName } from 'react-native';
2
+ /**
3
+ * React Native 0.86 widened `ColorSchemeName` with `'unspecified'`, which means
4
+ * "no preference expressed" rather than a real scheme. Everything downstream
5
+ * only understands light/dark, so collapse it (and `undefined`) to `null`.
6
+ */
7
+ export declare const normalizeColorScheme: (scheme: ColorSchemeName | "light" | "dark" | null | undefined) => "light" | "dark" | null;
1
8
  /**
2
9
  * Custom hook that returns the color scheme from Chat context if provided,
3
10
  * otherwise falls back to the system color scheme from React Native.
4
11
  *
5
- * @returns The current color scheme ('light', 'dark', null, or undefined)
12
+ * @returns The current color scheme ('light', 'dark', or null)
6
13
  */
7
- export declare function useColorScheme(): import("react-native").ColorSchemeName;
14
+ export declare function useColorScheme(): "light" | "dark" | null;
8
15
  //# sourceMappingURL=useColorScheme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useColorScheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,cAAc,2CAQ7B"}
1
+ {"version":3,"file":"useColorScheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsC,MAAM,cAAc,CAAA;AAGlF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KAC5D,OAAO,GAAG,MAAM,GAAG,IACmC,CAAA;AAEzD;;;;;GAKG;AACH,wBAAgB,cAAc,4BAU7B"}
@@ -1,17 +1,23 @@
1
1
  import { useColorScheme as useRNColorScheme } from 'react-native';
2
2
  import { useChatContext } from '../ChatContext';
3
+ /**
4
+ * React Native 0.86 widened `ColorSchemeName` with `'unspecified'`, which means
5
+ * "no preference expressed" rather than a real scheme. Everything downstream
6
+ * only understands light/dark, so collapse it (and `undefined`) to `null`.
7
+ */
8
+ export const normalizeColorScheme = (scheme) => scheme === 'light' || scheme === 'dark' ? scheme : null;
3
9
  /**
4
10
  * Custom hook that returns the color scheme from Chat context if provided,
5
11
  * otherwise falls back to the system color scheme from React Native.
6
12
  *
7
- * @returns The current color scheme ('light', 'dark', null, or undefined)
13
+ * @returns The current color scheme ('light', 'dark', or null)
8
14
  */
9
15
  export function useColorScheme() {
10
16
  const { getColorScheme } = useChatContext();
11
17
  const contextColorScheme = getColorScheme();
12
18
  const systemColorScheme = useRNColorScheme();
13
- return contextColorScheme !== undefined && contextColorScheme !== null
19
+ return normalizeColorScheme(contextColorScheme !== undefined && contextColorScheme !== null
14
20
  ? contextColorScheme
15
- : systemColorScheme;
21
+ : systemColorScheme);
16
22
  }
17
23
  //# sourceMappingURL=useColorScheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useColorScheme.js","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;IAE5C,OAAO,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI;QACpE,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,iBAAiB,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"useColorScheme.js","sourceRoot":"","sources":["../../src/hooks/useColorScheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA6D,EACpC,EAAE,CAC3B,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAA;IAC3C,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;IAE5C,OAAO,oBAAoB,CACzB,kBAAkB,KAAK,SAAS,IAAI,kBAAkB,KAAK,IAAI;QAC7D,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,iBAAiB,CACtB,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ChatIcons } from '../Icons';
2
+ /** Returns the icon override registry from context (empty outside of Chat). */
3
+ export declare function useIcons(): ChatIcons;
4
+ //# sourceMappingURL=useIcons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIcons.d.ts","sourceRoot":"","sources":["../../src/hooks/useIcons.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAIpC,+EAA+E;AAC/E,wBAAgB,QAAQ,IAAK,SAAS,CAGrC"}