@ermis-network/ermis-chat-react 1.0.7 → 1.0.9
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/dist/index.cjs +2787 -1858
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +364 -8
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +160 -1
- package/dist/index.d.ts +160 -1
- package/dist/index.mjs +2787 -1890
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/channelRoleUtils.ts +73 -0
- package/src/channelTypeUtils.ts +46 -0
- package/src/components/Avatar.tsx +57 -31
- package/src/components/ChannelActions.tsx +13 -11
- package/src/components/ChannelHeader.tsx +89 -4
- package/src/components/ChannelInfo/ChannelInfo.tsx +23 -17
- package/src/components/ChannelInfo/ChannelInfoTabs.tsx +57 -26
- package/src/components/ChannelInfo/ChannelSettingsPanel.tsx +4 -2
- package/src/components/ChannelInfo/EditChannelModal.tsx +2 -1
- package/src/components/ChannelInfo/MemberListItem.tsx +2 -1
- package/src/components/ChannelList.tsx +59 -14
- package/src/components/CreateChannelModal.tsx +53 -16
- package/src/components/EditPreview.tsx +2 -1
- package/src/components/ForwardMessageModal.tsx +2 -1
- package/src/components/MediaLightbox.tsx +314 -0
- package/src/components/MessageInput.tsx +14 -11
- package/src/components/MessageItem.tsx +2 -1
- package/src/components/MessageRenderers.tsx +168 -46
- package/src/components/PendingOverlay.tsx +11 -1
- package/src/components/PinnedMessages.tsx +2 -1
- package/src/components/ReplyPreview.tsx +2 -1
- package/src/components/SkippedOverlay.tsx +36 -0
- package/src/components/UserPicker.tsx +1 -1
- package/src/components/VirtualMessageList.tsx +91 -7
- package/src/hooks/useBlockedState.ts +3 -2
- package/src/hooks/useChannelCapabilities.ts +10 -12
- package/src/hooks/useChannelListUpdates.ts +6 -4
- package/src/hooks/useChannelMessages.ts +2 -3
- package/src/hooks/useChannelRowUpdates.ts +3 -2
- package/src/hooks/useMessageActions.ts +23 -9
- package/src/hooks/useOnlineStatus.ts +71 -0
- package/src/hooks/useOnlineUsers.ts +115 -0
- package/src/hooks/usePendingState.ts +8 -3
- package/src/index.ts +61 -9
- package/src/messageTypeUtils.ts +64 -0
- package/src/styles/_channel-list.css +59 -0
- package/src/styles/_media-lightbox.css +263 -0
- package/src/styles/_message-bubble.css +99 -8
- package/src/styles/_message-list.css +25 -0
- package/src/styles/index.css +1 -0
- package/src/types.ts +46 -0
package/dist/index.d.mts
CHANGED
|
@@ -220,6 +220,8 @@ type AvatarProps = {
|
|
|
220
220
|
size?: number;
|
|
221
221
|
/** Additional CSS class name */
|
|
222
222
|
className?: string;
|
|
223
|
+
/** Disable opening the lightbox on click */
|
|
224
|
+
disableLightbox?: boolean;
|
|
223
225
|
};
|
|
224
226
|
type ChannelProps = {
|
|
225
227
|
children: React.ReactNode;
|
|
@@ -259,6 +261,16 @@ type ChannelHeaderProps = {
|
|
|
259
261
|
CallBadgeComponent?: React.ComponentType<{
|
|
260
262
|
callType: string;
|
|
261
263
|
}>;
|
|
264
|
+
/** Show online/offline indicator for direct friend channels (default: true) */
|
|
265
|
+
showOnlineStatus?: boolean;
|
|
266
|
+
/** I18n label for "Online" subtitle (default: "Online") */
|
|
267
|
+
onlineLabel?: string;
|
|
268
|
+
/** I18n label for "Offline" subtitle (default: "Offline") */
|
|
269
|
+
offlineLabel?: string;
|
|
270
|
+
/** Custom online indicator component (replaces the default dot + label) */
|
|
271
|
+
OnlineIndicatorComponent?: React.ComponentType<{
|
|
272
|
+
isOnline: boolean;
|
|
273
|
+
}>;
|
|
262
274
|
};
|
|
263
275
|
/** Data passed to a fully custom HeaderComponent */
|
|
264
276
|
type ChannelHeaderData = {
|
|
@@ -338,6 +350,8 @@ type ChannelItemProps = {
|
|
|
338
350
|
actionLabels?: ChannelActionLabels;
|
|
339
351
|
/** Custom icons for default channel actions */
|
|
340
352
|
actionIcons?: ChannelActionIcons;
|
|
353
|
+
/** Whether the other user in this direct channel is online (friend channels only) */
|
|
354
|
+
isOnline?: boolean;
|
|
341
355
|
};
|
|
342
356
|
type ChannelListProps = {
|
|
343
357
|
filters?: ChannelFilters;
|
|
@@ -393,9 +407,13 @@ type ChannelListProps = {
|
|
|
393
407
|
actionLabels?: ChannelActionLabels;
|
|
394
408
|
/** Custom icons for default channel actions */
|
|
395
409
|
actionIcons?: ChannelActionIcons;
|
|
410
|
+
/** Show online/offline indicator dots on channel item avatars for friend channels (default: true) */
|
|
411
|
+
showOnlineStatus?: boolean;
|
|
396
412
|
};
|
|
397
413
|
type AttachmentProps = {
|
|
398
414
|
attachment: Attachment;
|
|
415
|
+
/** Click handler — when provided, attachment becomes clickable (opens lightbox) */
|
|
416
|
+
onClick?: () => void;
|
|
399
417
|
};
|
|
400
418
|
type MessageRendererProps = {
|
|
401
419
|
message: FormatMessageResponse;
|
|
@@ -412,6 +430,18 @@ type DateSeparatorProps = {
|
|
|
412
430
|
type JumpToLatestProps = {
|
|
413
431
|
onClick: () => void;
|
|
414
432
|
};
|
|
433
|
+
type MediaLightboxItem = {
|
|
434
|
+
type: 'image' | 'video';
|
|
435
|
+
src: string;
|
|
436
|
+
alt?: string;
|
|
437
|
+
posterSrc?: string;
|
|
438
|
+
};
|
|
439
|
+
type MediaLightboxProps = {
|
|
440
|
+
items: MediaLightboxItem[];
|
|
441
|
+
initialIndex?: number;
|
|
442
|
+
isOpen: boolean;
|
|
443
|
+
onClose: () => void;
|
|
444
|
+
};
|
|
415
445
|
type MessageListProps = {
|
|
416
446
|
/** Fully custom render for each message */
|
|
417
447
|
renderMessage?: (message: FormatMessageResponse, isOwnMessage: boolean) => React.ReactNode;
|
|
@@ -459,6 +489,8 @@ type MessageListProps = {
|
|
|
459
489
|
TypingIndicatorComponent?: React.ComponentType;
|
|
460
490
|
/** Custom component for message reactions */
|
|
461
491
|
MessageReactionsComponent?: React.ComponentType<MessageReactionsProps>;
|
|
492
|
+
/** Custom media lightbox component (replaces the default lightbox entirely) */
|
|
493
|
+
MediaLightboxComponent?: React.ComponentType<MediaLightboxProps>;
|
|
462
494
|
/** I18n Labels */
|
|
463
495
|
emptyTitle?: string;
|
|
464
496
|
emptySubtitle?: string;
|
|
@@ -471,9 +503,21 @@ type MessageListProps = {
|
|
|
471
503
|
pendingOverlaySubtitle?: string;
|
|
472
504
|
pendingAcceptLabel?: string;
|
|
473
505
|
pendingRejectLabel?: string;
|
|
506
|
+
/** I18n Label for skip button on direct messaging channels (default: "Skip") */
|
|
507
|
+
pendingSkipLabel?: string;
|
|
508
|
+
skippedOverlayTitle?: string;
|
|
509
|
+
skippedOverlaySubtitle?: string;
|
|
510
|
+
skippedAcceptLabel?: string;
|
|
474
511
|
closedTopicOverlayTitle?: string;
|
|
475
512
|
closedTopicOverlaySubtitle?: string;
|
|
476
513
|
closedTopicReopenLabel?: string;
|
|
514
|
+
/** Custom component for pending invitee notification in direct channels */
|
|
515
|
+
PendingInviteeNotificationComponent?: React.ComponentType<{
|
|
516
|
+
inviteeName?: string;
|
|
517
|
+
label?: string;
|
|
518
|
+
}>;
|
|
519
|
+
/** I18n Label for pending invitee notification */
|
|
520
|
+
pendingInviteeLabel?: string | ((inviteeName?: string) => string);
|
|
477
521
|
};
|
|
478
522
|
type ReactionUser = {
|
|
479
523
|
id: string;
|
|
@@ -1160,6 +1204,7 @@ type CreateChannelModalProps = {
|
|
|
1160
1204
|
cancelButtonLabel?: string;
|
|
1161
1205
|
createButtonLabel?: string;
|
|
1162
1206
|
creatingButtonLabel?: string;
|
|
1207
|
+
messageButtonLabel?: string;
|
|
1163
1208
|
/** File upload configuration for group channel images */
|
|
1164
1209
|
imageAccept?: string;
|
|
1165
1210
|
maxImageSize?: number;
|
|
@@ -1250,6 +1295,38 @@ declare function useBlockedState(channel: Channel$1 | null | undefined, currentU
|
|
|
1250
1295
|
isBlocked: boolean;
|
|
1251
1296
|
};
|
|
1252
1297
|
|
|
1298
|
+
type OnlineStatus = 'online' | 'offline' | 'unknown';
|
|
1299
|
+
/**
|
|
1300
|
+
* Hook that returns the online/offline status of a specific user.
|
|
1301
|
+
*
|
|
1302
|
+
* The status is determined by checking `channel.state.watchers` on the
|
|
1303
|
+
* "friend" channel (direct channel where both members have `owner` role).
|
|
1304
|
+
* Real-time updates are received via `user.watching.start` and
|
|
1305
|
+
* `user.watching.stop` WebSocket events on that channel.
|
|
1306
|
+
*
|
|
1307
|
+
* Returns `'unknown'` if the user is not a friend (no qualifying channel found).
|
|
1308
|
+
*
|
|
1309
|
+
* @param userId – The user ID to check the online status of.
|
|
1310
|
+
* @param channels – The full list of loaded channels (from ChannelList).
|
|
1311
|
+
*/
|
|
1312
|
+
declare function useOnlineStatus(userId: string | undefined, channels: Channel$1[]): OnlineStatus;
|
|
1313
|
+
|
|
1314
|
+
/**
|
|
1315
|
+
* Bulk hook that returns a `Set<string>` of user IDs that are currently online.
|
|
1316
|
+
*
|
|
1317
|
+
* Only users who are "friends" (exist in a direct channel where both
|
|
1318
|
+
* members have `owner` role) are tracked. The status is derived from
|
|
1319
|
+
* `channel.state.watchers` and kept in sync via `user.watching.start`
|
|
1320
|
+
* and `user.watching.stop` WebSocket events at the **client** level
|
|
1321
|
+
* for efficiency (single subscription instead of N per-channel ones).
|
|
1322
|
+
*
|
|
1323
|
+
* Usage in ChannelList: `const onlineUsers = useOnlineUsers(channels);`
|
|
1324
|
+
* Then check: `onlineUsers.has(userId)`.
|
|
1325
|
+
*
|
|
1326
|
+
* @param channels – The full list of loaded channels (from ChannelList).
|
|
1327
|
+
*/
|
|
1328
|
+
declare function useOnlineUsers(channels: Channel$1[]): Set<string>;
|
|
1329
|
+
|
|
1253
1330
|
/**
|
|
1254
1331
|
* Hook that tracks whether the current user is in a 'pending' state for the given channel.
|
|
1255
1332
|
*/
|
|
@@ -1295,6 +1372,8 @@ declare const Channel: React$1.FC<ChannelProps>;
|
|
|
1295
1372
|
* - `AvatarComponent` — replace the avatar
|
|
1296
1373
|
* - `renderTitle(channel)` — fully custom title rendering
|
|
1297
1374
|
* - `renderRight(channel)` — render content on the right side
|
|
1375
|
+
* - `showOnlineStatus` — show online/offline dot for friend channels (default: true)
|
|
1376
|
+
* - `OnlineIndicatorComponent` — replace the default indicator
|
|
1298
1377
|
*
|
|
1299
1378
|
* For a fully custom header, use `Channel`'s `HeaderComponent` prop instead.
|
|
1300
1379
|
*/
|
|
@@ -1381,6 +1460,79 @@ declare function replaceMentionsForPreview(text: string, message: FormatMessageR
|
|
|
1381
1460
|
mentioned_all?: boolean;
|
|
1382
1461
|
}, userMap: Record<string, string>, renderWrapper?: (userId: string, name: string) => string): string;
|
|
1383
1462
|
|
|
1463
|
+
/** Channel supports group features: roles, capabilities, settings, topics, edit, delete */
|
|
1464
|
+
declare function isGroupChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1465
|
+
/** Channel is a direct (1-on-1) conversation: block/unblock, no roles */
|
|
1466
|
+
declare function isDirectChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1467
|
+
/** Channel is a topic (sub-channel of a group channel) */
|
|
1468
|
+
declare function isTopicChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1469
|
+
/** Channel is a public group that users can join without invite */
|
|
1470
|
+
declare function isPublicGroupChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1471
|
+
/** The proxy "general" channel of a topics-enabled group */
|
|
1472
|
+
declare function isGeneralProxy(channel: Channel$1 | null | undefined): boolean;
|
|
1473
|
+
/** Channel has topics feature enabled */
|
|
1474
|
+
declare function hasTopicsEnabled(channel: Channel$1 | null | undefined): boolean;
|
|
1475
|
+
/** Whether blocked state is relevant for this channel type */
|
|
1476
|
+
declare function supportsBlocking(channel: Channel$1 | null | undefined): boolean;
|
|
1477
|
+
|
|
1478
|
+
declare const CHANNEL_ROLES: {
|
|
1479
|
+
readonly OWNER: "owner";
|
|
1480
|
+
readonly MODERATOR: "moder";
|
|
1481
|
+
readonly MEMBER: "member";
|
|
1482
|
+
readonly PENDING: "pending";
|
|
1483
|
+
readonly SKIPPED: "skipped";
|
|
1484
|
+
};
|
|
1485
|
+
type ChannelRole = typeof CHANNEL_ROLES[keyof typeof CHANNEL_ROLES] | string;
|
|
1486
|
+
/** Checks if the user is in a pending state */
|
|
1487
|
+
declare function isPendingMember(role?: string): boolean;
|
|
1488
|
+
/** Checks if the user is in a skipped state (skipped a direct message invite) */
|
|
1489
|
+
declare function isSkippedMember(role?: string): boolean;
|
|
1490
|
+
/** Checks if the user has management permissions (owner or moderator) */
|
|
1491
|
+
declare function canManageChannel(role?: string): boolean;
|
|
1492
|
+
/** Determines if the current user has the permission to remove a specific target member */
|
|
1493
|
+
declare function canRemoveTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1494
|
+
/** Determines if the current user has the permission to ban a specific target member */
|
|
1495
|
+
declare function canBanTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1496
|
+
/** Determines if the current user has the permission to promote a member to moderator */
|
|
1497
|
+
declare function canPromoteTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1498
|
+
/** Determines if the current user has the permission to demote a moderator to simple member */
|
|
1499
|
+
declare function canDemoteTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1500
|
+
/** Checks if the user is an owner of the channel */
|
|
1501
|
+
declare function isOwnerMember(role?: string): boolean;
|
|
1502
|
+
/**
|
|
1503
|
+
* Checks if a direct channel represents a "friend" relationship:
|
|
1504
|
+
* both members must have the 'owner' channel_role.
|
|
1505
|
+
*/
|
|
1506
|
+
declare function isFriendChannel(channel: Channel$1 | null | undefined, targetUserId: string, currentUserId: string): boolean;
|
|
1507
|
+
|
|
1508
|
+
declare const MESSAGE_TYPES: {
|
|
1509
|
+
readonly REGULAR: "regular";
|
|
1510
|
+
readonly SYSTEM: "system";
|
|
1511
|
+
readonly STICKER: "sticker";
|
|
1512
|
+
readonly SIGNAL: "signal";
|
|
1513
|
+
readonly ERROR: "error";
|
|
1514
|
+
};
|
|
1515
|
+
declare const ATTACHMENT_TYPES: {
|
|
1516
|
+
readonly IMAGE: "image";
|
|
1517
|
+
readonly VIDEO: "video";
|
|
1518
|
+
readonly VOICE_RECORDING: "voiceRecording";
|
|
1519
|
+
readonly LINK_PREVIEW: "linkPreview";
|
|
1520
|
+
readonly FILE: "file";
|
|
1521
|
+
readonly AUDIO: "audio";
|
|
1522
|
+
};
|
|
1523
|
+
type MessageType = (typeof MESSAGE_TYPES)[keyof typeof MESSAGE_TYPES] | string;
|
|
1524
|
+
type AttachmentType = (typeof ATTACHMENT_TYPES)[keyof typeof ATTACHMENT_TYPES] | string;
|
|
1525
|
+
declare function isSystemMessage(message: any): boolean;
|
|
1526
|
+
declare function isStickerMessage(message: any): boolean;
|
|
1527
|
+
declare function isRegularMessage(message: any): boolean;
|
|
1528
|
+
declare function isSignalMessage(message: any): boolean;
|
|
1529
|
+
declare function isImageAttachment(attachment: any): boolean;
|
|
1530
|
+
declare function isVideoAttachment(attachment: any): boolean;
|
|
1531
|
+
declare function isVoiceRecordingAttachment(attachment: any): boolean;
|
|
1532
|
+
declare function isLinkPreviewAttachment(attachment: any): boolean;
|
|
1533
|
+
declare function isImage(attachment: any): boolean;
|
|
1534
|
+
declare function isVideo(attachment: any): boolean;
|
|
1535
|
+
|
|
1384
1536
|
declare const MessageAttachment: React$1.FC<AttachmentProps>;
|
|
1385
1537
|
declare const AttachmentList: React$1.FC<{
|
|
1386
1538
|
attachments?: Attachment[];
|
|
@@ -1403,6 +1555,13 @@ declare const ErrorMessage: React$1.FC<MessageRendererProps>;
|
|
|
1403
1555
|
*/
|
|
1404
1556
|
declare const defaultMessageRenderers: Record<MessageLabel, React$1.ComponentType<MessageRendererProps>>;
|
|
1405
1557
|
|
|
1558
|
+
/**
|
|
1559
|
+
* MediaLightbox – full-screen overlay for viewing images & videos.
|
|
1560
|
+
* Supports prev/next navigation, keyboard controls, and image zoom.
|
|
1561
|
+
* Renders via React portal into document.body.
|
|
1562
|
+
*/
|
|
1563
|
+
declare const MediaLightbox: React$1.FC<MediaLightboxProps>;
|
|
1564
|
+
|
|
1406
1565
|
declare const MessageInput: React$1.FC<MessageInputProps>;
|
|
1407
1566
|
|
|
1408
1567
|
/**
|
|
@@ -1583,4 +1742,4 @@ declare const ErmisCallProvider: React$1.FC<ErmisCallProviderProps>;
|
|
|
1583
1742
|
|
|
1584
1743
|
declare const ErmisCallUI: React$1.FC<ErmisCallUIProps>;
|
|
1585
1744
|
|
|
1586
|
-
export { type AddMemberButtonProps, type AddMemberModalProps, type AddMemberUserItemProps, type AttachButtonProps, type AttachmentItem, AttachmentList, type AttachmentProps, Avatar, type AvatarProps, type CallContextValue, Channel, type ChannelAction, type ChannelActionsProps, ChannelHeader, type ChannelHeaderData, type ChannelHeaderProps, ChannelInfo, type ChannelInfoActionsProps, type ChannelInfoCoverProps, type ChannelInfoEmptyStateProps, type ChannelInfoFileItemProps, type ChannelInfoHeaderProps, type ChannelInfoLinkItemProps, type ChannelInfoMediaItemProps, type ChannelInfoMemberItemProps, type ChannelInfoProps, type ChannelInfoTabsProps, ChannelItem, type ChannelItemProps, ChannelList, type ChannelListProps, type ChannelProps, ChannelTopicGroup, type ChatContextValue, ChatProvider, type ChatProviderProps, CreateChannelModal, type CreateChannelModalProps, type DateSeparatorProps, DefaultChannelActions, DefaultChannelInfoActions, DefaultChannelInfoCover, DefaultChannelInfoHeader, DefaultChannelInfoTabs, Dropdown, type DropdownProps, type EmojiButtonProps, type EmojiPickerProps, type ErmisCallConnectedAudioProps, type ErmisCallConnectedVideoProps, ErmisCallContext, type ErmisCallControlsBarProps, type ErmisCallErrorProps, ErmisCallProvider, type ErmisCallProviderProps, type ErmisCallRingingProps, ErmisCallUI, type ErmisCallUIProps, ErrorMessage, type FilePreviewItem, FilesPreview, type FilesPreviewProps, type ForwardChannelItemProps, ForwardMessageModal, type ForwardMessageModalProps, type JumpToLatestProps, type LatestReaction, type MediaTab, type MentionMember, type MentionPayload, MentionSuggestions, type MentionSuggestionsProps, MessageActionsBox, type MessageActionsBoxProps, MessageAttachment, type MessageBubbleProps, MessageInput, type MessageInputProps, MessageItem, type MessageItemProps, type MessageListProps, MessageQuickReactions, MessageReactions, type MessageReactionsProps, type MessageRendererProps, Modal, type ModalProps, Panel, type PinnedMessageItemProps, PinnedMessages, type PinnedMessagesProps, PollMessage, QuotedMessagePreview, type QuotedMessagePreviewProps, type ReactionUser, RegularMessage, ReplyPreview, type ReplyPreviewProps, type SendButtonProps, SignalMessage, StickerMessage, SystemMessage, SystemMessageItem, type SystemMessageItemProps, type Theme, TopicModal, TypingIndicator, type TypingIndicatorProps, type TypingUser, type UseChannelMessagesOptions, type UseChannelReturn, type UseLoadMessagesOptions, type UseLoadMessagesReturn, type UseMentionsOptions, type UseMentionsReturn, type UseScrollToMessageOptions, type UseScrollToMessageReturn, UserPicker, type UserPickerItemProps, type UserPickerProps, type UserPickerSelectedBoxProps, type UserPickerUser, VirtualMessageList, closeAllDropdowns, computeDefaultActions, dedupMessages, defaultMessageRenderers, formatDateLabel, formatTime, getDateKey, getMessageUserId, replaceMentionsForPreview, useBannedState, useBlockedState, useCallContext, useChannel, useChannelListUpdates, useChannelMessages, useChannelRowUpdates, useChatClient, useLoadMessages, useMentions, useMessageActions, usePendingState, useScrollToMessage, useTypingIndicator };
|
|
1745
|
+
export { ATTACHMENT_TYPES, type AddMemberButtonProps, type AddMemberModalProps, type AddMemberUserItemProps, type AttachButtonProps, type AttachmentItem, AttachmentList, type AttachmentProps, type AttachmentType, Avatar, type AvatarProps, CHANNEL_ROLES, type CallContextValue, Channel, type ChannelAction, type ChannelActionsProps, ChannelHeader, type ChannelHeaderData, type ChannelHeaderProps, ChannelInfo, type ChannelInfoActionsProps, type ChannelInfoCoverProps, type ChannelInfoEmptyStateProps, type ChannelInfoFileItemProps, type ChannelInfoHeaderProps, type ChannelInfoLinkItemProps, type ChannelInfoMediaItemProps, type ChannelInfoMemberItemProps, type ChannelInfoProps, type ChannelInfoTabsProps, ChannelItem, type ChannelItemProps, ChannelList, type ChannelListProps, type ChannelProps, type ChannelRole, ChannelTopicGroup, type ChatContextValue, ChatProvider, type ChatProviderProps, CreateChannelModal, type CreateChannelModalProps, type DateSeparatorProps, DefaultChannelActions, DefaultChannelInfoActions, DefaultChannelInfoCover, DefaultChannelInfoHeader, DefaultChannelInfoTabs, Dropdown, type DropdownProps, type EmojiButtonProps, type EmojiPickerProps, type ErmisCallConnectedAudioProps, type ErmisCallConnectedVideoProps, ErmisCallContext, type ErmisCallControlsBarProps, type ErmisCallErrorProps, ErmisCallProvider, type ErmisCallProviderProps, type ErmisCallRingingProps, ErmisCallUI, type ErmisCallUIProps, ErrorMessage, type FilePreviewItem, FilesPreview, type FilesPreviewProps, type ForwardChannelItemProps, ForwardMessageModal, type ForwardMessageModalProps, type JumpToLatestProps, type LatestReaction, MESSAGE_TYPES, MediaLightbox, type MediaLightboxItem, type MediaLightboxProps, type MediaTab, type MentionMember, type MentionPayload, MentionSuggestions, type MentionSuggestionsProps, MessageActionsBox, type MessageActionsBoxProps, MessageAttachment, type MessageBubbleProps, MessageInput, type MessageInputProps, MessageItem, type MessageItemProps, type MessageListProps, MessageQuickReactions, MessageReactions, type MessageReactionsProps, type MessageRendererProps, type MessageType, Modal, type ModalProps, type OnlineStatus, Panel, type PinnedMessageItemProps, PinnedMessages, type PinnedMessagesProps, PollMessage, QuotedMessagePreview, type QuotedMessagePreviewProps, type ReactionUser, RegularMessage, ReplyPreview, type ReplyPreviewProps, type SendButtonProps, SignalMessage, StickerMessage, SystemMessage, SystemMessageItem, type SystemMessageItemProps, type Theme, TopicModal, TypingIndicator, type TypingIndicatorProps, type TypingUser, type UseChannelMessagesOptions, type UseChannelReturn, type UseLoadMessagesOptions, type UseLoadMessagesReturn, type UseMentionsOptions, type UseMentionsReturn, type UseScrollToMessageOptions, type UseScrollToMessageReturn, UserPicker, type UserPickerItemProps, type UserPickerProps, type UserPickerSelectedBoxProps, type UserPickerUser, VirtualMessageList, canBanTargetMember, canDemoteTargetMember, canManageChannel, canPromoteTargetMember, canRemoveTargetMember, closeAllDropdowns, computeDefaultActions, dedupMessages, defaultMessageRenderers, formatDateLabel, formatTime, getDateKey, getMessageUserId, hasTopicsEnabled, isDirectChannel, isFriendChannel, isGeneralProxy, isGroupChannel, isImage, isImageAttachment, isLinkPreviewAttachment, isOwnerMember, isPendingMember, isPublicGroupChannel, isRegularMessage, isSignalMessage, isSkippedMember, isStickerMessage, isSystemMessage, isTopicChannel, isVideo, isVideoAttachment, isVoiceRecordingAttachment, replaceMentionsForPreview, supportsBlocking, useBannedState, useBlockedState, useCallContext, useChannel, useChannelListUpdates, useChannelMessages, useChannelRowUpdates, useChatClient, useLoadMessages, useMentions, useMessageActions, useOnlineStatus, useOnlineUsers, usePendingState, useScrollToMessage, useTypingIndicator };
|
package/dist/index.d.ts
CHANGED
|
@@ -220,6 +220,8 @@ type AvatarProps = {
|
|
|
220
220
|
size?: number;
|
|
221
221
|
/** Additional CSS class name */
|
|
222
222
|
className?: string;
|
|
223
|
+
/** Disable opening the lightbox on click */
|
|
224
|
+
disableLightbox?: boolean;
|
|
223
225
|
};
|
|
224
226
|
type ChannelProps = {
|
|
225
227
|
children: React.ReactNode;
|
|
@@ -259,6 +261,16 @@ type ChannelHeaderProps = {
|
|
|
259
261
|
CallBadgeComponent?: React.ComponentType<{
|
|
260
262
|
callType: string;
|
|
261
263
|
}>;
|
|
264
|
+
/** Show online/offline indicator for direct friend channels (default: true) */
|
|
265
|
+
showOnlineStatus?: boolean;
|
|
266
|
+
/** I18n label for "Online" subtitle (default: "Online") */
|
|
267
|
+
onlineLabel?: string;
|
|
268
|
+
/** I18n label for "Offline" subtitle (default: "Offline") */
|
|
269
|
+
offlineLabel?: string;
|
|
270
|
+
/** Custom online indicator component (replaces the default dot + label) */
|
|
271
|
+
OnlineIndicatorComponent?: React.ComponentType<{
|
|
272
|
+
isOnline: boolean;
|
|
273
|
+
}>;
|
|
262
274
|
};
|
|
263
275
|
/** Data passed to a fully custom HeaderComponent */
|
|
264
276
|
type ChannelHeaderData = {
|
|
@@ -338,6 +350,8 @@ type ChannelItemProps = {
|
|
|
338
350
|
actionLabels?: ChannelActionLabels;
|
|
339
351
|
/** Custom icons for default channel actions */
|
|
340
352
|
actionIcons?: ChannelActionIcons;
|
|
353
|
+
/** Whether the other user in this direct channel is online (friend channels only) */
|
|
354
|
+
isOnline?: boolean;
|
|
341
355
|
};
|
|
342
356
|
type ChannelListProps = {
|
|
343
357
|
filters?: ChannelFilters;
|
|
@@ -393,9 +407,13 @@ type ChannelListProps = {
|
|
|
393
407
|
actionLabels?: ChannelActionLabels;
|
|
394
408
|
/** Custom icons for default channel actions */
|
|
395
409
|
actionIcons?: ChannelActionIcons;
|
|
410
|
+
/** Show online/offline indicator dots on channel item avatars for friend channels (default: true) */
|
|
411
|
+
showOnlineStatus?: boolean;
|
|
396
412
|
};
|
|
397
413
|
type AttachmentProps = {
|
|
398
414
|
attachment: Attachment;
|
|
415
|
+
/** Click handler — when provided, attachment becomes clickable (opens lightbox) */
|
|
416
|
+
onClick?: () => void;
|
|
399
417
|
};
|
|
400
418
|
type MessageRendererProps = {
|
|
401
419
|
message: FormatMessageResponse;
|
|
@@ -412,6 +430,18 @@ type DateSeparatorProps = {
|
|
|
412
430
|
type JumpToLatestProps = {
|
|
413
431
|
onClick: () => void;
|
|
414
432
|
};
|
|
433
|
+
type MediaLightboxItem = {
|
|
434
|
+
type: 'image' | 'video';
|
|
435
|
+
src: string;
|
|
436
|
+
alt?: string;
|
|
437
|
+
posterSrc?: string;
|
|
438
|
+
};
|
|
439
|
+
type MediaLightboxProps = {
|
|
440
|
+
items: MediaLightboxItem[];
|
|
441
|
+
initialIndex?: number;
|
|
442
|
+
isOpen: boolean;
|
|
443
|
+
onClose: () => void;
|
|
444
|
+
};
|
|
415
445
|
type MessageListProps = {
|
|
416
446
|
/** Fully custom render for each message */
|
|
417
447
|
renderMessage?: (message: FormatMessageResponse, isOwnMessage: boolean) => React.ReactNode;
|
|
@@ -459,6 +489,8 @@ type MessageListProps = {
|
|
|
459
489
|
TypingIndicatorComponent?: React.ComponentType;
|
|
460
490
|
/** Custom component for message reactions */
|
|
461
491
|
MessageReactionsComponent?: React.ComponentType<MessageReactionsProps>;
|
|
492
|
+
/** Custom media lightbox component (replaces the default lightbox entirely) */
|
|
493
|
+
MediaLightboxComponent?: React.ComponentType<MediaLightboxProps>;
|
|
462
494
|
/** I18n Labels */
|
|
463
495
|
emptyTitle?: string;
|
|
464
496
|
emptySubtitle?: string;
|
|
@@ -471,9 +503,21 @@ type MessageListProps = {
|
|
|
471
503
|
pendingOverlaySubtitle?: string;
|
|
472
504
|
pendingAcceptLabel?: string;
|
|
473
505
|
pendingRejectLabel?: string;
|
|
506
|
+
/** I18n Label for skip button on direct messaging channels (default: "Skip") */
|
|
507
|
+
pendingSkipLabel?: string;
|
|
508
|
+
skippedOverlayTitle?: string;
|
|
509
|
+
skippedOverlaySubtitle?: string;
|
|
510
|
+
skippedAcceptLabel?: string;
|
|
474
511
|
closedTopicOverlayTitle?: string;
|
|
475
512
|
closedTopicOverlaySubtitle?: string;
|
|
476
513
|
closedTopicReopenLabel?: string;
|
|
514
|
+
/** Custom component for pending invitee notification in direct channels */
|
|
515
|
+
PendingInviteeNotificationComponent?: React.ComponentType<{
|
|
516
|
+
inviteeName?: string;
|
|
517
|
+
label?: string;
|
|
518
|
+
}>;
|
|
519
|
+
/** I18n Label for pending invitee notification */
|
|
520
|
+
pendingInviteeLabel?: string | ((inviteeName?: string) => string);
|
|
477
521
|
};
|
|
478
522
|
type ReactionUser = {
|
|
479
523
|
id: string;
|
|
@@ -1160,6 +1204,7 @@ type CreateChannelModalProps = {
|
|
|
1160
1204
|
cancelButtonLabel?: string;
|
|
1161
1205
|
createButtonLabel?: string;
|
|
1162
1206
|
creatingButtonLabel?: string;
|
|
1207
|
+
messageButtonLabel?: string;
|
|
1163
1208
|
/** File upload configuration for group channel images */
|
|
1164
1209
|
imageAccept?: string;
|
|
1165
1210
|
maxImageSize?: number;
|
|
@@ -1250,6 +1295,38 @@ declare function useBlockedState(channel: Channel$1 | null | undefined, currentU
|
|
|
1250
1295
|
isBlocked: boolean;
|
|
1251
1296
|
};
|
|
1252
1297
|
|
|
1298
|
+
type OnlineStatus = 'online' | 'offline' | 'unknown';
|
|
1299
|
+
/**
|
|
1300
|
+
* Hook that returns the online/offline status of a specific user.
|
|
1301
|
+
*
|
|
1302
|
+
* The status is determined by checking `channel.state.watchers` on the
|
|
1303
|
+
* "friend" channel (direct channel where both members have `owner` role).
|
|
1304
|
+
* Real-time updates are received via `user.watching.start` and
|
|
1305
|
+
* `user.watching.stop` WebSocket events on that channel.
|
|
1306
|
+
*
|
|
1307
|
+
* Returns `'unknown'` if the user is not a friend (no qualifying channel found).
|
|
1308
|
+
*
|
|
1309
|
+
* @param userId – The user ID to check the online status of.
|
|
1310
|
+
* @param channels – The full list of loaded channels (from ChannelList).
|
|
1311
|
+
*/
|
|
1312
|
+
declare function useOnlineStatus(userId: string | undefined, channels: Channel$1[]): OnlineStatus;
|
|
1313
|
+
|
|
1314
|
+
/**
|
|
1315
|
+
* Bulk hook that returns a `Set<string>` of user IDs that are currently online.
|
|
1316
|
+
*
|
|
1317
|
+
* Only users who are "friends" (exist in a direct channel where both
|
|
1318
|
+
* members have `owner` role) are tracked. The status is derived from
|
|
1319
|
+
* `channel.state.watchers` and kept in sync via `user.watching.start`
|
|
1320
|
+
* and `user.watching.stop` WebSocket events at the **client** level
|
|
1321
|
+
* for efficiency (single subscription instead of N per-channel ones).
|
|
1322
|
+
*
|
|
1323
|
+
* Usage in ChannelList: `const onlineUsers = useOnlineUsers(channels);`
|
|
1324
|
+
* Then check: `onlineUsers.has(userId)`.
|
|
1325
|
+
*
|
|
1326
|
+
* @param channels – The full list of loaded channels (from ChannelList).
|
|
1327
|
+
*/
|
|
1328
|
+
declare function useOnlineUsers(channels: Channel$1[]): Set<string>;
|
|
1329
|
+
|
|
1253
1330
|
/**
|
|
1254
1331
|
* Hook that tracks whether the current user is in a 'pending' state for the given channel.
|
|
1255
1332
|
*/
|
|
@@ -1295,6 +1372,8 @@ declare const Channel: React$1.FC<ChannelProps>;
|
|
|
1295
1372
|
* - `AvatarComponent` — replace the avatar
|
|
1296
1373
|
* - `renderTitle(channel)` — fully custom title rendering
|
|
1297
1374
|
* - `renderRight(channel)` — render content on the right side
|
|
1375
|
+
* - `showOnlineStatus` — show online/offline dot for friend channels (default: true)
|
|
1376
|
+
* - `OnlineIndicatorComponent` — replace the default indicator
|
|
1298
1377
|
*
|
|
1299
1378
|
* For a fully custom header, use `Channel`'s `HeaderComponent` prop instead.
|
|
1300
1379
|
*/
|
|
@@ -1381,6 +1460,79 @@ declare function replaceMentionsForPreview(text: string, message: FormatMessageR
|
|
|
1381
1460
|
mentioned_all?: boolean;
|
|
1382
1461
|
}, userMap: Record<string, string>, renderWrapper?: (userId: string, name: string) => string): string;
|
|
1383
1462
|
|
|
1463
|
+
/** Channel supports group features: roles, capabilities, settings, topics, edit, delete */
|
|
1464
|
+
declare function isGroupChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1465
|
+
/** Channel is a direct (1-on-1) conversation: block/unblock, no roles */
|
|
1466
|
+
declare function isDirectChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1467
|
+
/** Channel is a topic (sub-channel of a group channel) */
|
|
1468
|
+
declare function isTopicChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1469
|
+
/** Channel is a public group that users can join without invite */
|
|
1470
|
+
declare function isPublicGroupChannel(channel: Channel$1 | null | undefined): boolean;
|
|
1471
|
+
/** The proxy "general" channel of a topics-enabled group */
|
|
1472
|
+
declare function isGeneralProxy(channel: Channel$1 | null | undefined): boolean;
|
|
1473
|
+
/** Channel has topics feature enabled */
|
|
1474
|
+
declare function hasTopicsEnabled(channel: Channel$1 | null | undefined): boolean;
|
|
1475
|
+
/** Whether blocked state is relevant for this channel type */
|
|
1476
|
+
declare function supportsBlocking(channel: Channel$1 | null | undefined): boolean;
|
|
1477
|
+
|
|
1478
|
+
declare const CHANNEL_ROLES: {
|
|
1479
|
+
readonly OWNER: "owner";
|
|
1480
|
+
readonly MODERATOR: "moder";
|
|
1481
|
+
readonly MEMBER: "member";
|
|
1482
|
+
readonly PENDING: "pending";
|
|
1483
|
+
readonly SKIPPED: "skipped";
|
|
1484
|
+
};
|
|
1485
|
+
type ChannelRole = typeof CHANNEL_ROLES[keyof typeof CHANNEL_ROLES] | string;
|
|
1486
|
+
/** Checks if the user is in a pending state */
|
|
1487
|
+
declare function isPendingMember(role?: string): boolean;
|
|
1488
|
+
/** Checks if the user is in a skipped state (skipped a direct message invite) */
|
|
1489
|
+
declare function isSkippedMember(role?: string): boolean;
|
|
1490
|
+
/** Checks if the user has management permissions (owner or moderator) */
|
|
1491
|
+
declare function canManageChannel(role?: string): boolean;
|
|
1492
|
+
/** Determines if the current user has the permission to remove a specific target member */
|
|
1493
|
+
declare function canRemoveTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1494
|
+
/** Determines if the current user has the permission to ban a specific target member */
|
|
1495
|
+
declare function canBanTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1496
|
+
/** Determines if the current user has the permission to promote a member to moderator */
|
|
1497
|
+
declare function canPromoteTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1498
|
+
/** Determines if the current user has the permission to demote a moderator to simple member */
|
|
1499
|
+
declare function canDemoteTargetMember(currentUserRole?: string, targetRole?: string): boolean;
|
|
1500
|
+
/** Checks if the user is an owner of the channel */
|
|
1501
|
+
declare function isOwnerMember(role?: string): boolean;
|
|
1502
|
+
/**
|
|
1503
|
+
* Checks if a direct channel represents a "friend" relationship:
|
|
1504
|
+
* both members must have the 'owner' channel_role.
|
|
1505
|
+
*/
|
|
1506
|
+
declare function isFriendChannel(channel: Channel$1 | null | undefined, targetUserId: string, currentUserId: string): boolean;
|
|
1507
|
+
|
|
1508
|
+
declare const MESSAGE_TYPES: {
|
|
1509
|
+
readonly REGULAR: "regular";
|
|
1510
|
+
readonly SYSTEM: "system";
|
|
1511
|
+
readonly STICKER: "sticker";
|
|
1512
|
+
readonly SIGNAL: "signal";
|
|
1513
|
+
readonly ERROR: "error";
|
|
1514
|
+
};
|
|
1515
|
+
declare const ATTACHMENT_TYPES: {
|
|
1516
|
+
readonly IMAGE: "image";
|
|
1517
|
+
readonly VIDEO: "video";
|
|
1518
|
+
readonly VOICE_RECORDING: "voiceRecording";
|
|
1519
|
+
readonly LINK_PREVIEW: "linkPreview";
|
|
1520
|
+
readonly FILE: "file";
|
|
1521
|
+
readonly AUDIO: "audio";
|
|
1522
|
+
};
|
|
1523
|
+
type MessageType = (typeof MESSAGE_TYPES)[keyof typeof MESSAGE_TYPES] | string;
|
|
1524
|
+
type AttachmentType = (typeof ATTACHMENT_TYPES)[keyof typeof ATTACHMENT_TYPES] | string;
|
|
1525
|
+
declare function isSystemMessage(message: any): boolean;
|
|
1526
|
+
declare function isStickerMessage(message: any): boolean;
|
|
1527
|
+
declare function isRegularMessage(message: any): boolean;
|
|
1528
|
+
declare function isSignalMessage(message: any): boolean;
|
|
1529
|
+
declare function isImageAttachment(attachment: any): boolean;
|
|
1530
|
+
declare function isVideoAttachment(attachment: any): boolean;
|
|
1531
|
+
declare function isVoiceRecordingAttachment(attachment: any): boolean;
|
|
1532
|
+
declare function isLinkPreviewAttachment(attachment: any): boolean;
|
|
1533
|
+
declare function isImage(attachment: any): boolean;
|
|
1534
|
+
declare function isVideo(attachment: any): boolean;
|
|
1535
|
+
|
|
1384
1536
|
declare const MessageAttachment: React$1.FC<AttachmentProps>;
|
|
1385
1537
|
declare const AttachmentList: React$1.FC<{
|
|
1386
1538
|
attachments?: Attachment[];
|
|
@@ -1403,6 +1555,13 @@ declare const ErrorMessage: React$1.FC<MessageRendererProps>;
|
|
|
1403
1555
|
*/
|
|
1404
1556
|
declare const defaultMessageRenderers: Record<MessageLabel, React$1.ComponentType<MessageRendererProps>>;
|
|
1405
1557
|
|
|
1558
|
+
/**
|
|
1559
|
+
* MediaLightbox – full-screen overlay for viewing images & videos.
|
|
1560
|
+
* Supports prev/next navigation, keyboard controls, and image zoom.
|
|
1561
|
+
* Renders via React portal into document.body.
|
|
1562
|
+
*/
|
|
1563
|
+
declare const MediaLightbox: React$1.FC<MediaLightboxProps>;
|
|
1564
|
+
|
|
1406
1565
|
declare const MessageInput: React$1.FC<MessageInputProps>;
|
|
1407
1566
|
|
|
1408
1567
|
/**
|
|
@@ -1583,4 +1742,4 @@ declare const ErmisCallProvider: React$1.FC<ErmisCallProviderProps>;
|
|
|
1583
1742
|
|
|
1584
1743
|
declare const ErmisCallUI: React$1.FC<ErmisCallUIProps>;
|
|
1585
1744
|
|
|
1586
|
-
export { type AddMemberButtonProps, type AddMemberModalProps, type AddMemberUserItemProps, type AttachButtonProps, type AttachmentItem, AttachmentList, type AttachmentProps, Avatar, type AvatarProps, type CallContextValue, Channel, type ChannelAction, type ChannelActionsProps, ChannelHeader, type ChannelHeaderData, type ChannelHeaderProps, ChannelInfo, type ChannelInfoActionsProps, type ChannelInfoCoverProps, type ChannelInfoEmptyStateProps, type ChannelInfoFileItemProps, type ChannelInfoHeaderProps, type ChannelInfoLinkItemProps, type ChannelInfoMediaItemProps, type ChannelInfoMemberItemProps, type ChannelInfoProps, type ChannelInfoTabsProps, ChannelItem, type ChannelItemProps, ChannelList, type ChannelListProps, type ChannelProps, ChannelTopicGroup, type ChatContextValue, ChatProvider, type ChatProviderProps, CreateChannelModal, type CreateChannelModalProps, type DateSeparatorProps, DefaultChannelActions, DefaultChannelInfoActions, DefaultChannelInfoCover, DefaultChannelInfoHeader, DefaultChannelInfoTabs, Dropdown, type DropdownProps, type EmojiButtonProps, type EmojiPickerProps, type ErmisCallConnectedAudioProps, type ErmisCallConnectedVideoProps, ErmisCallContext, type ErmisCallControlsBarProps, type ErmisCallErrorProps, ErmisCallProvider, type ErmisCallProviderProps, type ErmisCallRingingProps, ErmisCallUI, type ErmisCallUIProps, ErrorMessage, type FilePreviewItem, FilesPreview, type FilesPreviewProps, type ForwardChannelItemProps, ForwardMessageModal, type ForwardMessageModalProps, type JumpToLatestProps, type LatestReaction, type MediaTab, type MentionMember, type MentionPayload, MentionSuggestions, type MentionSuggestionsProps, MessageActionsBox, type MessageActionsBoxProps, MessageAttachment, type MessageBubbleProps, MessageInput, type MessageInputProps, MessageItem, type MessageItemProps, type MessageListProps, MessageQuickReactions, MessageReactions, type MessageReactionsProps, type MessageRendererProps, Modal, type ModalProps, Panel, type PinnedMessageItemProps, PinnedMessages, type PinnedMessagesProps, PollMessage, QuotedMessagePreview, type QuotedMessagePreviewProps, type ReactionUser, RegularMessage, ReplyPreview, type ReplyPreviewProps, type SendButtonProps, SignalMessage, StickerMessage, SystemMessage, SystemMessageItem, type SystemMessageItemProps, type Theme, TopicModal, TypingIndicator, type TypingIndicatorProps, type TypingUser, type UseChannelMessagesOptions, type UseChannelReturn, type UseLoadMessagesOptions, type UseLoadMessagesReturn, type UseMentionsOptions, type UseMentionsReturn, type UseScrollToMessageOptions, type UseScrollToMessageReturn, UserPicker, type UserPickerItemProps, type UserPickerProps, type UserPickerSelectedBoxProps, type UserPickerUser, VirtualMessageList, closeAllDropdowns, computeDefaultActions, dedupMessages, defaultMessageRenderers, formatDateLabel, formatTime, getDateKey, getMessageUserId, replaceMentionsForPreview, useBannedState, useBlockedState, useCallContext, useChannel, useChannelListUpdates, useChannelMessages, useChannelRowUpdates, useChatClient, useLoadMessages, useMentions, useMessageActions, usePendingState, useScrollToMessage, useTypingIndicator };
|
|
1745
|
+
export { ATTACHMENT_TYPES, type AddMemberButtonProps, type AddMemberModalProps, type AddMemberUserItemProps, type AttachButtonProps, type AttachmentItem, AttachmentList, type AttachmentProps, type AttachmentType, Avatar, type AvatarProps, CHANNEL_ROLES, type CallContextValue, Channel, type ChannelAction, type ChannelActionsProps, ChannelHeader, type ChannelHeaderData, type ChannelHeaderProps, ChannelInfo, type ChannelInfoActionsProps, type ChannelInfoCoverProps, type ChannelInfoEmptyStateProps, type ChannelInfoFileItemProps, type ChannelInfoHeaderProps, type ChannelInfoLinkItemProps, type ChannelInfoMediaItemProps, type ChannelInfoMemberItemProps, type ChannelInfoProps, type ChannelInfoTabsProps, ChannelItem, type ChannelItemProps, ChannelList, type ChannelListProps, type ChannelProps, type ChannelRole, ChannelTopicGroup, type ChatContextValue, ChatProvider, type ChatProviderProps, CreateChannelModal, type CreateChannelModalProps, type DateSeparatorProps, DefaultChannelActions, DefaultChannelInfoActions, DefaultChannelInfoCover, DefaultChannelInfoHeader, DefaultChannelInfoTabs, Dropdown, type DropdownProps, type EmojiButtonProps, type EmojiPickerProps, type ErmisCallConnectedAudioProps, type ErmisCallConnectedVideoProps, ErmisCallContext, type ErmisCallControlsBarProps, type ErmisCallErrorProps, ErmisCallProvider, type ErmisCallProviderProps, type ErmisCallRingingProps, ErmisCallUI, type ErmisCallUIProps, ErrorMessage, type FilePreviewItem, FilesPreview, type FilesPreviewProps, type ForwardChannelItemProps, ForwardMessageModal, type ForwardMessageModalProps, type JumpToLatestProps, type LatestReaction, MESSAGE_TYPES, MediaLightbox, type MediaLightboxItem, type MediaLightboxProps, type MediaTab, type MentionMember, type MentionPayload, MentionSuggestions, type MentionSuggestionsProps, MessageActionsBox, type MessageActionsBoxProps, MessageAttachment, type MessageBubbleProps, MessageInput, type MessageInputProps, MessageItem, type MessageItemProps, type MessageListProps, MessageQuickReactions, MessageReactions, type MessageReactionsProps, type MessageRendererProps, type MessageType, Modal, type ModalProps, type OnlineStatus, Panel, type PinnedMessageItemProps, PinnedMessages, type PinnedMessagesProps, PollMessage, QuotedMessagePreview, type QuotedMessagePreviewProps, type ReactionUser, RegularMessage, ReplyPreview, type ReplyPreviewProps, type SendButtonProps, SignalMessage, StickerMessage, SystemMessage, SystemMessageItem, type SystemMessageItemProps, type Theme, TopicModal, TypingIndicator, type TypingIndicatorProps, type TypingUser, type UseChannelMessagesOptions, type UseChannelReturn, type UseLoadMessagesOptions, type UseLoadMessagesReturn, type UseMentionsOptions, type UseMentionsReturn, type UseScrollToMessageOptions, type UseScrollToMessageReturn, UserPicker, type UserPickerItemProps, type UserPickerProps, type UserPickerSelectedBoxProps, type UserPickerUser, VirtualMessageList, canBanTargetMember, canDemoteTargetMember, canManageChannel, canPromoteTargetMember, canRemoveTargetMember, closeAllDropdowns, computeDefaultActions, dedupMessages, defaultMessageRenderers, formatDateLabel, formatTime, getDateKey, getMessageUserId, hasTopicsEnabled, isDirectChannel, isFriendChannel, isGeneralProxy, isGroupChannel, isImage, isImageAttachment, isLinkPreviewAttachment, isOwnerMember, isPendingMember, isPublicGroupChannel, isRegularMessage, isSignalMessage, isSkippedMember, isStickerMessage, isSystemMessage, isTopicChannel, isVideo, isVideoAttachment, isVoiceRecordingAttachment, replaceMentionsForPreview, supportsBlocking, useBannedState, useBlockedState, useCallContext, useChannel, useChannelListUpdates, useChannelMessages, useChannelRowUpdates, useChatClient, useLoadMessages, useMentions, useMessageActions, useOnlineStatus, useOnlineUsers, usePendingState, useScrollToMessage, useTypingIndicator };
|