@natoe/colab 0.1.26 → 0.1.28

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.d.mts CHANGED
@@ -118,10 +118,28 @@ interface PatientData {
118
118
  labName?: string;
119
119
  bodyParts?: string[];
120
120
  }
121
+ /**
122
+ * Which thread on a case this is.
123
+ *
124
+ * - `case` — the shared discussion: lab, radiologist, physician, admin
125
+ * - `help_lab` — imaging center <-> Natoe support, private to that side
126
+ * - `help_radiologist` — assigned radiologist <-> Natoe support, private to that side
127
+ *
128
+ * The two help kinds are mutually invisible. That isolation is enforced by the
129
+ * backend's participant seeding, never by anything in this package — treat this
130
+ * as a label for rendering and for addressing the right thread, not as a
131
+ * security boundary.
132
+ *
133
+ * Optional everywhere, defaulting to `case`, so callers written before help
134
+ * threads existed keep their exact previous behaviour.
135
+ */
136
+ type ConversationKind = 'case' | 'help_lab' | 'help_radiologist';
137
+ declare function isHelpKind(kind?: ConversationKind | string): boolean;
121
138
  interface Conversation {
122
139
  id: string;
123
140
  orderId: string;
124
141
  name: string;
142
+ kind?: ConversationKind;
125
143
  picture?: string;
126
144
  participants: Participant[];
127
145
  lastMessage?: Message;
@@ -141,6 +159,9 @@ interface ConversationListItem$1 {
141
159
  id: string;
142
160
  orderId: string;
143
161
  name: string;
162
+ /** Lets the inbox label help threads distinctly from the case thread on the
163
+ * same patient — both appear as separate rows. */
164
+ kind?: ConversationKind;
144
165
  picture?: string;
145
166
  unreadCount: number;
146
167
  lastMessage?: Message;
@@ -154,6 +175,7 @@ interface ConversationListItem$1 {
154
175
  interface ConversationPreview {
155
176
  conversationId: string;
156
177
  orderId: string;
178
+ kind?: ConversationKind;
157
179
  messageCount: number;
158
180
  unreadCount: number;
159
181
  /** Last N messages (typically 5) for inline display */
@@ -163,7 +185,9 @@ interface ConversationPreview {
163
185
  }
164
186
  /** Batch preview response shape from the backend */
165
187
  interface PreviewBatchResponse {
166
- /** Key is orderId, value is preview or null if no conversation exists */
188
+ /** Key is orderId, value is preview or null if no conversation exists.
189
+ * Scoped to a single `kind` per request — the backend filters server-side,
190
+ * so this map never mixes a case thread and a help thread for one order. */
167
191
  previews: Record<string, ConversationPreview | null>;
168
192
  }
169
193
  /** Response from createConversationWithMessage (first-message flow) */
@@ -267,6 +291,8 @@ interface CollabPanelProps {
267
291
  patientData: PatientData;
268
292
  /** Participant user IDs — only used when creating a brand-new conversation */
269
293
  participantIds?: string[];
294
+ /** Which thread on the case. Defaults to the shared `case` thread. */
295
+ kind?: ConversationKind;
270
296
  /** Show "seen by" indicator under own messages (default true) */
271
297
  showSeenBy?: boolean;
272
298
  /**
@@ -317,7 +343,7 @@ interface CollabPanelProps {
317
343
  * Full collaboration panel: patient header + pinned bar + message thread + input.
318
344
  * Supports reply, pin/unpin, and (optionally) seen-by indicators.
319
345
  */
320
- declare function CollabPanel({ orderId, patientData, participantIds, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
346
+ declare function CollabPanel({ orderId, patientData, participantIds, kind, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
321
347
 
322
348
  interface CollabPopupProps {
323
349
  /** Order ID for this conversation */
@@ -326,6 +352,8 @@ interface CollabPopupProps {
326
352
  patientData: PatientData;
327
353
  /** Participant user IDs — only used when creating a brand-new conversation */
328
354
  participantIds?: string[];
355
+ /** Which thread on the case. Defaults to the shared `case` thread. */
356
+ kind?: ConversationKind;
329
357
  /** Whether the popup is open */
330
358
  isOpen: boolean;
331
359
  /** Close the popup */
@@ -355,7 +383,7 @@ interface CollabPopupProps {
355
383
  * Draggable floating chat popup — drop-in replacement for DraggableChatPopup.
356
384
  * Renders a CollabPanel inside a movable, resizable container.
357
385
  */
358
- declare function CollabPopup({ orderId, patientData, participantIds, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
386
+ declare function CollabPopup({ orderId, patientData, participantIds, kind, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
359
387
 
360
388
  type ColabInlineMode = 'light' | 'dark';
361
389
  interface CollabInlineProps {
@@ -363,6 +391,8 @@ interface CollabInlineProps {
363
391
  patientData: PatientData;
364
392
  /** User IDs to invite when the first message creates the conversation */
365
393
  participantIds?: string[];
394
+ /** Which thread on the case. Defaults to the shared `case` thread. */
395
+ kind?: ConversationKind;
366
396
  /** Called when user clicks the expand button — host opens the floating popup */
367
397
  onExpand?: () => void;
368
398
  /** Max inline messages to show (default 1 — just the latest) */
@@ -390,7 +420,7 @@ interface CollabInlineProps {
390
420
  * Supports text and voice messages. File attachments and full chat features
391
421
  * stay in the floating popup / inbox.
392
422
  */
393
- declare function CollabInline({ orderId, patientData, participantIds, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
423
+ declare function CollabInline({ orderId, patientData, participantIds, kind, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
394
424
 
395
425
  interface CollabInboxProps {
396
426
  /** Optional: preselect a specific conversation (by conversation ID) */
@@ -552,6 +582,8 @@ interface FetchMessagesOptions {
552
582
  interface CreateConversationOptions {
553
583
  name: string;
554
584
  participantIds?: string[];
585
+ /** Which thread to create. Defaults to the shared case thread. */
586
+ kind?: ConversationKind;
555
587
  }
556
588
  interface CollabContextValue {
557
589
  socket: CollabSocket;
@@ -573,9 +605,9 @@ interface CollabContextValue {
573
605
  */
574
606
  unreadCountsByOrder: Record<string, number>;
575
607
  /** Batched preview lookup — coalesces calls within a microtask */
576
- requestPreview: (orderId: string) => Promise<ConversationPreview | null>;
608
+ requestPreview: (orderId: string, kind?: ConversationKind) => Promise<ConversationPreview | null>;
577
609
  /** Invalidate a cached preview (e.g. when a new message arrives) */
578
- invalidatePreview: (orderId: string) => void;
610
+ invalidatePreview: (orderId: string, kind?: ConversationKind) => void;
579
611
  /** Fetch paginated message history */
580
612
  fetchMessages: (conversationId: string, options?: FetchMessagesOptions) => Promise<Message[]>;
581
613
  /** Atomic create-or-send — creates conversation if missing, then stores the first message */
@@ -609,6 +641,15 @@ interface UseConversationOptions {
609
641
  participantIds?: string[];
610
642
  /** Load full history on mount (default true) */
611
643
  loadHistory?: boolean;
644
+ /**
645
+ * Which thread on the case to open. Defaults to the shared `case` thread,
646
+ * so every existing caller is unaffected.
647
+ *
648
+ * For a help kind the backend seats only the requesting side plus Natoe
649
+ * support, and `participantIds` is ignored server-side — a help thread
650
+ * must never be widened by the client.
651
+ */
652
+ kind?: ConversationKind;
612
653
  }
613
654
  interface UseConversationReturn {
614
655
  conversation: Conversation | null;
@@ -643,7 +684,7 @@ interface UseConversationReturn {
643
684
  * when the user sends the first message. If a conversation already exists for
644
685
  * the given orderId, it's loaded and joined automatically.
645
686
  */
646
- declare function useConversation({ orderId, patientData, participantIds, loadHistory, }: UseConversationOptions): UseConversationReturn;
687
+ declare function useConversation({ orderId, patientData, participantIds, loadHistory, kind, }: UseConversationOptions): UseConversationReturn;
647
688
 
648
689
  interface UseConversationListOptions {
649
690
  /**
@@ -677,6 +718,8 @@ interface UseInlineCollabOptions {
677
718
  patientData: PatientData;
678
719
  /** Participant IDs passed to the backend only when creating a new conversation */
679
720
  participantIds?: string[];
721
+ /** Which thread on the case. Defaults to the shared `case` thread. */
722
+ kind?: ConversationKind;
680
723
  /** Max messages to keep in inline state (default 5) */
681
724
  messageLimit?: number;
682
725
  }
@@ -704,7 +747,7 @@ interface UseInlineCollabReturn {
704
747
  * - First sendMessage creates conversation atomically + starts real-time flow
705
748
  * - Subsequent sends go through the socket
706
749
  */
707
- declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, }: UseInlineCollabOptions): UseInlineCollabReturn;
750
+ declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, kind, }: UseInlineCollabOptions): UseInlineCollabReturn;
708
751
 
709
752
  interface UseMessagesOptions {
710
753
  conversationId: string | null;
@@ -1187,4 +1230,4 @@ declare const SUPPORTED_IMAGE_TYPES: string[];
1187
1230
  /** Max file size in bytes (20MB) */
1188
1231
  declare const MAX_FILE_SIZE: number;
1189
1232
 
1190
- export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
1233
+ export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, type ConversationKind, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, isHelpKind, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
package/dist/index.d.ts CHANGED
@@ -118,10 +118,28 @@ interface PatientData {
118
118
  labName?: string;
119
119
  bodyParts?: string[];
120
120
  }
121
+ /**
122
+ * Which thread on a case this is.
123
+ *
124
+ * - `case` — the shared discussion: lab, radiologist, physician, admin
125
+ * - `help_lab` — imaging center <-> Natoe support, private to that side
126
+ * - `help_radiologist` — assigned radiologist <-> Natoe support, private to that side
127
+ *
128
+ * The two help kinds are mutually invisible. That isolation is enforced by the
129
+ * backend's participant seeding, never by anything in this package — treat this
130
+ * as a label for rendering and for addressing the right thread, not as a
131
+ * security boundary.
132
+ *
133
+ * Optional everywhere, defaulting to `case`, so callers written before help
134
+ * threads existed keep their exact previous behaviour.
135
+ */
136
+ type ConversationKind = 'case' | 'help_lab' | 'help_radiologist';
137
+ declare function isHelpKind(kind?: ConversationKind | string): boolean;
121
138
  interface Conversation {
122
139
  id: string;
123
140
  orderId: string;
124
141
  name: string;
142
+ kind?: ConversationKind;
125
143
  picture?: string;
126
144
  participants: Participant[];
127
145
  lastMessage?: Message;
@@ -141,6 +159,9 @@ interface ConversationListItem$1 {
141
159
  id: string;
142
160
  orderId: string;
143
161
  name: string;
162
+ /** Lets the inbox label help threads distinctly from the case thread on the
163
+ * same patient — both appear as separate rows. */
164
+ kind?: ConversationKind;
144
165
  picture?: string;
145
166
  unreadCount: number;
146
167
  lastMessage?: Message;
@@ -154,6 +175,7 @@ interface ConversationListItem$1 {
154
175
  interface ConversationPreview {
155
176
  conversationId: string;
156
177
  orderId: string;
178
+ kind?: ConversationKind;
157
179
  messageCount: number;
158
180
  unreadCount: number;
159
181
  /** Last N messages (typically 5) for inline display */
@@ -163,7 +185,9 @@ interface ConversationPreview {
163
185
  }
164
186
  /** Batch preview response shape from the backend */
165
187
  interface PreviewBatchResponse {
166
- /** Key is orderId, value is preview or null if no conversation exists */
188
+ /** Key is orderId, value is preview or null if no conversation exists.
189
+ * Scoped to a single `kind` per request — the backend filters server-side,
190
+ * so this map never mixes a case thread and a help thread for one order. */
167
191
  previews: Record<string, ConversationPreview | null>;
168
192
  }
169
193
  /** Response from createConversationWithMessage (first-message flow) */
@@ -267,6 +291,8 @@ interface CollabPanelProps {
267
291
  patientData: PatientData;
268
292
  /** Participant user IDs — only used when creating a brand-new conversation */
269
293
  participantIds?: string[];
294
+ /** Which thread on the case. Defaults to the shared `case` thread. */
295
+ kind?: ConversationKind;
270
296
  /** Show "seen by" indicator under own messages (default true) */
271
297
  showSeenBy?: boolean;
272
298
  /**
@@ -317,7 +343,7 @@ interface CollabPanelProps {
317
343
  * Full collaboration panel: patient header + pinned bar + message thread + input.
318
344
  * Supports reply, pin/unpin, and (optionally) seen-by indicators.
319
345
  */
320
- declare function CollabPanel({ orderId, patientData, participantIds, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
346
+ declare function CollabPanel({ orderId, patientData, participantIds, kind, showSeenBy, onBack, hidePatientName, hideOpenCase, onConversationChange, themeMode, showSettings: controlledShowSettings, onSettingsChange, className, style, }: CollabPanelProps): react_jsx_runtime.JSX.Element;
321
347
 
322
348
  interface CollabPopupProps {
323
349
  /** Order ID for this conversation */
@@ -326,6 +352,8 @@ interface CollabPopupProps {
326
352
  patientData: PatientData;
327
353
  /** Participant user IDs — only used when creating a brand-new conversation */
328
354
  participantIds?: string[];
355
+ /** Which thread on the case. Defaults to the shared `case` thread. */
356
+ kind?: ConversationKind;
329
357
  /** Whether the popup is open */
330
358
  isOpen: boolean;
331
359
  /** Close the popup */
@@ -355,7 +383,7 @@ interface CollabPopupProps {
355
383
  * Draggable floating chat popup — drop-in replacement for DraggableChatPopup.
356
384
  * Renders a CollabPanel inside a movable, resizable container.
357
385
  */
358
- declare function CollabPopup({ orderId, patientData, participantIds, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
386
+ declare function CollabPopup({ orderId, patientData, participantIds, kind, isOpen, onClose, onBack, onMinimize, initialPosition, width, height, className, }: CollabPopupProps): react_jsx_runtime.JSX.Element | null;
359
387
 
360
388
  type ColabInlineMode = 'light' | 'dark';
361
389
  interface CollabInlineProps {
@@ -363,6 +391,8 @@ interface CollabInlineProps {
363
391
  patientData: PatientData;
364
392
  /** User IDs to invite when the first message creates the conversation */
365
393
  participantIds?: string[];
394
+ /** Which thread on the case. Defaults to the shared `case` thread. */
395
+ kind?: ConversationKind;
366
396
  /** Called when user clicks the expand button — host opens the floating popup */
367
397
  onExpand?: () => void;
368
398
  /** Max inline messages to show (default 1 — just the latest) */
@@ -390,7 +420,7 @@ interface CollabInlineProps {
390
420
  * Supports text and voice messages. File attachments and full chat features
391
421
  * stay in the floating popup / inbox.
392
422
  */
393
- declare function CollabInline({ orderId, patientData, participantIds, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
423
+ declare function CollabInline({ orderId, patientData, participantIds, kind, onExpand, messageLimit, placeholder, mode, className, style, }: CollabInlineProps): react_jsx_runtime.JSX.Element;
394
424
 
395
425
  interface CollabInboxProps {
396
426
  /** Optional: preselect a specific conversation (by conversation ID) */
@@ -552,6 +582,8 @@ interface FetchMessagesOptions {
552
582
  interface CreateConversationOptions {
553
583
  name: string;
554
584
  participantIds?: string[];
585
+ /** Which thread to create. Defaults to the shared case thread. */
586
+ kind?: ConversationKind;
555
587
  }
556
588
  interface CollabContextValue {
557
589
  socket: CollabSocket;
@@ -573,9 +605,9 @@ interface CollabContextValue {
573
605
  */
574
606
  unreadCountsByOrder: Record<string, number>;
575
607
  /** Batched preview lookup — coalesces calls within a microtask */
576
- requestPreview: (orderId: string) => Promise<ConversationPreview | null>;
608
+ requestPreview: (orderId: string, kind?: ConversationKind) => Promise<ConversationPreview | null>;
577
609
  /** Invalidate a cached preview (e.g. when a new message arrives) */
578
- invalidatePreview: (orderId: string) => void;
610
+ invalidatePreview: (orderId: string, kind?: ConversationKind) => void;
579
611
  /** Fetch paginated message history */
580
612
  fetchMessages: (conversationId: string, options?: FetchMessagesOptions) => Promise<Message[]>;
581
613
  /** Atomic create-or-send — creates conversation if missing, then stores the first message */
@@ -609,6 +641,15 @@ interface UseConversationOptions {
609
641
  participantIds?: string[];
610
642
  /** Load full history on mount (default true) */
611
643
  loadHistory?: boolean;
644
+ /**
645
+ * Which thread on the case to open. Defaults to the shared `case` thread,
646
+ * so every existing caller is unaffected.
647
+ *
648
+ * For a help kind the backend seats only the requesting side plus Natoe
649
+ * support, and `participantIds` is ignored server-side — a help thread
650
+ * must never be widened by the client.
651
+ */
652
+ kind?: ConversationKind;
612
653
  }
613
654
  interface UseConversationReturn {
614
655
  conversation: Conversation | null;
@@ -643,7 +684,7 @@ interface UseConversationReturn {
643
684
  * when the user sends the first message. If a conversation already exists for
644
685
  * the given orderId, it's loaded and joined automatically.
645
686
  */
646
- declare function useConversation({ orderId, patientData, participantIds, loadHistory, }: UseConversationOptions): UseConversationReturn;
687
+ declare function useConversation({ orderId, patientData, participantIds, loadHistory, kind, }: UseConversationOptions): UseConversationReturn;
647
688
 
648
689
  interface UseConversationListOptions {
649
690
  /**
@@ -677,6 +718,8 @@ interface UseInlineCollabOptions {
677
718
  patientData: PatientData;
678
719
  /** Participant IDs passed to the backend only when creating a new conversation */
679
720
  participantIds?: string[];
721
+ /** Which thread on the case. Defaults to the shared `case` thread. */
722
+ kind?: ConversationKind;
680
723
  /** Max messages to keep in inline state (default 5) */
681
724
  messageLimit?: number;
682
725
  }
@@ -704,7 +747,7 @@ interface UseInlineCollabReturn {
704
747
  * - First sendMessage creates conversation atomically + starts real-time flow
705
748
  * - Subsequent sends go through the socket
706
749
  */
707
- declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, }: UseInlineCollabOptions): UseInlineCollabReturn;
750
+ declare function useInlineCollab({ orderId, patientData, participantIds, messageLimit, kind, }: UseInlineCollabOptions): UseInlineCollabReturn;
708
751
 
709
752
  interface UseMessagesOptions {
710
753
  conversationId: string | null;
@@ -1187,4 +1230,4 @@ declare const SUPPORTED_IMAGE_TYPES: string[];
1187
1230
  /** Max file size in bytes (20MB) */
1188
1231
  declare const MAX_FILE_SIZE: number;
1189
1232
 
1190
- export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };
1233
+ export { AUDIO_MIME_TYPE, type ChannelEvent, ChannelSettings, type ChannelUpdatePayload, type CollabConfig, type CollabError, CollabInbox, CollabInline, CollabPanel, CollabPopup, CollabProvider, CollabSocket, type Conversation, type ConversationKind, ConversationList, ConversationListItem, type ConversationListItem$1 as ConversationListItemData, type ConversationPreview, type CreateConversationResponse, DEEP_LINK_PREFIX, EVENTS, type InviteUserPayload, MAX_FILE_SIZE, MAX_PINNED_MESSAGES, MESSAGES_PAGE_SIZE, MESSAGE_TYPES, type Message, MessageActionsMenu, MessageBubble, MessageInput, MessageList, type MessageListHandle, type MessageSnapshot, type MessageType, type Participant, ParticipantsList, type PatientData, PatientHeader, PinnedMessagesBar, type PreviewBatchResponse, ReplyPreview, ReplyQuoteBlock, SUPPORTED_IMAGE_TYPES, SeenByIndicator, type SendMessagePayload, THEME_DEFAULTS, THEME_VAR, TYPING_DEBOUNCE_MS, type Theme, type TypingEvent, type UserRole, applyThemeOverrides, isHelpKind, useAudioRecorder, useChannelSettings, useCollab, useConversation, useConversationList, useDeepLinks, useInlineCollab, useMessages, usePinnedMessages, useUnreadCount };