@usechat/react-native 1.0.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/LICENSE +117 -0
- package/README.md +317 -0
- package/dist/clipboard-LTWXJADM.mjs +64 -0
- package/dist/index.d.mts +967 -0
- package/dist/index.d.ts +967 -0
- package/dist/index.js +5395 -0
- package/dist/index.mjs +5288 -0
- package/package.json +111 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,967 @@
|
|
|
1
|
+
import * as React$1 from 'react';
|
|
2
|
+
import React__default, { ReactNode, ComponentType } from 'react';
|
|
3
|
+
import { NativeSyntheticEvent, TextInputContentSizeChangeEventData, TextInput, FlatList } from 'react-native';
|
|
4
|
+
|
|
5
|
+
interface ChatData {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
message: string;
|
|
9
|
+
time: string;
|
|
10
|
+
avatar: string;
|
|
11
|
+
unreadCount?: number;
|
|
12
|
+
isOnline?: boolean;
|
|
13
|
+
hasAttachment?: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface ChatItemProps {
|
|
16
|
+
item: ChatData;
|
|
17
|
+
onPress: (chat: ChatData) => void;
|
|
18
|
+
}
|
|
19
|
+
interface ChatListProps {
|
|
20
|
+
chats: ChatData[];
|
|
21
|
+
onChatPress: (chat: ChatData) => void;
|
|
22
|
+
}
|
|
23
|
+
interface ChatAvatarProps {
|
|
24
|
+
avatar: string;
|
|
25
|
+
isOnline?: boolean;
|
|
26
|
+
size?: 'small' | 'medium' | 'large';
|
|
27
|
+
}
|
|
28
|
+
interface ReplyToMessage$1 {
|
|
29
|
+
id: number;
|
|
30
|
+
text: string;
|
|
31
|
+
senderName?: string;
|
|
32
|
+
isMe: boolean;
|
|
33
|
+
type?: 'text' | 'image';
|
|
34
|
+
imageData?: ImageAttachmentData$1;
|
|
35
|
+
}
|
|
36
|
+
interface MessageReaction$1 {
|
|
37
|
+
emoji: string;
|
|
38
|
+
count: number;
|
|
39
|
+
users: string[];
|
|
40
|
+
}
|
|
41
|
+
interface Message$1 {
|
|
42
|
+
id: number;
|
|
43
|
+
text: string;
|
|
44
|
+
isMe: boolean;
|
|
45
|
+
timestamp: string;
|
|
46
|
+
status?: 'sent' | 'delivered' | 'read';
|
|
47
|
+
senderName?: string;
|
|
48
|
+
replyTo?: ReplyToMessage$1;
|
|
49
|
+
reactions?: MessageReaction$1[];
|
|
50
|
+
type?: 'text' | 'image';
|
|
51
|
+
imageData?: ImageAttachmentData$1;
|
|
52
|
+
deleted?: boolean;
|
|
53
|
+
}
|
|
54
|
+
interface MessageItemProps {
|
|
55
|
+
message: Message$1;
|
|
56
|
+
onLongPress?: (message: Message$1, position?: {
|
|
57
|
+
x: number;
|
|
58
|
+
y: number;
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
}) => void;
|
|
62
|
+
onReactionPress?: (message: Message$1) => void;
|
|
63
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
64
|
+
}
|
|
65
|
+
interface DateSeparator$2 {
|
|
66
|
+
id: string;
|
|
67
|
+
listItemType: 'date-separator';
|
|
68
|
+
date: string;
|
|
69
|
+
displayDate: string;
|
|
70
|
+
}
|
|
71
|
+
interface MessageWithType$1 extends Message$1 {
|
|
72
|
+
listItemType: 'message';
|
|
73
|
+
}
|
|
74
|
+
type MessageListItem$1 = MessageWithType$1 | DateSeparator$2;
|
|
75
|
+
interface DateSeparatorProps {
|
|
76
|
+
date: string;
|
|
77
|
+
displayDate: string;
|
|
78
|
+
}
|
|
79
|
+
interface AttachmentOption {
|
|
80
|
+
id: string;
|
|
81
|
+
label: string;
|
|
82
|
+
icon: any;
|
|
83
|
+
color: string;
|
|
84
|
+
}
|
|
85
|
+
interface AttachmentMenuProps {
|
|
86
|
+
onOptionSelect: (optionId: string) => void;
|
|
87
|
+
options: AttachmentOption[];
|
|
88
|
+
}
|
|
89
|
+
interface AttachmentMenuRef {
|
|
90
|
+
show: () => void;
|
|
91
|
+
hide: () => void;
|
|
92
|
+
}
|
|
93
|
+
interface UseAttachmentMenuReturn {
|
|
94
|
+
menuRef: React.RefObject<AttachmentMenuRef | null>;
|
|
95
|
+
handleOptionSelect: (optionId: string) => void;
|
|
96
|
+
}
|
|
97
|
+
interface AttachmentResult$1 {
|
|
98
|
+
type: 'image' | 'document' | 'location' | 'contact' | 'poll' | 'event';
|
|
99
|
+
data: any;
|
|
100
|
+
}
|
|
101
|
+
interface ImageAttachmentData$1 {
|
|
102
|
+
uri: string;
|
|
103
|
+
width: number;
|
|
104
|
+
height: number;
|
|
105
|
+
fileSize?: number;
|
|
106
|
+
fileName: string;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* UseChat SDK License Validation Utility
|
|
111
|
+
*
|
|
112
|
+
* Copyright (c) 2024 Lukasz Ko and UseChat Team
|
|
113
|
+
* Licensed under UseChat SDK License Agreement
|
|
114
|
+
*/
|
|
115
|
+
interface LicenseConfig {
|
|
116
|
+
licenseKey?: string;
|
|
117
|
+
attribution?: boolean;
|
|
118
|
+
environment?: 'development' | 'production';
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
interface ChatConfig extends LicenseConfig {
|
|
122
|
+
keyboardBehavior?: 'padding' | 'height' | 'position';
|
|
123
|
+
keyboardVerticalOffset?: number;
|
|
124
|
+
enableReactionDetails?: boolean;
|
|
125
|
+
enableMessageActions?: boolean;
|
|
126
|
+
enableScrollToBottom?: boolean;
|
|
127
|
+
enableTypingIndicator?: boolean;
|
|
128
|
+
onMessageSend?: (text: string, replyTo?: Message$1) => void;
|
|
129
|
+
onReactionAdd?: (messageId: number, emoji: string) => void;
|
|
130
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
131
|
+
}
|
|
132
|
+
interface ChatProviderProps {
|
|
133
|
+
children: ReactNode;
|
|
134
|
+
config?: ChatConfig;
|
|
135
|
+
}
|
|
136
|
+
declare const ChatProvider: (props: ChatProviderProps) => React__default.JSX.Element;
|
|
137
|
+
declare const useChatConfig: () => ChatConfig;
|
|
138
|
+
|
|
139
|
+
interface User {
|
|
140
|
+
id: string;
|
|
141
|
+
name: string;
|
|
142
|
+
avatar?: string;
|
|
143
|
+
isOnline?: boolean;
|
|
144
|
+
}
|
|
145
|
+
interface Message {
|
|
146
|
+
id: number;
|
|
147
|
+
text: string;
|
|
148
|
+
isMe: boolean;
|
|
149
|
+
timestamp: string;
|
|
150
|
+
status?: 'sent' | 'delivered' | 'read';
|
|
151
|
+
senderName?: string;
|
|
152
|
+
senderId?: string;
|
|
153
|
+
replyTo?: ReplyToMessage;
|
|
154
|
+
reactions?: MessageReaction[];
|
|
155
|
+
type?: 'text' | 'image';
|
|
156
|
+
attachments?: Attachment[];
|
|
157
|
+
deleted?: boolean;
|
|
158
|
+
imageData?: ImageAttachmentData;
|
|
159
|
+
}
|
|
160
|
+
interface ReplyToMessage {
|
|
161
|
+
id: number;
|
|
162
|
+
text: string;
|
|
163
|
+
senderName?: string;
|
|
164
|
+
senderId?: string;
|
|
165
|
+
isMe: boolean;
|
|
166
|
+
timestamp?: string;
|
|
167
|
+
type?: 'text' | 'image';
|
|
168
|
+
imageData?: ImageAttachmentData;
|
|
169
|
+
}
|
|
170
|
+
interface MessageReaction {
|
|
171
|
+
emoji: string;
|
|
172
|
+
count: number;
|
|
173
|
+
users: string[];
|
|
174
|
+
}
|
|
175
|
+
interface Attachment {
|
|
176
|
+
id: string;
|
|
177
|
+
type: 'image' | 'document' | 'location' | 'contact' | 'poll' | 'event';
|
|
178
|
+
data: any;
|
|
179
|
+
fileName?: string;
|
|
180
|
+
fileSize?: number;
|
|
181
|
+
mimeType?: string;
|
|
182
|
+
uploadStatus?: 'pending' | 'uploading' | 'completed' | 'failed';
|
|
183
|
+
uploadProgress?: number;
|
|
184
|
+
}
|
|
185
|
+
interface ImageAttachmentData {
|
|
186
|
+
uri: string;
|
|
187
|
+
width: number;
|
|
188
|
+
height: number;
|
|
189
|
+
fileSize?: number;
|
|
190
|
+
fileName: string;
|
|
191
|
+
}
|
|
192
|
+
interface DocumentAttachmentData {
|
|
193
|
+
uri: string;
|
|
194
|
+
name: string;
|
|
195
|
+
size?: number;
|
|
196
|
+
mimeType?: string;
|
|
197
|
+
}
|
|
198
|
+
interface LocationAttachmentData {
|
|
199
|
+
coordinates: {
|
|
200
|
+
latitude: number;
|
|
201
|
+
longitude: number;
|
|
202
|
+
};
|
|
203
|
+
address?: any;
|
|
204
|
+
timestamp: number;
|
|
205
|
+
}
|
|
206
|
+
interface ContactAttachmentData {
|
|
207
|
+
id?: string;
|
|
208
|
+
name?: string;
|
|
209
|
+
phoneNumbers?: any[];
|
|
210
|
+
emails?: any[];
|
|
211
|
+
}
|
|
212
|
+
interface AttachmentResult {
|
|
213
|
+
id?: string;
|
|
214
|
+
type: 'image' | 'document' | 'location' | 'contact' | 'poll' | 'event';
|
|
215
|
+
data: any;
|
|
216
|
+
}
|
|
217
|
+
interface ChatScreenHeaderProps {
|
|
218
|
+
name?: string;
|
|
219
|
+
isOnline?: boolean;
|
|
220
|
+
onBack: () => void;
|
|
221
|
+
onVideoCall?: () => void;
|
|
222
|
+
onVoiceCall?: () => void;
|
|
223
|
+
onInfo?: () => void;
|
|
224
|
+
onSimulateTyping?: () => void;
|
|
225
|
+
}
|
|
226
|
+
interface MessageListProps {
|
|
227
|
+
messages: Message[];
|
|
228
|
+
onContentSizeChange?: () => void;
|
|
229
|
+
onMessageLongPress?: (message: Message, position?: {
|
|
230
|
+
x: number;
|
|
231
|
+
y: number;
|
|
232
|
+
width: number;
|
|
233
|
+
height: number;
|
|
234
|
+
}) => void;
|
|
235
|
+
onReactionPress?: (message: Message) => void;
|
|
236
|
+
isTyping?: boolean;
|
|
237
|
+
typingUserName?: string;
|
|
238
|
+
showScrollToBottom?: boolean;
|
|
239
|
+
isReplyActive?: boolean;
|
|
240
|
+
}
|
|
241
|
+
interface MessageInputProps {
|
|
242
|
+
value: string;
|
|
243
|
+
onChangeText: (text: string) => void;
|
|
244
|
+
onSend: () => void;
|
|
245
|
+
onFocus?: () => void;
|
|
246
|
+
height: number;
|
|
247
|
+
onContentSizeChange: (height: number) => void;
|
|
248
|
+
replyToMessage?: Message | null;
|
|
249
|
+
onCancelReply?: () => void;
|
|
250
|
+
onAttachmentSend?: (attachmentResult: AttachmentResult, text?: string) => void;
|
|
251
|
+
}
|
|
252
|
+
interface MessageWithType extends Message {
|
|
253
|
+
listItemType: 'message';
|
|
254
|
+
}
|
|
255
|
+
interface DateSeparator$1 {
|
|
256
|
+
id: string;
|
|
257
|
+
listItemType: 'date-separator';
|
|
258
|
+
date: string;
|
|
259
|
+
displayDate: string;
|
|
260
|
+
}
|
|
261
|
+
type MessageListItem = MessageWithType | DateSeparator$1;
|
|
262
|
+
interface UseChatReturn {
|
|
263
|
+
messages: Message[];
|
|
264
|
+
sendMessage: (text: string, replyTo?: ReplyToMessage) => void;
|
|
265
|
+
sendMessageWithAttachments: (text: string, attachments: Attachment[], replyTo?: ReplyToMessage) => void;
|
|
266
|
+
updateMessageStatus: (messageId: number, status: 'sent' | 'delivered' | 'read') => void;
|
|
267
|
+
addReaction: (messageId: number, emoji: string) => void;
|
|
268
|
+
deleteMessage: (messageId: number) => void;
|
|
269
|
+
removeReaction: (messageId: number, emoji: string) => void;
|
|
270
|
+
isLoading: boolean;
|
|
271
|
+
error: string | null;
|
|
272
|
+
addMessage: (message: Message) => void;
|
|
273
|
+
updateMessage: (messageId: number, updates: Partial<Message>) => void;
|
|
274
|
+
setMessages: (messages: Message[]) => void;
|
|
275
|
+
}
|
|
276
|
+
interface UseAttachmentsReturn {
|
|
277
|
+
attachments: Attachment[];
|
|
278
|
+
openPicker: (type: 'image' | 'document' | 'location' | 'contact') => Promise<void>;
|
|
279
|
+
addAttachment: (attachment: Attachment) => void;
|
|
280
|
+
removeAttachment: (attachmentId: string) => void;
|
|
281
|
+
clearAttachments: () => void;
|
|
282
|
+
uploadAttachments: () => Promise<Attachment[]>;
|
|
283
|
+
isUploading: boolean;
|
|
284
|
+
uploadProgress: number;
|
|
285
|
+
}
|
|
286
|
+
interface UseTypingIndicatorReturn {
|
|
287
|
+
isTyping: boolean;
|
|
288
|
+
typingUsers: string[];
|
|
289
|
+
startTyping: () => void;
|
|
290
|
+
stopTyping: () => void;
|
|
291
|
+
setTypingUsers: (users: string[]) => void;
|
|
292
|
+
}
|
|
293
|
+
interface RenderMessageProps {
|
|
294
|
+
message: Message;
|
|
295
|
+
onLongPress?: (message: Message, position?: {
|
|
296
|
+
x: number;
|
|
297
|
+
y: number;
|
|
298
|
+
width: number;
|
|
299
|
+
height: number;
|
|
300
|
+
}) => void;
|
|
301
|
+
onReactionPress?: (message: Message) => void;
|
|
302
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
303
|
+
}
|
|
304
|
+
interface RenderInputProps {
|
|
305
|
+
value: string;
|
|
306
|
+
onChangeText: (text: string) => void;
|
|
307
|
+
onSend: () => void;
|
|
308
|
+
onFocus?: () => void;
|
|
309
|
+
height: number;
|
|
310
|
+
onContentSizeChange: (height: number) => void;
|
|
311
|
+
replyToMessage?: Message | null;
|
|
312
|
+
onCancelReply?: () => void;
|
|
313
|
+
attachments: Attachment[];
|
|
314
|
+
onAttachmentAdd: (attachment: Attachment) => void;
|
|
315
|
+
onAttachmentRemove: (attachmentId: string) => void;
|
|
316
|
+
onAttachmentUpload: () => Promise<Attachment[]>;
|
|
317
|
+
}
|
|
318
|
+
interface RenderHeaderProps {
|
|
319
|
+
name?: string;
|
|
320
|
+
isOnline?: boolean;
|
|
321
|
+
onBack: () => void;
|
|
322
|
+
onVideoCall?: () => void;
|
|
323
|
+
onVoiceCall?: () => void;
|
|
324
|
+
onInfo?: () => void;
|
|
325
|
+
}
|
|
326
|
+
interface RenderActionSheetProps {
|
|
327
|
+
visible: boolean;
|
|
328
|
+
onClose: () => void;
|
|
329
|
+
isMyMessage: boolean;
|
|
330
|
+
selectedMessage?: Message;
|
|
331
|
+
messagePosition?: {
|
|
332
|
+
x: number;
|
|
333
|
+
y: number;
|
|
334
|
+
width: number;
|
|
335
|
+
height: number;
|
|
336
|
+
};
|
|
337
|
+
onActionPress: (action: string) => void;
|
|
338
|
+
onEmojiReact: (emoji: string) => void;
|
|
339
|
+
}
|
|
340
|
+
interface RenderReactionDetailsProps {
|
|
341
|
+
visible: boolean;
|
|
342
|
+
onClose: () => void;
|
|
343
|
+
reactions: MessageReaction[];
|
|
344
|
+
messageText: string;
|
|
345
|
+
onAddReaction: (emoji: string) => void;
|
|
346
|
+
onRemoveReaction: (emoji: string) => void;
|
|
347
|
+
}
|
|
348
|
+
interface AttachmentUploader {
|
|
349
|
+
upload: (file: File | any) => Promise<{
|
|
350
|
+
url: string;
|
|
351
|
+
metadata?: any;
|
|
352
|
+
}>;
|
|
353
|
+
validate?: (file: File | any) => boolean | string;
|
|
354
|
+
}
|
|
355
|
+
interface AttachmentPlugin {
|
|
356
|
+
type: 'image' | 'document' | 'location' | 'contact';
|
|
357
|
+
picker: () => Promise<any>;
|
|
358
|
+
validator?: (data: any) => boolean | string;
|
|
359
|
+
transformer?: (data: any) => Attachment;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
interface ChatComponents {
|
|
363
|
+
MessageList?: ComponentType<MessageListProps>;
|
|
364
|
+
MessageInput?: ComponentType<MessageInputProps>;
|
|
365
|
+
MessageActionSheet?: ComponentType<any>;
|
|
366
|
+
ReactionDetailsSheet?: ComponentType<any>;
|
|
367
|
+
ScrollToBottomButton?: ComponentType<any>;
|
|
368
|
+
}
|
|
369
|
+
interface ChatRenderProps {
|
|
370
|
+
renderMessage?: (props: RenderMessageProps) => ReactNode;
|
|
371
|
+
renderInput?: (props: RenderInputProps) => ReactNode;
|
|
372
|
+
renderActionSheet?: (props: RenderActionSheetProps) => ReactNode;
|
|
373
|
+
renderReactionDetails?: (props: RenderReactionDetailsProps) => ReactNode;
|
|
374
|
+
}
|
|
375
|
+
interface ChatProps {
|
|
376
|
+
messages?: Message[];
|
|
377
|
+
components?: ChatComponents;
|
|
378
|
+
renderProps?: ChatRenderProps;
|
|
379
|
+
onMessageSend?: (message: Message) => void;
|
|
380
|
+
onReactionAdd?: (messageId: number, emoji: string) => void;
|
|
381
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
382
|
+
onMessageDelete?: (messageId: number) => void;
|
|
383
|
+
onActionPress?: (action: string, message: Message) => void;
|
|
384
|
+
attachmentUploader?: AttachmentUploader;
|
|
385
|
+
maxAttachments?: number;
|
|
386
|
+
maxFileSize?: number;
|
|
387
|
+
allowedFileTypes?: string[];
|
|
388
|
+
enableReactionDetails?: boolean;
|
|
389
|
+
enableMessageActions?: boolean;
|
|
390
|
+
enableScrollToBottom?: boolean;
|
|
391
|
+
enableTypingIndicator?: boolean;
|
|
392
|
+
isTyping?: boolean;
|
|
393
|
+
typingUserName?: string;
|
|
394
|
+
isLoading?: boolean;
|
|
395
|
+
loadingComponent?: ReactNode;
|
|
396
|
+
}
|
|
397
|
+
declare const Chat: React__default.FC<ChatProps>;
|
|
398
|
+
|
|
399
|
+
interface ChatScreenProps extends Omit<ChatProps, 'config'> {
|
|
400
|
+
config?: ChatConfig;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
declare const ChatScreenHeader: React__default.FC<ChatScreenHeaderProps>;
|
|
404
|
+
|
|
405
|
+
declare const MessageItem: React__default.FC<MessageItemProps>;
|
|
406
|
+
|
|
407
|
+
interface ImageMessageProps {
|
|
408
|
+
imageData: ImageAttachmentData$1;
|
|
409
|
+
isMe: boolean;
|
|
410
|
+
onImagePress?: () => void;
|
|
411
|
+
onLongPress?: () => void;
|
|
412
|
+
}
|
|
413
|
+
declare const ImageMessage: React__default.FC<ImageMessageProps>;
|
|
414
|
+
|
|
415
|
+
interface DeletedMessageProps {
|
|
416
|
+
isMe: boolean;
|
|
417
|
+
timestamp: string;
|
|
418
|
+
senderName?: string;
|
|
419
|
+
}
|
|
420
|
+
declare const DeletedMessage: React__default.FC<DeletedMessageProps>;
|
|
421
|
+
|
|
422
|
+
interface ReplyBubbleProps {
|
|
423
|
+
replyTo: ReplyToMessage$1;
|
|
424
|
+
isMyMessage: boolean;
|
|
425
|
+
}
|
|
426
|
+
declare const ReplyBubble: React__default.FC<ReplyBubbleProps>;
|
|
427
|
+
|
|
428
|
+
interface ReplyPreviewProps {
|
|
429
|
+
replyToMessage: Message$1;
|
|
430
|
+
onCancel: () => void;
|
|
431
|
+
}
|
|
432
|
+
declare const ReplyPreview: React__default.FC<ReplyPreviewProps>;
|
|
433
|
+
|
|
434
|
+
interface MessageActionSheetProps {
|
|
435
|
+
visible: boolean;
|
|
436
|
+
onClose: () => void;
|
|
437
|
+
isMyMessage: boolean;
|
|
438
|
+
selectedMessage?: Message$1;
|
|
439
|
+
messagePosition?: {
|
|
440
|
+
x: number;
|
|
441
|
+
y: number;
|
|
442
|
+
width: number;
|
|
443
|
+
height: number;
|
|
444
|
+
};
|
|
445
|
+
onActionPress: (action: string) => void;
|
|
446
|
+
onEmojiReact?: (emoji: string) => void;
|
|
447
|
+
}
|
|
448
|
+
declare const MessageActionSheet: React__default.FC<MessageActionSheetProps>;
|
|
449
|
+
|
|
450
|
+
interface ReactionDetailsSheetProps {
|
|
451
|
+
visible: boolean;
|
|
452
|
+
onClose: () => void;
|
|
453
|
+
reactions: MessageReaction$1[];
|
|
454
|
+
messageText: string;
|
|
455
|
+
onAddReaction?: (emoji: string) => void;
|
|
456
|
+
onRemoveReaction?: (emoji: string) => void;
|
|
457
|
+
}
|
|
458
|
+
declare const ReactionDetailsSheet: ({ visible, onClose, reactions, messageText, onAddReaction, onRemoveReaction, }: ReactionDetailsSheetProps) => React__default.JSX.Element;
|
|
459
|
+
|
|
460
|
+
interface EmojiPickerProps {
|
|
461
|
+
visible: boolean;
|
|
462
|
+
onClose: () => void;
|
|
463
|
+
onEmojiSelected: (emoji: string) => void;
|
|
464
|
+
}
|
|
465
|
+
declare const EmojiPickerComponent: React__default.FC<EmojiPickerProps>;
|
|
466
|
+
|
|
467
|
+
declare const AttachmentMenu: React__default.ForwardRefExoticComponent<AttachmentMenuProps & React__default.RefAttributes<AttachmentMenuRef>>;
|
|
468
|
+
|
|
469
|
+
interface TypingIndicatorProps {
|
|
470
|
+
isVisible: boolean;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* TypingIndicator component that shows animated dots similar to WhatsApp
|
|
474
|
+
* when someone is typing. The dots animate in sequence with a bouncing effect.
|
|
475
|
+
*/
|
|
476
|
+
declare const TypingIndicator: React__default.FC<TypingIndicatorProps>;
|
|
477
|
+
|
|
478
|
+
interface ScrollToBottomButtonProps {
|
|
479
|
+
visible: boolean;
|
|
480
|
+
onPress: () => void;
|
|
481
|
+
isReplyActive?: boolean;
|
|
482
|
+
}
|
|
483
|
+
declare const ScrollToBottomButton: ({ visible, onPress, isReplyActive }: ScrollToBottomButtonProps) => React__default.JSX.Element | null;
|
|
484
|
+
|
|
485
|
+
declare const DateSeparator: React__default.FC<DateSeparatorProps>;
|
|
486
|
+
|
|
487
|
+
interface MessageInputRef {
|
|
488
|
+
focus: () => void;
|
|
489
|
+
}
|
|
490
|
+
declare const MessageInput: React__default.ForwardRefExoticComponent<MessageInputProps & React__default.RefAttributes<MessageInputRef>>;
|
|
491
|
+
|
|
492
|
+
declare const useAttachmentMenu: (onAttachmentSelected?: (result: AttachmentResult$1) => void) => UseAttachmentMenuReturn & {
|
|
493
|
+
options: AttachmentOption[];
|
|
494
|
+
};
|
|
495
|
+
|
|
496
|
+
interface MessageInputState<T = string> {
|
|
497
|
+
value: T;
|
|
498
|
+
height: number;
|
|
499
|
+
isFocused: boolean;
|
|
500
|
+
replyToMessage: Message | null;
|
|
501
|
+
attachments: AttachmentResult[];
|
|
502
|
+
}
|
|
503
|
+
interface MessageInputActions<T = string> {
|
|
504
|
+
setValue: (value: T) => void;
|
|
505
|
+
setHeight: (height: number) => void;
|
|
506
|
+
setFocus: (focused: boolean) => void;
|
|
507
|
+
setReplyToMessage: (message: Message | null) => void;
|
|
508
|
+
addAttachment: (attachment: AttachmentResult) => void;
|
|
509
|
+
removeAttachment: (attachmentId: string) => void;
|
|
510
|
+
clearAttachments: () => void;
|
|
511
|
+
sendMessage: () => void;
|
|
512
|
+
cancelReply: () => void;
|
|
513
|
+
focusInput: () => void;
|
|
514
|
+
handleAttachmentSelected: (result: AttachmentResult) => void;
|
|
515
|
+
handleContentSizeChange: (event: NativeSyntheticEvent<TextInputContentSizeChangeEventData>) => void;
|
|
516
|
+
handleFocus: () => void;
|
|
517
|
+
handleBlur: () => void;
|
|
518
|
+
}
|
|
519
|
+
interface MessageInputConfig<T = string> {
|
|
520
|
+
initialValue?: T;
|
|
521
|
+
initialHeight?: number;
|
|
522
|
+
onValueChange?: (value: T) => void;
|
|
523
|
+
onHeightChange?: (height: number) => void;
|
|
524
|
+
onSend?: (value: T, attachments: AttachmentResult[], replyTo?: Message | null) => void;
|
|
525
|
+
onAttachmentSend?: (attachmentResult: AttachmentResult, text?: T) => void;
|
|
526
|
+
onReplyCancel?: () => void;
|
|
527
|
+
onFocus?: () => void;
|
|
528
|
+
onBlur?: () => void;
|
|
529
|
+
maxHeight?: number;
|
|
530
|
+
minHeight?: number;
|
|
531
|
+
maxLength?: number;
|
|
532
|
+
placeholder?: string;
|
|
533
|
+
}
|
|
534
|
+
interface UseMessageInputReturn<T = string> {
|
|
535
|
+
state: MessageInputState<T>;
|
|
536
|
+
actions: MessageInputActions<T>;
|
|
537
|
+
refs: {
|
|
538
|
+
textInputRef: React__default.RefObject<TextInput>;
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
declare const useMessageInput: <T = string>(config?: MessageInputConfig<T>) => UseMessageInputReturn<T>;
|
|
542
|
+
interface MessageInputContextValue<T = string> {
|
|
543
|
+
state: MessageInputState<T>;
|
|
544
|
+
actions: MessageInputActions<T>;
|
|
545
|
+
refs: {
|
|
546
|
+
textInputRef: React__default.RefObject<TextInput>;
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
declare const useMessageInputContext: <T = string>() => MessageInputContextValue<T>;
|
|
550
|
+
interface MessageInputProviderProps<T = string> {
|
|
551
|
+
children: ReactNode;
|
|
552
|
+
value: MessageInputContextValue<T>;
|
|
553
|
+
}
|
|
554
|
+
declare const MessageInputProvider: <T = string>({ children, value, }: MessageInputProviderProps<T>) => React__default.JSX.Element;
|
|
555
|
+
|
|
556
|
+
interface CompoundComponentProps<T = string> {
|
|
557
|
+
children?: ReactNode;
|
|
558
|
+
render?: (context: MessageInputContextValue<T>) => ReactNode;
|
|
559
|
+
}
|
|
560
|
+
interface AttachmentButtonRenderProps<T = string> {
|
|
561
|
+
actions: MessageInputActions<T>;
|
|
562
|
+
attachmentMenu: ReturnType<typeof useAttachmentMenu>;
|
|
563
|
+
}
|
|
564
|
+
interface SendButtonRenderProps<T = string> {
|
|
565
|
+
state: MessageInputState<T>;
|
|
566
|
+
actions: MessageInputActions<T>;
|
|
567
|
+
}
|
|
568
|
+
interface AttachmentMenuRenderProps<T = string> {
|
|
569
|
+
actions: MessageInputActions<T>;
|
|
570
|
+
attachmentMenu: ReturnType<typeof useAttachmentMenu>;
|
|
571
|
+
}
|
|
572
|
+
declare const MessageInputCompound: {
|
|
573
|
+
Container: <T = string>({ children, render }: CompoundComponentProps<T>) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
574
|
+
ReplyPreview: <T = string>({ render }: CompoundComponentProps<T>) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
575
|
+
TextArea: <T = string>({ render }: CompoundComponentProps<T>) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
576
|
+
AttachmentButton: <T = string>({ render, }: {
|
|
577
|
+
render?: (props: AttachmentButtonRenderProps<T>) => ReactNode;
|
|
578
|
+
}) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
579
|
+
SendButton: <T = string>({ render, }: {
|
|
580
|
+
render?: (props: SendButtonRenderProps<T>) => ReactNode;
|
|
581
|
+
}) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
582
|
+
AttachmentMenu: <T = string>({ render, }: {
|
|
583
|
+
render?: (props: AttachmentMenuRenderProps<T>) => ReactNode;
|
|
584
|
+
}) => string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
interface ExtendedMessageListProps extends MessageListProps {
|
|
588
|
+
isTyping?: boolean;
|
|
589
|
+
typingUserName?: string;
|
|
590
|
+
onScroll?: (event: any) => void;
|
|
591
|
+
onContentSizeChange?: () => void;
|
|
592
|
+
showScrollToBottom?: boolean;
|
|
593
|
+
isReplyActive?: boolean;
|
|
594
|
+
scrollThreshold?: number;
|
|
595
|
+
autoScrollToBottom?: boolean;
|
|
596
|
+
onScrollToBottom?: () => void;
|
|
597
|
+
onScrollToTop?: () => void;
|
|
598
|
+
onScrollPositionChange?: (isNearBottom: boolean, isNearTop: boolean) => void;
|
|
599
|
+
onActionPress?: (action: string, message: Message) => void;
|
|
600
|
+
onReactionAdd?: (messageId: number, emoji: string) => void;
|
|
601
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
602
|
+
onMessageDelete?: (messageId: number) => void;
|
|
603
|
+
onReplyMessage?: (message: Message) => void;
|
|
604
|
+
onCancelReply?: () => void;
|
|
605
|
+
enableMessageActions?: boolean;
|
|
606
|
+
enableReactionDetails?: boolean;
|
|
607
|
+
}
|
|
608
|
+
interface MessageListRef {
|
|
609
|
+
scrollToEnd: (animated?: boolean) => void;
|
|
610
|
+
scrollToOffset: (offset: number, animated?: boolean) => void;
|
|
611
|
+
scrollToIndex: (index: number, animated?: boolean) => void;
|
|
612
|
+
}
|
|
613
|
+
declare const MessageList: React__default.ForwardRefExoticComponent<ExtendedMessageListProps & React__default.RefAttributes<MessageListRef>>;
|
|
614
|
+
|
|
615
|
+
interface MessageListConfig {
|
|
616
|
+
scrollThreshold?: number;
|
|
617
|
+
autoScrollToBottom?: boolean;
|
|
618
|
+
enableMessageActions?: boolean;
|
|
619
|
+
enableReactionDetails?: boolean;
|
|
620
|
+
initialNumToRender?: number;
|
|
621
|
+
maxToRenderPerBatch?: number;
|
|
622
|
+
windowSize?: number;
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Level 3: Core message list hook
|
|
626
|
+
* Handles message data preparation, grouping, and basic operations
|
|
627
|
+
*/
|
|
628
|
+
declare function useMessageList(messages: Message[], config?: MessageListConfig): {
|
|
629
|
+
messageItems: MessageListItem$1[];
|
|
630
|
+
keyExtractor: (item: MessageListItem) => string;
|
|
631
|
+
flatListProps: {
|
|
632
|
+
initialNumToRender: number;
|
|
633
|
+
maxToRenderPerBatch: number;
|
|
634
|
+
windowSize: number;
|
|
635
|
+
inverted: boolean;
|
|
636
|
+
showsVerticalScrollIndicator: boolean;
|
|
637
|
+
keyboardShouldPersistTaps: "handled";
|
|
638
|
+
removeClippedSubviews: boolean;
|
|
639
|
+
scrollEventThrottle: number;
|
|
640
|
+
};
|
|
641
|
+
};
|
|
642
|
+
|
|
643
|
+
interface ScrollState {
|
|
644
|
+
isNearBottom: boolean;
|
|
645
|
+
isNearTop: boolean;
|
|
646
|
+
showScrollToBottomButton: boolean;
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Level 3: Scroll management hook
|
|
650
|
+
* Handles all scroll-related functionality
|
|
651
|
+
*/
|
|
652
|
+
declare function useMessageListScroll(config?: MessageListConfig): {
|
|
653
|
+
flatListRef: React$1.RefObject<FlatList<any> | null>;
|
|
654
|
+
scrollState: ScrollState;
|
|
655
|
+
handleScroll: (event: any) => void;
|
|
656
|
+
handleContentSizeChange: () => void;
|
|
657
|
+
handleNewMessages: (currentMessageCount: number) => void;
|
|
658
|
+
scrollToEnd: (animated?: boolean) => void;
|
|
659
|
+
scrollToOffset: (offset: number, animated?: boolean) => void;
|
|
660
|
+
scrollToIndex: (index: number, animated?: boolean) => void;
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
interface ActionState {
|
|
664
|
+
actionSheetVisible: boolean;
|
|
665
|
+
selectedMessage: Message | null;
|
|
666
|
+
messagePosition?: {
|
|
667
|
+
x: number;
|
|
668
|
+
y: number;
|
|
669
|
+
width: number;
|
|
670
|
+
height: number;
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Level 3: Message actions hook
|
|
675
|
+
* Handles action sheet, message selection, and actions
|
|
676
|
+
*/
|
|
677
|
+
declare function useMessageActions(config?: MessageListConfig): {
|
|
678
|
+
actionState: ActionState;
|
|
679
|
+
handleMessageLongPress: (message: Message, position?: {
|
|
680
|
+
x: number;
|
|
681
|
+
y: number;
|
|
682
|
+
width: number;
|
|
683
|
+
height: number;
|
|
684
|
+
}) => void;
|
|
685
|
+
handleActionSheetClose: () => void;
|
|
686
|
+
handleActionPress: (action: string, callbacks?: {
|
|
687
|
+
onReply?: (message: Message) => void;
|
|
688
|
+
onDelete?: (messageId: number) => void;
|
|
689
|
+
onCopy?: (message: Message) => void;
|
|
690
|
+
onCustomAction?: (action: string, message: Message) => void;
|
|
691
|
+
}) => void;
|
|
692
|
+
};
|
|
693
|
+
|
|
694
|
+
interface ReactionState {
|
|
695
|
+
isReactionDetailsVisible: boolean;
|
|
696
|
+
selectedReactions: any[];
|
|
697
|
+
selectedMessageText: string;
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Level 3: Message reactions hook
|
|
701
|
+
* Handles reaction details, emoji reactions
|
|
702
|
+
*/
|
|
703
|
+
declare function useMessageReactions(config?: MessageListConfig): {
|
|
704
|
+
reactionState: ReactionState;
|
|
705
|
+
selectedMessage: Message | null;
|
|
706
|
+
handleReactionPress: (message: Message) => void;
|
|
707
|
+
handleReactionDetailsClose: () => void;
|
|
708
|
+
handleAddReaction: (emoji: string, onAdd?: (messageId: number, emoji: string) => void) => void;
|
|
709
|
+
handleRemoveReaction: (emoji: string, onRemove?: (messageId: number, emoji: string) => void) => void;
|
|
710
|
+
handleEmojiReact: (emoji: string, onAdd?: (messageId: number, emoji: string) => void) => void;
|
|
711
|
+
};
|
|
712
|
+
|
|
713
|
+
interface ReplyState {
|
|
714
|
+
replyToMessage: Message | null;
|
|
715
|
+
}
|
|
716
|
+
/**
|
|
717
|
+
* Level 3: Reply functionality hook
|
|
718
|
+
* Handles reply-to-message state
|
|
719
|
+
*/
|
|
720
|
+
declare function useMessageReply(): {
|
|
721
|
+
replyState: ReplyState;
|
|
722
|
+
setReplyToMessage: (message: Message | null) => void;
|
|
723
|
+
clearReply: () => void;
|
|
724
|
+
};
|
|
725
|
+
|
|
726
|
+
interface MessageListContextValue {
|
|
727
|
+
messageList: ReturnType<typeof useMessageList>;
|
|
728
|
+
scroll: ReturnType<typeof useMessageListScroll>;
|
|
729
|
+
actions: ReturnType<typeof useMessageActions>;
|
|
730
|
+
reactions: ReturnType<typeof useMessageReactions>;
|
|
731
|
+
reply: ReturnType<typeof useMessageReply>;
|
|
732
|
+
config: MessageListConfig;
|
|
733
|
+
callbacks: {
|
|
734
|
+
onScrollToBottom?: () => void;
|
|
735
|
+
onScrollToTop?: () => void;
|
|
736
|
+
onScrollPositionChange?: (isNearBottom: boolean, isNearTop: boolean) => void;
|
|
737
|
+
onReactionAdd?: (messageId: number, emoji: string) => void;
|
|
738
|
+
onReactionRemove?: (messageId: number, emoji: string) => void;
|
|
739
|
+
onMessageDelete?: (messageId: number) => void;
|
|
740
|
+
onReplyMessage?: (message: Message) => void;
|
|
741
|
+
onActionPress?: (action: string, message: Message) => void;
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
declare function useMessageListContext(): MessageListContextValue;
|
|
745
|
+
declare function MessageListProvider({ children, messages, config, ...callbacks }: {
|
|
746
|
+
children: React__default.ReactNode;
|
|
747
|
+
messages: Message[];
|
|
748
|
+
config?: MessageListConfig;
|
|
749
|
+
} & MessageListContextValue['callbacks']): React__default.JSX.Element;
|
|
750
|
+
|
|
751
|
+
declare const MessageListCompound: {
|
|
752
|
+
Provider: typeof MessageListProvider;
|
|
753
|
+
Container: ({ children, style, }: {
|
|
754
|
+
children: React__default.ReactNode;
|
|
755
|
+
style?: any;
|
|
756
|
+
}) => React__default.JSX.Element;
|
|
757
|
+
Messages: ({ renderMessage, style, }: {
|
|
758
|
+
renderMessage?: (props: {
|
|
759
|
+
message: Message;
|
|
760
|
+
index: number;
|
|
761
|
+
}) => React__default.ReactNode;
|
|
762
|
+
style?: any;
|
|
763
|
+
}) => React__default.JSX.Element;
|
|
764
|
+
TypingIndicator: ({ isVisible }: {
|
|
765
|
+
isVisible?: boolean;
|
|
766
|
+
}) => React__default.JSX.Element | null;
|
|
767
|
+
ScrollButton: ({ visible, isReplyActive, onPress, }: {
|
|
768
|
+
visible?: boolean;
|
|
769
|
+
isReplyActive?: boolean;
|
|
770
|
+
onPress?: () => void;
|
|
771
|
+
}) => React__default.JSX.Element;
|
|
772
|
+
ActionSheet: () => React__default.JSX.Element | null;
|
|
773
|
+
ReactionDetails: () => React__default.JSX.Element | null;
|
|
774
|
+
};
|
|
775
|
+
|
|
776
|
+
declare const _default: (props: ChatListProps) => React__default.JSX.Element;
|
|
777
|
+
|
|
778
|
+
declare const ChatItem: React__default.FC<ChatItemProps>;
|
|
779
|
+
|
|
780
|
+
interface ChatHeaderProps {
|
|
781
|
+
title: string;
|
|
782
|
+
}
|
|
783
|
+
declare const ChatHeader: React__default.FC<ChatHeaderProps>;
|
|
784
|
+
|
|
785
|
+
interface ChatListSearchBarProps {
|
|
786
|
+
value: string;
|
|
787
|
+
onChangeText: (text: string) => void;
|
|
788
|
+
onClear: () => void;
|
|
789
|
+
placeholder?: string;
|
|
790
|
+
}
|
|
791
|
+
declare const ChatListSearchBarBase: React__default.FC<ChatListSearchBarProps>;
|
|
792
|
+
|
|
793
|
+
declare const ChatAvatar: React__default.FC<ChatAvatarProps>;
|
|
794
|
+
|
|
795
|
+
interface ThemeColors {
|
|
796
|
+
primary: string;
|
|
797
|
+
secondary: string;
|
|
798
|
+
background: string;
|
|
799
|
+
surface: string;
|
|
800
|
+
surfaceSecondary: string;
|
|
801
|
+
text: string;
|
|
802
|
+
textSecondary: string;
|
|
803
|
+
textMuted: string;
|
|
804
|
+
border: string;
|
|
805
|
+
borderLight: string;
|
|
806
|
+
success: string;
|
|
807
|
+
error: string;
|
|
808
|
+
warning: string;
|
|
809
|
+
unread: string;
|
|
810
|
+
online: string;
|
|
811
|
+
messageBubble: {
|
|
812
|
+
sent: string;
|
|
813
|
+
received: string;
|
|
814
|
+
sentText: string;
|
|
815
|
+
receivedText: string;
|
|
816
|
+
};
|
|
817
|
+
gray: {
|
|
818
|
+
50: string;
|
|
819
|
+
100: string;
|
|
820
|
+
200: string;
|
|
821
|
+
300: string;
|
|
822
|
+
400: string;
|
|
823
|
+
500: string;
|
|
824
|
+
600: string;
|
|
825
|
+
700: string;
|
|
826
|
+
800: string;
|
|
827
|
+
900: string;
|
|
828
|
+
};
|
|
829
|
+
blue: {
|
|
830
|
+
50: string;
|
|
831
|
+
500: string;
|
|
832
|
+
600: string;
|
|
833
|
+
};
|
|
834
|
+
green: {
|
|
835
|
+
500: string;
|
|
836
|
+
};
|
|
837
|
+
}
|
|
838
|
+
interface ThemeSpacing {
|
|
839
|
+
xs: number;
|
|
840
|
+
sm: number;
|
|
841
|
+
md: number;
|
|
842
|
+
lg: number;
|
|
843
|
+
xl: number;
|
|
844
|
+
xxl: number;
|
|
845
|
+
}
|
|
846
|
+
interface ThemeBorderRadius {
|
|
847
|
+
sm: number;
|
|
848
|
+
md: number;
|
|
849
|
+
lg: number;
|
|
850
|
+
xl: number;
|
|
851
|
+
full: number;
|
|
852
|
+
}
|
|
853
|
+
interface ThemeTypography {
|
|
854
|
+
fontFamily: string;
|
|
855
|
+
fontSize: {
|
|
856
|
+
xs: number;
|
|
857
|
+
sm: number;
|
|
858
|
+
base: number;
|
|
859
|
+
lg: number;
|
|
860
|
+
xl: number;
|
|
861
|
+
xxl: number;
|
|
862
|
+
};
|
|
863
|
+
fontWeight: {
|
|
864
|
+
normal: '400' | 'normal';
|
|
865
|
+
medium: '500' | 'medium';
|
|
866
|
+
semibold: '600' | 'semibold';
|
|
867
|
+
bold: '700' | 'bold';
|
|
868
|
+
};
|
|
869
|
+
lineHeight: {
|
|
870
|
+
tight: number;
|
|
871
|
+
normal: number;
|
|
872
|
+
relaxed: number;
|
|
873
|
+
};
|
|
874
|
+
}
|
|
875
|
+
interface Theme {
|
|
876
|
+
colors: ThemeColors;
|
|
877
|
+
spacing: ThemeSpacing;
|
|
878
|
+
borderRadius: ThemeBorderRadius;
|
|
879
|
+
typography: ThemeTypography;
|
|
880
|
+
}
|
|
881
|
+
interface ThemeProviderProps {
|
|
882
|
+
children: React.ReactNode;
|
|
883
|
+
theme?: Partial<Theme>;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
declare const ThemeProvider: ({ children, theme: customTheme }: ThemeProviderProps) => React__default.JSX.Element;
|
|
887
|
+
|
|
888
|
+
declare const defaultTheme: Theme;
|
|
889
|
+
|
|
890
|
+
declare const useTheme: () => Theme;
|
|
891
|
+
|
|
892
|
+
interface UseChatMessagesReturn {
|
|
893
|
+
messages: Message$1[];
|
|
894
|
+
sendMessage: (text: string, replyTo?: ReplyToMessage$1) => void;
|
|
895
|
+
sendImageMessage: (imageData: any, text?: string, replyTo?: ReplyToMessage$1) => void;
|
|
896
|
+
updateMessageStatus: (messageId: number, status: 'sent' | 'delivered' | 'read') => void;
|
|
897
|
+
addReaction: (messageId: number, emoji: string) => void;
|
|
898
|
+
deleteMessage: (messageId: number) => void;
|
|
899
|
+
removeReaction: (messageId: number, emoji: string) => void;
|
|
900
|
+
}
|
|
901
|
+
declare const useChatMessages: (senderName?: string) => UseChatMessagesReturn;
|
|
902
|
+
|
|
903
|
+
interface ChatSDKConfig {
|
|
904
|
+
initialMessages?: Message$1[];
|
|
905
|
+
enableOptimisticUpdates?: boolean;
|
|
906
|
+
}
|
|
907
|
+
interface ChatSDKReturn {
|
|
908
|
+
messages: Message$1[];
|
|
909
|
+
isTyping: boolean;
|
|
910
|
+
sendMessage: (text: string, replyTo?: Message$1) => void;
|
|
911
|
+
addReaction: (messageId: number, emoji: string) => void;
|
|
912
|
+
removeReaction: (messageId: number, emoji: string) => void;
|
|
913
|
+
setMessages: (messages: Message$1[]) => void;
|
|
914
|
+
addMessage: (message: Message$1) => void;
|
|
915
|
+
updateMessage: (messageId: number, updates: Partial<Message$1>) => void;
|
|
916
|
+
deleteMessage: (messageId: number) => void;
|
|
917
|
+
setTyping: (isTyping: boolean) => void;
|
|
918
|
+
resetChat: () => void;
|
|
919
|
+
getMessageById: (id: number) => Message$1 | undefined;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Hook for external apps to manage chat state
|
|
923
|
+
* Provides all necessary functionality for a complete chat experience
|
|
924
|
+
*/
|
|
925
|
+
declare const useChatSDK: (config?: ChatSDKConfig) => ChatSDKReturn;
|
|
926
|
+
|
|
927
|
+
interface UseAttachmentsOptions {
|
|
928
|
+
uploader?: AttachmentUploader;
|
|
929
|
+
maxAttachments?: number;
|
|
930
|
+
maxFileSize?: number;
|
|
931
|
+
allowedTypes?: string[];
|
|
932
|
+
onAttachmentAdd?: (attachment: Attachment) => void;
|
|
933
|
+
onAttachmentRemove?: (attachmentId: string) => void;
|
|
934
|
+
onAttachmentUpload?: (attachments: Attachment[]) => void;
|
|
935
|
+
}
|
|
936
|
+
declare const useAttachments: (options?: UseAttachmentsOptions) => UseAttachmentsReturn;
|
|
937
|
+
|
|
938
|
+
interface UseTypingIndicatorOptions {
|
|
939
|
+
typingTimeout?: number;
|
|
940
|
+
onTypingStart?: () => void;
|
|
941
|
+
onTypingStop?: () => void;
|
|
942
|
+
}
|
|
943
|
+
declare const useTypingIndicator: (options?: UseTypingIndicatorOptions) => UseTypingIndicatorReturn;
|
|
944
|
+
|
|
945
|
+
interface ChatInitConfig {
|
|
946
|
+
projectId: string;
|
|
947
|
+
apiUrl?: string;
|
|
948
|
+
debug?: boolean;
|
|
949
|
+
}
|
|
950
|
+
interface ChatInitResponse {
|
|
951
|
+
success: boolean;
|
|
952
|
+
message: string;
|
|
953
|
+
projectId: string;
|
|
954
|
+
activatedAt: string;
|
|
955
|
+
}
|
|
956
|
+
interface ChatInitError {
|
|
957
|
+
error: string;
|
|
958
|
+
projectId?: string;
|
|
959
|
+
}
|
|
960
|
+
/**
|
|
961
|
+
* Initialize the chat SDK with project verification
|
|
962
|
+
* @param config - Configuration object containing projectId and optional apiUrl
|
|
963
|
+
* @returns Promise that resolves to ChatInitResponse or rejects with ChatInitError
|
|
964
|
+
*/
|
|
965
|
+
declare const initChat: (config: ChatInitConfig) => Promise<ChatInitResponse>;
|
|
966
|
+
|
|
967
|
+
export { type ActionState, type Attachment, AttachmentMenu, type AttachmentPlugin, type AttachmentResult, type AttachmentUploader, Chat, ChatAvatar, type ChatConfig, ChatHeader, type ChatInitConfig, type ChatInitError, type ChatInitResponse, ChatItem, _default as ChatList, ChatListSearchBarBase as ChatListSearchBar, type ChatProps, ChatProvider, ChatScreenHeader, type ChatScreenHeaderProps, type ChatScreenProps, type ContactAttachmentData, DateSeparator, DeletedMessage, type DocumentAttachmentData, EmojiPickerComponent as EmojiPicker, type ImageAttachmentData, ImageMessage, type LocationAttachmentData, type Message, MessageActionSheet, MessageInput, type MessageInputActions, MessageInputCompound, type MessageInputConfig, type MessageInputContextValue, type MessageInputProps, MessageInputProvider, type MessageInputRef, type MessageInputState, MessageItem, MessageList, MessageListCompound, type MessageListConfig, type MessageListContextValue, type MessageListItem, type MessageListProps, MessageListProvider, type MessageListRef, type MessageReaction, type MessageWithType, ReactionDetailsSheet, type ReactionState, type RenderActionSheetProps, type RenderHeaderProps, type RenderInputProps, type RenderMessageProps, type RenderReactionDetailsProps, ReplyBubble, ReplyPreview, type ReplyState, type ReplyToMessage, type ScrollState, ScrollToBottomButton, type Theme, type ThemeBorderRadius, type ThemeColors, ThemeProvider, type ThemeProviderProps, type ThemeSpacing, type ThemeTypography, TypingIndicator, type UseAttachmentsReturn, type UseChatReturn, type UseMessageInputReturn, type UseTypingIndicatorReturn, type User, defaultTheme, initChat, useAttachments, useChatConfig, useChatMessages, useChatSDK, useMessageActions, useMessageInput, useMessageInputContext, useMessageList, useMessageListContext, useMessageListScroll, useMessageReactions, useMessageReply, useTheme, useTypingIndicator };
|