@adatechnology/conversations-ui 0.1.0-rc.4 → 0.1.0-rc.40
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/ConversationSimulatorPanel--5fIzXWY.d.ts +804 -0
- package/dist/chunk-BJNRLLDO.js +2708 -0
- package/dist/chunk-DKPXKQGC.js +110 -0
- package/dist/{chunk-OGRRHQQW.js → chunk-WCBDXZ3X.js} +68 -4
- package/dist/flows/index.d.ts +422 -5
- package/dist/flows/index.js +2372 -678
- package/dist/index.d.ts +1171 -42
- package/dist/index.js +3755 -843
- package/dist/preview/index.d.ts +157 -42
- package/dist/preview/index.js +772 -191
- package/dist/styles.css +893 -0
- package/package.json +9 -8
- package/src/AudioPlayer.tsx +8 -0
- package/src/AudioRecorderButton.test.tsx +30 -0
- package/src/AudioRecorderButton.tsx +248 -0
- package/src/AudioTranscription.test.tsx +115 -0
- package/src/AudioTranscription.tsx +252 -0
- package/src/Avatar.tsx +14 -3
- package/src/ConversationContextPanel.tsx +218 -44
- package/src/ConversationDocumentsPanel.tsx +347 -24
- package/src/ConversationHeader.test.tsx +66 -0
- package/src/ConversationHeader.tsx +163 -45
- package/src/ConversationListItem.tsx +19 -2
- package/src/ConversationLocalesProvider.tsx +28 -0
- package/src/ConversationRow.tsx +31 -7
- package/src/DarkModeToggle.test.tsx +76 -0
- package/src/DarkModeToggle.tsx +92 -0
- package/src/DocumentsLibrary.tsx +382 -0
- package/src/EmojiPicker.tsx +70 -55
- package/src/FileIcon.test.ts +83 -0
- package/src/FileIcon.tsx +88 -11
- package/src/InteractiveMessage.test.tsx +41 -0
- package/src/InteractiveMessage.tsx +146 -0
- package/src/Lightbox.tsx +18 -3
- package/src/MediaRenderer.tsx +92 -16
- package/src/MessageBubble.test.tsx +41 -0
- package/src/MessageBubble.tsx +75 -6
- package/src/MessageComposer.test.tsx +35 -0
- package/src/MessageComposer.tsx +155 -19
- package/src/RichMessageComposer.test.tsx +113 -0
- package/src/RichMessageComposer.tsx +551 -0
- package/src/SimpleEmojiPicker.tsx +5 -3
- package/src/StatusTicks.tsx +1 -1
- package/src/Toast.tsx +4 -0
- package/src/Tooltip.test.ts +42 -0
- package/src/Tooltip.tsx +167 -0
- package/src/Wallpaper.test.tsx +21 -0
- package/src/Wallpaper.tsx +67 -7
- package/src/WhatsAppMessageEditor.tsx +34 -7
- package/src/WindowExpiredNotice.tsx +12 -4
- package/src/audioRecorderFormat.test.ts +67 -0
- package/src/buildOutput.test.ts +79 -0
- package/src/composer.constant.ts +33 -0
- package/src/conversationTranscript.test.ts +57 -0
- package/src/conversationTranscript.ts +29 -4
- package/src/conversationWindow.ts +7 -5
- package/src/documentTypeLabel.test.ts +57 -0
- package/src/documents/DocumentsWorkspace.tsx +550 -0
- package/src/documents/index.ts +8 -0
- package/src/documents/labels.ts +92 -0
- package/src/emojiCatalog.test.ts +35 -0
- package/src/emojiCatalog.ts +189 -0
- package/src/flows/FlowConnectionEdge.tsx +104 -0
- package/src/flows/FlowGroupHeader.tsx +12 -2
- package/src/flows/FlowLegend.tsx +125 -0
- package/src/flows/FlowMapCanvas.tsx +15 -12
- package/src/flows/FlowMapNode.tsx +4 -1
- package/src/flows/FlowNodeCard.tsx +219 -34
- package/src/flows/FlowNodePanel.tsx +153 -39
- package/src/flows/FlowPalette.tsx +106 -69
- package/src/flows/FlowPortalNode.tsx +1 -1
- package/src/flows/FlowWhatsAppPreview.tsx +14 -3
- package/src/flows/FlowsWorkspace.tsx +1193 -0
- package/src/flows/flowCanvasModel.test.ts +456 -0
- package/src/flows/flowCanvasModel.ts +378 -0
- package/src/flows/flowEditorOps.test.ts +276 -0
- package/src/flows/flowEditorOps.ts +202 -0
- package/src/flows/flowGraph.ts +78 -53
- package/src/flows/index.ts +51 -2
- package/src/flows/labels.ts +180 -0
- package/src/flows/workspaceContract.test.ts +95 -0
- package/src/hooks/useContainerWidth.ts +35 -0
- package/src/hooks/useConversationActions.ts +56 -0
- package/src/hooks/useConversationDocuments.ts +11 -7
- package/src/hooks/useConversationList.ts +15 -9
- package/src/hooks/useConversationMessages.ts +2 -2
- package/src/hooks/useConversationRealtime.ts +10 -8
- package/src/hooks/useScrollToLatestMessage.ts +127 -0
- package/src/hooks/useUrlFilterState.ts +107 -0
- package/src/icon.constant.ts +12 -0
- package/src/index.ts +129 -13
- package/src/lib/cn.test.ts +29 -0
- package/src/lib/composer-formatting.test.ts +78 -0
- package/src/lib/composer-formatting.ts +145 -0
- package/src/lib/createMediaUrlResolver.ts +33 -0
- package/src/lib/paginated.test.ts +33 -0
- package/src/lib/paginated.ts +26 -0
- package/src/lib/whatsapp-formatting.test.tsx +37 -0
- package/src/lib/whatsapp-formatting.tsx +28 -3
- package/src/listing/index.tsx +202 -0
- package/src/pagination.constant.ts +10 -0
- package/src/preview/ConversationPreview.tsx +225 -17
- package/src/preview/ConversationSimulatorClient.ts +143 -0
- package/src/preview/ConversationSimulatorPanel.test.tsx +55 -0
- package/src/preview/ConversationSimulatorPanel.tsx +131 -0
- package/src/preview/MediaTypesPreview.tsx +87 -0
- package/src/preview/conversationPreviewFailures.test.ts +64 -0
- package/src/preview/createMockConversationsApi.ts +175 -15
- package/src/preview/createPreviewBridgeClient.test.ts +92 -0
- package/src/preview/createPreviewBridgeClient.ts +124 -0
- package/src/preview/createPreviewMediaUploader.ts +82 -0
- package/src/preview/createPreviewWebhookClient.test.ts +96 -0
- package/src/preview/createPreviewWebhookClient.ts +127 -4
- package/src/preview/index.ts +51 -3
- package/src/preview/mediaTypeOf.test.ts +15 -0
- package/src/preview/mockDocumentsSearch.test.ts +57 -0
- package/src/preview/preview.test.ts +5 -3
- package/src/preview/previewFileSamples.test.ts +151 -0
- package/src/preview/previewFileSamples.ts +74 -0
- package/src/preview/previewFixtures.ts +288 -1
- package/src/preview/previewMediaSource.test.ts +62 -0
- package/src/preview/previewMediaSource.ts +91 -0
- package/src/preview/previewMediaUploader.test.ts +61 -0
- package/src/providers/ConversationsProvider.tsx +8 -6
- package/src/providers/types.ts +185 -10
- package/src/quickReply.test.ts +58 -0
- package/src/settings/MessagesWorkspace.tsx +571 -0
- package/src/settings/TopicsForm.tsx +2 -0
- package/src/settings/TranscriptionSettingsForm.test.tsx +81 -0
- package/src/settings/TranscriptionSettingsForm.tsx +190 -0
- package/src/settings/WelcomeFarewellForm.tsx +1 -0
- package/src/settings/WhatsAppCreateTemplateForm.tsx +4 -1
- package/src/settings/WhatsAppTemplateSettingsForm.tsx +5 -2
- package/src/settings/WhatsAppTemplatesSettings.test.tsx +61 -0
- package/src/settings/WhatsAppTemplatesSettings.tsx +22 -2
- package/src/styles.css +858 -0
- package/src/types.ts +64 -1
- package/src/useWaitingNotifications.ts +74 -29
- package/src/workspace/BulkTemplateModal.tsx +132 -0
- package/src/workspace/ConversationPane.tsx +432 -0
- package/src/workspace/ConversationsInboxList.tsx +194 -0
- package/src/workspace/ConversationsWorkspace.tsx +423 -0
- package/src/workspace/index.ts +17 -0
- package/src/workspace/labels.test.ts +17 -0
- package/src/workspace/labels.ts +85 -0
- package/src/workspace/useConversationsInbox.ts +332 -0
- package/dist/chunk-4R6Y43DQ.js +0 -726
- package/dist/chunk-NV2RZ5KT.js +0 -56
- package/dist/types-C0PtaO7S.d.ts +0 -207
package/dist/chunk-NV2RZ5KT.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// src/useDarkMode.ts
|
|
2
|
-
import { useState, useEffect, useCallback } from "react";
|
|
3
|
-
var STORAGE_KEY = "conversations-ui-dark-mode";
|
|
4
|
-
function getInitialDark() {
|
|
5
|
-
if (typeof window === "undefined") return false;
|
|
6
|
-
const stored = localStorage.getItem(STORAGE_KEY);
|
|
7
|
-
if (stored !== null) {
|
|
8
|
-
return stored === "true";
|
|
9
|
-
}
|
|
10
|
-
return window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
11
|
-
}
|
|
12
|
-
function useIsDarkTheme() {
|
|
13
|
-
const [isDark, setIsDark] = useState(
|
|
14
|
-
() => typeof document !== "undefined" && document.documentElement.classList.contains("dark")
|
|
15
|
-
);
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
const root = document.documentElement;
|
|
18
|
-
const observer = new MutationObserver(() => setIsDark(root.classList.contains("dark")));
|
|
19
|
-
observer.observe(root, { attributes: true, attributeFilter: ["class"] });
|
|
20
|
-
setIsDark(root.classList.contains("dark"));
|
|
21
|
-
return () => observer.disconnect();
|
|
22
|
-
}, []);
|
|
23
|
-
return isDark;
|
|
24
|
-
}
|
|
25
|
-
function useDarkMode() {
|
|
26
|
-
const [isDark, setIsDark] = useState(getInitialDark);
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
const root = document.documentElement;
|
|
29
|
-
if (isDark) {
|
|
30
|
-
root.classList.add("dark");
|
|
31
|
-
} else {
|
|
32
|
-
root.classList.remove("dark");
|
|
33
|
-
}
|
|
34
|
-
localStorage.setItem(STORAGE_KEY, String(isDark));
|
|
35
|
-
}, [isDark]);
|
|
36
|
-
useEffect(() => {
|
|
37
|
-
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
|
|
38
|
-
const handleChange = (event) => {
|
|
39
|
-
const stored = localStorage.getItem(STORAGE_KEY);
|
|
40
|
-
if (stored === null) {
|
|
41
|
-
setIsDark(event.matches);
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
mediaQuery.addEventListener("change", handleChange);
|
|
45
|
-
return () => mediaQuery.removeEventListener("change", handleChange);
|
|
46
|
-
}, []);
|
|
47
|
-
const toggle = useCallback(() => {
|
|
48
|
-
setIsDark((prev) => !prev);
|
|
49
|
-
}, []);
|
|
50
|
-
return { isDark, toggle };
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export {
|
|
54
|
-
useIsDarkTheme,
|
|
55
|
-
useDarkMode
|
|
56
|
-
};
|
package/dist/types-C0PtaO7S.d.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
interface ConversationsUIConfig {
|
|
2
|
-
apiBaseUrl: string;
|
|
3
|
-
theme?: ConversationsTheme;
|
|
4
|
-
features?: ConversationsFeatures;
|
|
5
|
-
}
|
|
6
|
-
interface ConversationsTheme {
|
|
7
|
-
primaryColor?: string;
|
|
8
|
-
backgroundColor?: string;
|
|
9
|
-
bubbleSent?: string;
|
|
10
|
-
bubbleReceived?: string;
|
|
11
|
-
textPrimary?: string;
|
|
12
|
-
textSecondary?: string;
|
|
13
|
-
}
|
|
14
|
-
interface ConversationsFeatures {
|
|
15
|
-
audio?: boolean;
|
|
16
|
-
documents?: boolean;
|
|
17
|
-
emoji?: boolean;
|
|
18
|
-
darkMode?: boolean;
|
|
19
|
-
}
|
|
20
|
-
interface MessagePayload {
|
|
21
|
-
id: string;
|
|
22
|
-
type: 'text' | 'image' | 'video' | 'audio' | 'document' | 'sticker' | 'template';
|
|
23
|
-
content?: string;
|
|
24
|
-
caption?: string;
|
|
25
|
-
mediaUrl?: string;
|
|
26
|
-
base64?: string;
|
|
27
|
-
uploadId?: string;
|
|
28
|
-
mediaId?: string;
|
|
29
|
-
mimeType?: string;
|
|
30
|
-
filename?: string;
|
|
31
|
-
sizeBytes?: number;
|
|
32
|
-
direction: 'inbound' | 'outbound';
|
|
33
|
-
sender: 'bot' | 'customer' | 'agent';
|
|
34
|
-
timestamp: string;
|
|
35
|
-
status?: 'sent' | 'delivered' | 'read' | 'failed';
|
|
36
|
-
readAt?: string;
|
|
37
|
-
agentName?: string | null;
|
|
38
|
-
templateName?: string;
|
|
39
|
-
/**
|
|
40
|
-
* Veredito de moderação vindo do backend — a UI só exibe, nunca calcula. Dicionário no browser
|
|
41
|
-
* seria peso morto e daria veredito diferente por versão de cliente.
|
|
42
|
-
*
|
|
43
|
-
* `null`/ausente = não avaliado (moderação desligada, ou mensagem anterior ao recurso), que é
|
|
44
|
-
* diferente de avaliado e limpo.
|
|
45
|
-
*/
|
|
46
|
-
moderation?: {
|
|
47
|
-
isOffensive: boolean;
|
|
48
|
-
terms: string[];
|
|
49
|
-
} | null;
|
|
50
|
-
isFirstInGroup?: boolean;
|
|
51
|
-
isLastInGroup?: boolean;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Canal de origem da conversa e o que cada um permite.
|
|
56
|
-
*
|
|
57
|
-
* Existe porque as regras que a inbox precisa respeitar não são do WhatsApp, são **de cada canal**:
|
|
58
|
-
* a janela de sessão, o jeito de reabrir a conversa e o formato do identificador do contato mudam
|
|
59
|
-
* entre WhatsApp, Messenger, Instagram e chat de site. Tratar a regra do WhatsApp como universal
|
|
60
|
-
* faria a UI bloquear o composer num chat de site, onde janela nenhuma existe.
|
|
61
|
-
*
|
|
62
|
-
* `whatsapp` é o padrão em todo lugar: instalações que ainda não informam canal continuam
|
|
63
|
-
* funcionando exatamente como antes.
|
|
64
|
-
*/
|
|
65
|
-
declare const CONVERSATION_CHANNEL: {
|
|
66
|
-
readonly WHATSAPP: "whatsapp";
|
|
67
|
-
readonly MESSENGER: "messenger";
|
|
68
|
-
readonly INSTAGRAM: "instagram";
|
|
69
|
-
readonly WEBCHAT: "webchat";
|
|
70
|
-
};
|
|
71
|
-
type ConversationChannel = (typeof CONVERSATION_CHANNEL)[keyof typeof CONVERSATION_CHANNEL];
|
|
72
|
-
declare const DEFAULT_CONVERSATION_CHANNEL: ConversationChannel;
|
|
73
|
-
/** Como o canal reabre uma conversa fora da janela de sessão. */
|
|
74
|
-
declare const REOPEN_MECHANISM: {
|
|
75
|
-
readonly TEMPLATE: "template";
|
|
76
|
-
readonly TAG: "tag";
|
|
77
|
-
readonly NONE: "none";
|
|
78
|
-
};
|
|
79
|
-
type ReopenMechanism = (typeof REOPEN_MECHANISM)[keyof typeof REOPEN_MECHANISM];
|
|
80
|
-
/** Natureza do identificador do contato — decide como exibi-lo. */
|
|
81
|
-
declare const HANDLE_KIND: {
|
|
82
|
-
readonly PHONE: "phone";
|
|
83
|
-
readonly USERNAME: "username";
|
|
84
|
-
readonly SESSION: "session";
|
|
85
|
-
};
|
|
86
|
-
type HandleKind = (typeof HANDLE_KIND)[keyof typeof HANDLE_KIND];
|
|
87
|
-
type ChannelCapabilities = {
|
|
88
|
-
readonly label: string;
|
|
89
|
-
readonly icon: string;
|
|
90
|
-
readonly hasSessionWindow: boolean;
|
|
91
|
-
readonly windowHours: number;
|
|
92
|
-
readonly reopenMechanism: ReopenMechanism;
|
|
93
|
-
readonly handleKind: HandleKind;
|
|
94
|
-
};
|
|
95
|
-
declare const CHANNEL_CAPABILITIES: Readonly<Record<ConversationChannel, ChannelCapabilities>>;
|
|
96
|
-
declare function capabilitiesOf(channel: ConversationChannel | undefined): ChannelCapabilities;
|
|
97
|
-
declare const CHANNEL_FILTER_ALL = "all";
|
|
98
|
-
type ChannelFilter = ConversationChannel | typeof CHANNEL_FILTER_ALL;
|
|
99
|
-
type ChannelFilterOption = {
|
|
100
|
-
readonly value: ChannelFilter;
|
|
101
|
-
readonly label: string;
|
|
102
|
-
};
|
|
103
|
-
/**
|
|
104
|
-
* Opções derivadas do que existe na lista, não do catálogo inteiro: oferecer Instagram numa conta
|
|
105
|
-
* que só tem WhatsApp promete um recorte que nunca traz resultado.
|
|
106
|
-
*
|
|
107
|
-
* Devolve vazio com menos de dois canais — um filtro de opção única não filtra nada, e a barra só
|
|
108
|
-
* ocuparia espaço. O host usa isso para esconder a seção.
|
|
109
|
-
*/
|
|
110
|
-
declare function channelFiltersFor(conversations: readonly {
|
|
111
|
-
readonly channel?: ConversationChannel | undefined;
|
|
112
|
-
}[]): ChannelFilterOption[];
|
|
113
|
-
type FormatContactHandleParams = {
|
|
114
|
-
readonly handle: string;
|
|
115
|
-
readonly channel?: ConversationChannel | undefined;
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* Exibição do identificador conforme a natureza dele. Formatar tudo como telefone — o que a UI
|
|
119
|
-
* fazia — transforma um `@perfil` do Instagram em dígitos sem sentido.
|
|
120
|
-
*/
|
|
121
|
-
declare function formatContactHandle(params: FormatContactHandleParams): string;
|
|
122
|
-
/** Bandeira só faz sentido quando o identificador é telefone. */
|
|
123
|
-
declare function contactFlag(params: FormatContactHandleParams): string;
|
|
124
|
-
|
|
125
|
-
interface ConversationsApi {
|
|
126
|
-
fetchMessages(conversationId: string, params?: {
|
|
127
|
-
limit?: number;
|
|
128
|
-
before?: string;
|
|
129
|
-
}): Promise<MessagePayload[]>;
|
|
130
|
-
fetchConversations(params?: {
|
|
131
|
-
page?: number;
|
|
132
|
-
limit?: number;
|
|
133
|
-
waitingHuman?: boolean;
|
|
134
|
-
search?: string;
|
|
135
|
-
}): Promise<ConversationSummary[]>;
|
|
136
|
-
sendMessage(conversationId: string, text: string): Promise<MessagePayload>;
|
|
137
|
-
sendMedia(conversationId: string, data: {
|
|
138
|
-
base64: string;
|
|
139
|
-
mimeType: string;
|
|
140
|
-
filename: string;
|
|
141
|
-
caption?: string;
|
|
142
|
-
}): Promise<MessagePayload>;
|
|
143
|
-
sendTemplate(conversationId: string, data: {
|
|
144
|
-
templateName: string;
|
|
145
|
-
languageCode?: string;
|
|
146
|
-
bodyParams?: string[];
|
|
147
|
-
}): Promise<void>;
|
|
148
|
-
markRead(conversationId: string): Promise<void>;
|
|
149
|
-
getContext(conversationId: string): Promise<Record<string, unknown>>;
|
|
150
|
-
getDocuments(conversationId: string, params?: {
|
|
151
|
-
search?: string;
|
|
152
|
-
page?: number;
|
|
153
|
-
}): Promise<ConversationDocument[]>;
|
|
154
|
-
getDocumentUrl(uploadId: string): Promise<string>;
|
|
155
|
-
getMediaProxyUrl(mediaId: string): Promise<{
|
|
156
|
-
mimeType: string;
|
|
157
|
-
data: string;
|
|
158
|
-
}>;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Superfície mínima de stream que o pacote consome — exatamente o que `useConversationRealtime`
|
|
162
|
-
* usa: assinar 'message', desassinar e fechar. Deliberadamente estrutural em vez de
|
|
163
|
-
* `EventSource`: sem servidor HTTP não existe `EventSource`, e é isso que impediria alimentar a
|
|
164
|
-
* inbox com dados mockados em desenvolvimento. Um `EventSource` nativo satisfaz este tipo, então
|
|
165
|
-
* quem já implementa `SSEProvider` continua válido sem mudança.
|
|
166
|
-
*/
|
|
167
|
-
interface ConversationEventSource {
|
|
168
|
-
addEventListener(type: string, listener: (event: MessageEvent) => void): void;
|
|
169
|
-
removeEventListener(type: string, listener: (event: MessageEvent) => void): void;
|
|
170
|
-
close(): void;
|
|
171
|
-
}
|
|
172
|
-
interface SSEProvider {
|
|
173
|
-
connectConversationStream(conversationId: string): ConversationEventSource;
|
|
174
|
-
connectGlobalStream(): ConversationEventSource;
|
|
175
|
-
}
|
|
176
|
-
interface ConversationSummary {
|
|
177
|
-
id: string;
|
|
178
|
-
/**
|
|
179
|
-
* @deprecated Use `contactId` com `channel`. Mantido obrigatório para não quebrar quem já
|
|
180
|
-
* consome; some quando o segundo canal entrar em produção.
|
|
181
|
-
*/
|
|
182
|
-
whatsappNumber: string;
|
|
183
|
-
/** Identificador neutro do contato. Ausente = usa `whatsappNumber`. */
|
|
184
|
-
contactId?: string;
|
|
185
|
-
/** Ausente = `whatsapp`, o comportamento de antes desta mudança. */
|
|
186
|
-
channel?: ConversationChannel;
|
|
187
|
-
clientName?: string;
|
|
188
|
-
lastContent?: string;
|
|
189
|
-
lastDirection?: 'inbound' | 'outbound';
|
|
190
|
-
lastAt: string;
|
|
191
|
-
lastInboundAt: string | null;
|
|
192
|
-
mode: 'bot' | 'human';
|
|
193
|
-
assignedUserId: string | null;
|
|
194
|
-
waitingHuman: boolean;
|
|
195
|
-
unread: number;
|
|
196
|
-
currentState: string;
|
|
197
|
-
}
|
|
198
|
-
interface ConversationDocument {
|
|
199
|
-
id: string;
|
|
200
|
-
filename: string;
|
|
201
|
-
mimeType: string;
|
|
202
|
-
sizeBytes: number;
|
|
203
|
-
source: string;
|
|
204
|
-
linkedAt: string;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
export { CHANNEL_CAPABILITIES as C, DEFAULT_CONVERSATION_CHANNEL as D, type FormatContactHandleParams as F, HANDLE_KIND as H, type MessagePayload as M, REOPEN_MECHANISM as R, type SSEProvider as S, CHANNEL_FILTER_ALL as a, CONVERSATION_CHANNEL as b, type ChannelCapabilities as c, type ChannelFilter as d, type ChannelFilterOption as e, type ConversationChannel as f, type ConversationDocument as g, type ConversationEventSource as h, type ConversationSummary as i, type ConversationsApi as j, type ConversationsFeatures as k, type ConversationsTheme as l, type ConversationsUIConfig as m, type HandleKind as n, type ReopenMechanism as o, capabilitiesOf as p, channelFiltersFor as q, contactFlag as r, formatContactHandle as s };
|