@adatechnology/conversations-ui 0.1.0-rc.22 → 0.1.0-rc.24
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.ts +267 -3
- package/dist/index.js +930 -0
- package/dist/styles.css +512 -0
- package/package.json +1 -1
- package/src/index.ts +15 -0
- package/src/preview/createPreviewWebhookClient.test.ts +11 -4
- package/src/styles.css +495 -0
- package/src/workspace/BulkTemplateModal.tsx +130 -0
- package/src/workspace/ConversationPane.tsx +402 -0
- package/src/workspace/ConversationsInboxList.tsx +185 -0
- package/src/workspace/ConversationsWorkspace.tsx +338 -0
- package/src/workspace/index.ts +12 -0
- package/src/workspace/labels.test.ts +17 -0
- package/src/workspace/labels.ts +85 -0
- package/src/workspace/useConversationsInbox.ts +329 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import react__default, { ReactNode, CSSProperties, UIEvent, FormEvent, RefObject } from 'react';
|
|
3
|
-
import { G as MessagePayload, N as ResolveMediaUrl, z as InteractiveSelection, J as MessageTranscription, x as InteractivePayload, r as ConversationsFeatures, o as ConversationSummary, j as ConversationChannel, L as ListConversationsParams, q as ConversationsApi, S as SSEProvider, T as TranscriptionMode, B as ListDocumentsParams, k as ConversationDocument, p as ConversationTemplate } from './types-C6A_9edv.js';
|
|
4
|
-
export { A as AudioRecorderButton, a as AudioRecorderButtonLabels, b as AudioRecorderButtonProps, C as CHANNEL_CAPABILITIES, c as CHANNEL_FILTER_ALL, d as CONVERSATION_CHANNEL, e as ChannelCapabilities,
|
|
3
|
+
import { G as MessagePayload, N as ResolveMediaUrl, z as InteractiveSelection, J as MessageTranscription, x as InteractivePayload, r as ConversationsFeatures, o as ConversationSummary, j as ConversationChannel, L as ListConversationsParams, q as ConversationsApi, S as SSEProvider, T as TranscriptionMode, B as ListDocumentsParams, k as ConversationDocument, p as ConversationTemplate, f as ChannelFilter, g as ChannelFilterOption } from './types-C6A_9edv.js';
|
|
4
|
+
export { A as AudioRecorderButton, a as AudioRecorderButtonLabels, b as AudioRecorderButtonProps, C as CHANNEL_CAPABILITIES, c as CHANNEL_FILTER_ALL, d as CONVERSATION_CHANNEL, e as ChannelCapabilities, h as CompanyDocument, i as CompanyDocumentPage, l as ConversationDocumentPage, m as ConversationEventSource, n as ConversationPage, s as ConversationsTheme, t as ConversationsUIConfig, D as DEFAULT_AUDIO_RECORDER_BUTTON_LABELS, u as DEFAULT_CONVERSATION_CHANNEL, v as DEFAULT_MAX_RECORDING_MILLISECONDS, F as FormatContactHandleParams, H as HANDLE_KIND, w as HandleKind, I as InteractiveOption, y as InteractiveSection, M as MediaRenderer, E as MediaRendererProps, R as REOPEN_MECHANISM, K as ReopenMechanism, O as TranscriptionStatus, P as capabilitiesOf, Q as channelFiltersFor, U as contactFlag, V as formatContactHandle } from './types-C6A_9edv.js';
|
|
5
5
|
|
|
6
6
|
interface MessageBubbleProps {
|
|
7
7
|
message: MessagePayload;
|
|
@@ -1265,4 +1265,268 @@ interface AsyncResourceState<T> {
|
|
|
1265
1265
|
|
|
1266
1266
|
declare function createMediaUrlResolver(api: Pick<ConversationsApi, 'getDocumentUrl' | 'getMediaProxyUrl'>): ResolveMediaUrl;
|
|
1267
1267
|
|
|
1268
|
-
|
|
1268
|
+
/**
|
|
1269
|
+
* Textos da inbox. Todos sobrescrevíveis: o produto troca vocabulário ("cliente" vira "lead") ou
|
|
1270
|
+
* o idioma inteiro sem tocar no layout — e sem manter uma cópia da tela para isso.
|
|
1271
|
+
*/
|
|
1272
|
+
interface ConversationsWorkspaceLabels {
|
|
1273
|
+
readonly title: string;
|
|
1274
|
+
readonly conversations: string;
|
|
1275
|
+
readonly waiting: string;
|
|
1276
|
+
readonly unread: string;
|
|
1277
|
+
readonly waitingOnly: string;
|
|
1278
|
+
readonly markSelectedAsRead: string;
|
|
1279
|
+
readonly search: string;
|
|
1280
|
+
readonly windowLegend: string;
|
|
1281
|
+
readonly channelLegend: string;
|
|
1282
|
+
readonly selectAll: string;
|
|
1283
|
+
readonly emptyList: string;
|
|
1284
|
+
readonly emptyDetail: string;
|
|
1285
|
+
readonly bulkSelected: (count: number) => string;
|
|
1286
|
+
readonly bulkClear: string;
|
|
1287
|
+
readonly bulkFinalize: string;
|
|
1288
|
+
readonly bulkFinalizeConfirm: (count: number) => string;
|
|
1289
|
+
readonly bulkTemplate: string;
|
|
1290
|
+
readonly markAllAsRead: string;
|
|
1291
|
+
readonly templateModalTitle: string;
|
|
1292
|
+
readonly templateModalSearch: string;
|
|
1293
|
+
readonly templateModalEmpty: string;
|
|
1294
|
+
readonly templateModalCancel: string;
|
|
1295
|
+
readonly templateModalSending: string;
|
|
1296
|
+
readonly templateModalNoneExpired: string;
|
|
1297
|
+
readonly templateModalAvailable: (count: number) => string;
|
|
1298
|
+
readonly templateModalSend: (count: number) => string;
|
|
1299
|
+
readonly messagesSelected: (count: number) => string;
|
|
1300
|
+
readonly copySelected: string;
|
|
1301
|
+
readonly composerPlaceholder: string;
|
|
1302
|
+
readonly attachFailure: string;
|
|
1303
|
+
/** Tira um arquivo da fila antes de enviar. */
|
|
1304
|
+
readonly attachmentRemove: string;
|
|
1305
|
+
readonly recordFailure: string;
|
|
1306
|
+
readonly sendFailure: string;
|
|
1307
|
+
readonly takeoverToReply: string;
|
|
1308
|
+
readonly signIn: string;
|
|
1309
|
+
readonly pageOf: (page: number, pageCount: number) => string;
|
|
1310
|
+
readonly rangeOf: (first: number, last: number, total: number) => string;
|
|
1311
|
+
}
|
|
1312
|
+
declare const DEFAULT_CONVERSATIONS_WORKSPACE_LABELS: ConversationsWorkspaceLabels;
|
|
1313
|
+
|
|
1314
|
+
/**
|
|
1315
|
+
* Estado da inbox: filtros, paginação, seleção em massa e ações de atendimento.
|
|
1316
|
+
*
|
|
1317
|
+
* Nasceu igual em três produtos e divergiu em três — contadores diferentes, um marcava lida ao
|
|
1318
|
+
* abrir e outro não, um perdia a página ao trocar de filtro. É a lógica de operar uma inbox, não
|
|
1319
|
+
* regra de nenhum negócio, e por isso mora aqui.
|
|
1320
|
+
*
|
|
1321
|
+
* A paginação é do cliente porque nem todo backend pagina a listagem. Fatiar aqui mantém a tela
|
|
1322
|
+
* utilizável com centenas de conversas; com dezenas de milhares o gargalo volta e a resposta é
|
|
1323
|
+
* paginar no servidor.
|
|
1324
|
+
*/
|
|
1325
|
+
|
|
1326
|
+
declare const CONVERSATIONS_PER_PAGE = 50;
|
|
1327
|
+
interface UseConversationsInboxParams {
|
|
1328
|
+
/** Recortes do produto repassados crus ao backend dele (carteira, campanha, tipo). */
|
|
1329
|
+
readonly filters?: Record<string, string | undefined>;
|
|
1330
|
+
readonly perPage?: number;
|
|
1331
|
+
/**
|
|
1332
|
+
* Marca como lida a conversa aberta. Ligado por padrão: badge subindo na conversa que o atendente
|
|
1333
|
+
* tem na frente é ruído que ele não tem como resolver.
|
|
1334
|
+
*/
|
|
1335
|
+
readonly markReadOnOpen?: boolean;
|
|
1336
|
+
/**
|
|
1337
|
+
* Pede a página ao servidor em vez de fatiar o que veio. Necessário quando a base é grande — o
|
|
1338
|
+
* padrão traz tudo e pagina no cliente porque nem todo backend pagina a listagem.
|
|
1339
|
+
*/
|
|
1340
|
+
readonly serverPaginated?: boolean;
|
|
1341
|
+
readonly describeFailure?: (error: unknown) => string;
|
|
1342
|
+
}
|
|
1343
|
+
interface UseConversationsInboxResult {
|
|
1344
|
+
readonly conversations: readonly ConversationSummary[];
|
|
1345
|
+
readonly pageConversations: readonly ConversationSummary[];
|
|
1346
|
+
readonly selectedConversation: ConversationSummary | undefined;
|
|
1347
|
+
readonly loading: boolean;
|
|
1348
|
+
readonly now: number;
|
|
1349
|
+
readonly totalCount: number;
|
|
1350
|
+
readonly unreadCount: number;
|
|
1351
|
+
readonly waitingCount: number;
|
|
1352
|
+
readonly filteredCount: number;
|
|
1353
|
+
/** Selecionadas fora da janela de 24h — as únicas que um template alcança. */
|
|
1354
|
+
readonly expiredSelectedCount: number;
|
|
1355
|
+
readonly page: number;
|
|
1356
|
+
readonly pageCount: number;
|
|
1357
|
+
readonly firstOnPage: number;
|
|
1358
|
+
readonly lastOnPage: number;
|
|
1359
|
+
readonly selectedId: string | undefined;
|
|
1360
|
+
readonly selectedIds: ReadonlySet<string>;
|
|
1361
|
+
readonly allOnPageSelected: boolean;
|
|
1362
|
+
readonly waitingOnly: boolean;
|
|
1363
|
+
readonly windowFilter: ConversationWindow;
|
|
1364
|
+
readonly channelFilter: ChannelFilter;
|
|
1365
|
+
readonly channelFilters: readonly ChannelFilterOption[];
|
|
1366
|
+
readonly search: string;
|
|
1367
|
+
readonly busy: boolean;
|
|
1368
|
+
/** Por que a lista está vazia, quando não é por não haver conversa. */
|
|
1369
|
+
readonly loadFailure: string | undefined;
|
|
1370
|
+
/** Ausentes quando o host não implementa a capacidade — a UI não desenha a afordância. */
|
|
1371
|
+
readonly canTakeover: boolean;
|
|
1372
|
+
readonly canFinalize: boolean;
|
|
1373
|
+
readonly canListTemplates: boolean;
|
|
1374
|
+
readonly canMarkAllRead: boolean;
|
|
1375
|
+
refetch(): Promise<void> | void;
|
|
1376
|
+
selectConversation(conversationId: string): void;
|
|
1377
|
+
clearSelection(): void;
|
|
1378
|
+
toggleSelected(conversationId: string): void;
|
|
1379
|
+
toggleSelectAllOnPage(): void;
|
|
1380
|
+
clearBulkSelection(): void;
|
|
1381
|
+
setWaitingOnly(value: boolean): void;
|
|
1382
|
+
setWindowFilter(value: ConversationWindow): void;
|
|
1383
|
+
setChannelFilter(value: ChannelFilter): void;
|
|
1384
|
+
setSearch(value: string): void;
|
|
1385
|
+
goToPage(value: number): void;
|
|
1386
|
+
markSelectedAsRead(): Promise<void>;
|
|
1387
|
+
markAllAsRead(): Promise<void>;
|
|
1388
|
+
takeover(conversationId: string): Promise<void>;
|
|
1389
|
+
releaseToBot(conversationId: string): Promise<void>;
|
|
1390
|
+
finalize(conversationId: string): Promise<void>;
|
|
1391
|
+
finalizeSelected(): Promise<void>;
|
|
1392
|
+
sendTemplateToSelected(templateName?: string): Promise<void>;
|
|
1393
|
+
}
|
|
1394
|
+
declare function useConversationsInbox(params?: UseConversationsInboxParams): UseConversationsInboxResult;
|
|
1395
|
+
|
|
1396
|
+
interface ConversationsWorkspaceSimulator {
|
|
1397
|
+
/**
|
|
1398
|
+
* Desenha o painel do cliente. Fica com o host porque o simulador precisa da rota assinada no
|
|
1399
|
+
* servidor DELE — e é o que mantém o `preview/` fora do bundle de quem não usa.
|
|
1400
|
+
*/
|
|
1401
|
+
render(params: {
|
|
1402
|
+
conversationId: string;
|
|
1403
|
+
close: () => void;
|
|
1404
|
+
}): ReactNode;
|
|
1405
|
+
/** Ausente = ligado. Serve para esconder fora de desenvolvimento sem condicionar o JSX. */
|
|
1406
|
+
readonly enabled?: boolean;
|
|
1407
|
+
readonly icon?: string;
|
|
1408
|
+
readonly label?: string;
|
|
1409
|
+
}
|
|
1410
|
+
interface ConversationsWorkspaceProps {
|
|
1411
|
+
readonly labels?: Partial<ConversationsWorkspaceLabels>;
|
|
1412
|
+
readonly filters?: Record<string, string | undefined>;
|
|
1413
|
+
readonly perPage?: number;
|
|
1414
|
+
readonly markReadOnOpen?: boolean;
|
|
1415
|
+
/** Pede a página ao servidor em vez de fatiar no cliente. */
|
|
1416
|
+
readonly serverPaginated?: boolean;
|
|
1417
|
+
/** Conversa a abrir na montagem (deep link `?id=`). */
|
|
1418
|
+
readonly initialConversationId?: string | undefined;
|
|
1419
|
+
/** Idem, pelo telefone — é o que costuma vir no link de um alerta ou de um pedido. */
|
|
1420
|
+
readonly initialWhatsappNumber?: string | undefined;
|
|
1421
|
+
readonly simulator?: ConversationsWorkspaceSimulator;
|
|
1422
|
+
readonly quickReplies?: readonly QuickReply[];
|
|
1423
|
+
readonly quickReplyVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => Record<string, string>;
|
|
1424
|
+
/** Etapa do fluxo mostrada no painel de contexto. */
|
|
1425
|
+
readonly flowLabelOf?: (conversation: ConversationSummary) => string | undefined;
|
|
1426
|
+
/** Substitui o download local do transcript (ex.: exportação completa pela rota do servidor). */
|
|
1427
|
+
readonly onDownload?: (conversation: ConversationSummary) => void;
|
|
1428
|
+
/** Bloqueia o composer enquanto a conversa estiver com o bot. */
|
|
1429
|
+
readonly requireTakeoverToReply?: boolean;
|
|
1430
|
+
/** Deixa marcar mensagens no transcript e copiar o trecho. */
|
|
1431
|
+
readonly messageSelection?: boolean;
|
|
1432
|
+
/** Texto já no campo ao abrir a conversa (deep link que sugere a resposta). */
|
|
1433
|
+
readonly initialComposerText?: string | undefined;
|
|
1434
|
+
/** `rich` troca o campo simples pelo texto com a formatação do WhatsApp desenhada ao escrever. */
|
|
1435
|
+
readonly composer?: 'simple' | 'rich';
|
|
1436
|
+
/** Valores que o operador insere sem digitar. Só o composer `rich` os oferece. */
|
|
1437
|
+
readonly composerVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => readonly RichComposerVariable[];
|
|
1438
|
+
/** Fila de anexos com legenda, como no WhatsApp. Ausente, o clipe manda cada arquivo na hora. */
|
|
1439
|
+
readonly onSendAttachments?: (conversation: ConversationSummary, files: readonly File[], caption: string) => Promise<void>;
|
|
1440
|
+
/** Nota de voz. Ausente, o microfone não aparece. */
|
|
1441
|
+
readonly onRecordAudio?: (conversation: ConversationSummary, file: File) => Promise<void>;
|
|
1442
|
+
readonly contextEntriesOf?: (context: Record<string, unknown> | undefined) => readonly ConversationContextEntry[];
|
|
1443
|
+
readonly onAttach?: (conversation: ConversationSummary, file: File) => Promise<void>;
|
|
1444
|
+
readonly extraUtilitiesFor?: (conversation: ConversationSummary) => readonly ConversationHeaderUtility[];
|
|
1445
|
+
readonly renderFilters?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1446
|
+
readonly renderBulkActions?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1447
|
+
readonly renderRow?: (conversation: ConversationSummary) => ReactNode;
|
|
1448
|
+
readonly renderAboveTranscript?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => ReactNode;
|
|
1449
|
+
readonly renderHeaderActions?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1450
|
+
readonly onSendTemplateToSelected?: (inbox: UseConversationsInboxResult) => void;
|
|
1451
|
+
/** Destino do link de reentrar no painel, mostrado junto do aviso de sessão expirada. */
|
|
1452
|
+
readonly signInHref?: string;
|
|
1453
|
+
readonly className?: string;
|
|
1454
|
+
}
|
|
1455
|
+
declare function ConversationsWorkspace({ labels: labelsOverride, filters, perPage, markReadOnOpen, serverPaginated, initialConversationId, initialWhatsappNumber, simulator, quickReplies, quickReplyVariablesFor, flowLabelOf, onDownload, requireTakeoverToReply, messageSelection, initialComposerText, composer, composerVariablesFor, onSendAttachments, onRecordAudio, contextEntriesOf, onAttach, extraUtilitiesFor, renderFilters, renderBulkActions, renderRow, renderAboveTranscript, renderHeaderActions, onSendTemplateToSelected, signInHref, className, }: ConversationsWorkspaceProps): react.JSX.Element;
|
|
1456
|
+
|
|
1457
|
+
interface ConversationPaneProps {
|
|
1458
|
+
readonly conversation: ConversationSummary;
|
|
1459
|
+
readonly now: number;
|
|
1460
|
+
readonly busy: boolean;
|
|
1461
|
+
readonly labels: ConversationsWorkspaceLabels;
|
|
1462
|
+
readonly onTakeover?: (() => void) | undefined;
|
|
1463
|
+
readonly onReturnToBot?: (() => void) | undefined;
|
|
1464
|
+
readonly onFinish?: (() => void) | undefined;
|
|
1465
|
+
readonly onBack: () => void;
|
|
1466
|
+
readonly extraUtilities?: readonly ConversationHeaderUtility[];
|
|
1467
|
+
/** Traduz o contexto cru do produto nas linhas do painel. Ausente, o painel não aparece. */
|
|
1468
|
+
readonly contextEntriesOf?: (context: Record<string, unknown> | undefined) => readonly ConversationContextEntry[];
|
|
1469
|
+
readonly quickReplies?: readonly QuickReply[];
|
|
1470
|
+
/**
|
|
1471
|
+
* Recebe o contexto junto porque o dado que interessa à variável (o nome que o bot perguntou,
|
|
1472
|
+
* por exemplo) vive no contexto do fluxo, não no resumo da listagem.
|
|
1473
|
+
*/
|
|
1474
|
+
readonly quickReplyVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => Record<string, string>;
|
|
1475
|
+
/** Etapa do fluxo ao lado do contexto (ex.: "Anotando o pedido"). */
|
|
1476
|
+
readonly flowLabel?: string | undefined;
|
|
1477
|
+
/**
|
|
1478
|
+
* Substitui o download local do transcript. Existe para o produto que exporta pela rota do
|
|
1479
|
+
* servidor, onde o arquivo sai completo em vez de só com o que a tela carregou.
|
|
1480
|
+
*/
|
|
1481
|
+
readonly onDownload?: (() => void) | undefined;
|
|
1482
|
+
/**
|
|
1483
|
+
* Bloqueia o composer enquanto a conversa estiver com o bot. Ligado, responder sem assumir
|
|
1484
|
+
* atropelaria o fluxo automático no meio de uma pergunta.
|
|
1485
|
+
*/
|
|
1486
|
+
readonly requireTakeoverToReply?: boolean;
|
|
1487
|
+
/**
|
|
1488
|
+
* Deixa marcar mensagens e copiar o trecho. É o que se faz para levar um pedaço da conversa a um
|
|
1489
|
+
* e-mail ou a um chamado, sem baixar o transcript inteiro.
|
|
1490
|
+
*/
|
|
1491
|
+
readonly messageSelection?: boolean;
|
|
1492
|
+
/** Texto já no campo ao abrir (deep link que sugere a resposta). */
|
|
1493
|
+
readonly initialComposerText?: string | undefined;
|
|
1494
|
+
/**
|
|
1495
|
+
* Peça do produto entre o contexto e o transcript (ex.: ficha do lead, resumo do pedido). Recebe o
|
|
1496
|
+
* contexto do fluxo junto: é dele que sai o resumo, e sem isso o host teria de buscá-lo de novo.
|
|
1497
|
+
*/
|
|
1498
|
+
readonly renderAboveTranscript?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => ReactNode;
|
|
1499
|
+
readonly onAttach?: ((file: File) => Promise<void>) | undefined;
|
|
1500
|
+
/**
|
|
1501
|
+
* `rich` troca o `textarea` pelo campo com a formatação do WhatsApp desenhada enquanto se escreve.
|
|
1502
|
+
* Vale onde o atendente manda texto longo e formatado; para responder "já vou ver" o campo simples
|
|
1503
|
+
* é menos coisa na tela.
|
|
1504
|
+
*/
|
|
1505
|
+
readonly composer?: 'simple' | 'rich';
|
|
1506
|
+
/** Valores que o operador insere sem digitar. Só o composer `rich` os oferece. */
|
|
1507
|
+
readonly composerVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => readonly RichComposerVariable[];
|
|
1508
|
+
/**
|
|
1509
|
+
* Fila de anexos com legenda, como no WhatsApp: os arquivos escolhidos ficam visíveis acima da
|
|
1510
|
+
* barra e saem junto com o texto escrito. Ausente, o clipe manda cada arquivo na hora — o que
|
|
1511
|
+
* perde a legenda, e era a diferença entre as telas.
|
|
1512
|
+
*/
|
|
1513
|
+
readonly onSendAttachments?: (files: readonly File[], caption: string) => Promise<void>;
|
|
1514
|
+
/** Grava e envia nota de voz. Ausente, o microfone não aparece. */
|
|
1515
|
+
readonly onRecordAudio?: (file: File) => Promise<void>;
|
|
1516
|
+
}
|
|
1517
|
+
declare function ConversationPane({ conversation, now, busy, labels, onTakeover, onReturnToBot, onFinish, onBack, extraUtilities, contextEntriesOf, quickReplies, quickReplyVariablesFor, flowLabel, onDownload, requireTakeoverToReply, messageSelection, initialComposerText, renderAboveTranscript, onAttach, composer, composerVariablesFor, onSendAttachments, onRecordAudio, }: ConversationPaneProps): react.JSX.Element;
|
|
1518
|
+
|
|
1519
|
+
interface ConversationsInboxListProps {
|
|
1520
|
+
readonly inbox: UseConversationsInboxResult;
|
|
1521
|
+
readonly labels: ConversationsWorkspaceLabels;
|
|
1522
|
+
readonly className?: string;
|
|
1523
|
+
/** Barra extra do produto acima da lista (ex.: filtro de carteira, seletor de campanha). */
|
|
1524
|
+
readonly renderFilters?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1525
|
+
/** Ações em lote do produto, ao lado de finalizar e template. */
|
|
1526
|
+
readonly renderBulkActions?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1527
|
+
readonly renderRow?: (conversation: ConversationSummary) => ReactNode;
|
|
1528
|
+
readonly onSendTemplateToSelected?: () => void;
|
|
1529
|
+
}
|
|
1530
|
+
declare function ConversationsInboxList({ inbox, labels, className, renderFilters, renderBulkActions, renderRow, onSendTemplateToSelected, }: ConversationsInboxListProps): react.JSX.Element;
|
|
1531
|
+
|
|
1532
|
+
export { type AsyncResourceState, AudioPlayer, type AudioPlayerProps, AudioTranscription, type AudioTranscriptionProps, Avatar, type AvatarLabels, type AvatarProps, type BuildTranscriptTextParams, CHANNEL_BRAND_COLOR, CONVERSATIONS_PER_PAGE, CONVERSATION_WINDOW, ChannelFilter, ChannelFilterOption, ChannelIcon, type ChannelIconProps, ConversationChannel, type ConversationContextEntry, ConversationContextPanel, type ConversationContextPanelClassNames, type ConversationContextPanelLabels, type ConversationContextPanelProps, type ConversationContextStatus, ConversationDocument, ConversationDocumentsPanel, type ConversationDocumentsPanelClassNames, type ConversationDocumentsPanelLabels, type ConversationDocumentsPanelProps, ConversationHeader, type ConversationHeaderClassNames, type ConversationHeaderLabels, type ConversationHeaderProps, type ConversationHeaderUtility, ConversationListItem, type ConversationListItemLabels, type ConversationListItemProps, type ConversationLocales, ConversationLocalesProvider, type ConversationLocalesProviderProps, ConversationPane, type ConversationPaneProps, type ConversationRealtimeHandler, ConversationRow, type ConversationRowClassNames, type ConversationRowProps, ConversationSummary, ConversationTemplate, ConversationWallpaper, type ConversationWallpaperProps, type ConversationWindow, ConversationsApi, ConversationsFeatures, ConversationsInboxList, type ConversationsInboxListProps, ConversationsProvider, ConversationsWorkspace, type ConversationsWorkspaceLabels, type ConversationsWorkspaceProps, type ConversationsWorkspaceSimulator, DEFAULT_ACCEPTED_FILE_TYPES, DEFAULT_AVATAR_LABELS, DEFAULT_CONVERSATIONS_WORKSPACE_LABELS, DEFAULT_CONVERSATION_CONTEXT_LABELS, DEFAULT_CONVERSATION_DOCUMENTS_LABELS, DEFAULT_CONVERSATION_HEADER_LABELS, DEFAULT_CONVERSATION_LIST_ITEM_LABELS, DEFAULT_DOCUMENTS_LIBRARY_LABELS, DEFAULT_EMOJI_PICKER_LABELS, DEFAULT_INTERACTIVE_MESSAGE_LABELS, DEFAULT_LIGHTBOX_LABELS, DEFAULT_MESSAGE_COMPOSER_LABELS, DEFAULT_RICH_COMPOSER_TOOLTIPS, DEFAULT_TEMPLATES_SETTINGS_LABELS, DEFAULT_WHATSAPP_MESSAGE_EDITOR_LABELS, DEFAULT_WINDOW_EXPIRED_LABELS, DOCUMENT_SOURCE_FILTER, DateDivider, type DateDividerClassNames, type DateDividerProps, type DocumentSourceFilter, DocumentsLibrary, type DocumentsLibraryClassNames, type DocumentsLibraryLabels, type DocumentsLibraryProps, EMOJI_CATEGORIES, type EmojiCategory, type EmojiEntry, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, FileIcon, type FileIconProps, InteractiveMessage, type InteractiveMessageLabels, type InteractiveMessageProps, InteractivePayload, InteractiveSelection, Lightbox, type LightboxLabels, type LightboxProps, ListConversationsParams, ListDocumentsParams, MessageBubble, type MessageBubbleProps, MessageComposer, type MessageComposerClassNames, type MessageComposerLabels, type MessageComposerProps, MessagePayload, MessageTail, MessageText, type MessageTextProps, MessageTimestamp, MessageTranscription, NARROW_MAX_WIDTH_PX, type QuickReply, RICH_COMPOSER_ACTION, ResolveMediaUrl, type RichComposerAction, type RichComposerQuickReply, type RichComposerTooltips, type RichComposerVariable, RichMessageComposer, type RichMessageComposerHandle, type RichMessageComposerProps, SSEProvider, SimpleEmojiPicker, type SimpleEmojiPickerProps, StatusTicks, type StatusTicksProps, TEMPLATE_SETTINGS_TAB, type TemplateSettingsTab, ToastProvider, type TopicItem, TopicsForm, type TopicsFormLabels, type TopicsFormProps, TranscriptionMode, TranscriptionSettingsForm, type TranscriptionSettingsFormLabels, type TranscriptionSettingsFormProps, type UseConversationActionsResult, type UseConversationContextResult, type UseConversationDocumentsParams, type UseConversationDocumentsResult, type UseConversationListParams, type UseConversationListResult, type UseConversationMessagesResult, type UseConversationsInboxParams, type UseConversationsInboxResult, type UseInboxActionsResult, type UseScrollToLatestMessageParams, type UseScrollToLatestMessageResult, type UseWaitingNotificationsLabels, type UseWaitingNotificationsParams, type UseWaitingNotificationsResult, WINDOW_FILTERS, WelcomeFarewellForm, type WelcomeFarewellFormLabels, type WelcomeFarewellFormProps, WhatsAppCreateTemplateForm, type WhatsAppCreateTemplateFormLabels, type WhatsAppCreateTemplateFormProps, type WhatsAppCreateTemplateResult, type WhatsAppCreateTemplateState, WhatsAppMessageEditor, type WhatsAppMessageEditorLabels, type WhatsAppMessageEditorProps, type WhatsAppTemplateHeaderType, WhatsAppTemplateSettingsForm, type WhatsAppTemplateSettingsFormLabels, type WhatsAppTemplateSettingsFormProps, type WhatsAppTemplateSummary, type WhatsAppTemplateVariableSuggestion, WhatsAppTemplatesSettings, type WhatsAppTemplatesSettingsLabels, type WhatsAppTemplatesSettingsProps, WindowExpiredNotice, type WindowExpiredNoticeLabels, type WindowExpiredNoticeProps, type WindowOfParams, applyQuickReplyVariables, buildTranscriptFilename, buildTranscriptText, createMediaUrlResolver, downloadTextFile, formatDateTime, formatFileSize, formatPhone, formatStalledFor, formatTimestamp, htmlToWA, isSameDay, isWindowBlocking, parseWhatsAppFormatting, phoneInitials, resolveQuickReply, searchEmojis, toast, useConversationActions, useConversationContext, useConversationDocuments, useConversationList, useConversationLocales, useConversationMessages, useConversationRealtime, useConversations, useConversationsInbox, useDarkMode, useGlobalRealtime, useInboxActions, useIsDarkTheme, useIsNarrow, useScrollToLatestMessage, useToast, useWaitingNotifications, waToHTML, waToHTMLInline, windowOf };
|