@adatechnology/conversations-ui 0.1.0-rc.23 → 0.1.0-rc.25
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/flows/index.d.ts +128 -2
- package/dist/flows/index.js +1085 -6
- package/dist/index.d.ts +255 -9
- package/dist/index.js +1309 -325
- package/dist/preview/index.d.ts +2 -2
- package/dist/styles.css +117 -0
- package/dist/{types-C6A_9edv.d.ts → types-BfINicc-.d.ts} +36 -1
- package/package.json +2 -2
- package/src/documents/DocumentsWorkspace.tsx +489 -0
- package/src/documents/index.ts +8 -0
- package/src/documents/labels.ts +88 -0
- package/src/flows/FlowNodeCard.tsx +12 -3
- package/src/flows/FlowNodePanel.tsx +15 -2
- package/src/flows/FlowsWorkspace.tsx +1252 -0
- package/src/flows/index.ts +3 -1
- package/src/flows/labels.ts +132 -0
- package/src/hooks/useUrlFilterState.ts +107 -0
- package/src/index.ts +30 -0
- package/src/listing/index.tsx +198 -0
- package/src/providers/types.ts +36 -1
- package/src/settings/MessagesWorkspace.tsx +465 -0
- package/src/settings/WhatsAppTemplatesSettings.tsx +7 -1
- package/src/styles.css +108 -0
- package/src/workspace/ConversationPane.tsx +119 -4
- package/src/workspace/ConversationsWorkspace.tsx +33 -1
- package/src/workspace/labels.ts +5 -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, f as ChannelFilter, g as ChannelFilterOption } from './types-
|
|
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-
|
|
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-BfINicc-.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-BfINicc-.js';
|
|
5
5
|
|
|
6
6
|
interface MessageBubbleProps {
|
|
7
7
|
message: MessagePayload;
|
|
@@ -733,6 +733,158 @@ interface DocumentsLibraryProps {
|
|
|
733
733
|
}
|
|
734
734
|
declare function DocumentsLibrary({ perPage, onOpenConversation, labels: labelsOverride, className, classNames, }: DocumentsLibraryProps): react.JSX.Element | null;
|
|
735
735
|
|
|
736
|
+
type SortDirection = 'asc' | 'desc';
|
|
737
|
+
interface SortableHeadProps {
|
|
738
|
+
readonly label: string;
|
|
739
|
+
readonly field: string;
|
|
740
|
+
readonly activeField: string;
|
|
741
|
+
readonly direction: SortDirection;
|
|
742
|
+
readonly onSort: (field: string) => void;
|
|
743
|
+
readonly className?: string;
|
|
744
|
+
}
|
|
745
|
+
declare function SortableHead({ label, field, activeField, direction, onSort, className }: SortableHeadProps): react.JSX.Element;
|
|
746
|
+
interface FilterOption {
|
|
747
|
+
readonly value: string;
|
|
748
|
+
readonly label: string;
|
|
749
|
+
}
|
|
750
|
+
interface MultiSelectFilterProps {
|
|
751
|
+
readonly label: string;
|
|
752
|
+
readonly options: readonly FilterOption[];
|
|
753
|
+
readonly selected: readonly string[];
|
|
754
|
+
readonly onChange: (selected: readonly string[]) => void;
|
|
755
|
+
readonly className?: string;
|
|
756
|
+
}
|
|
757
|
+
declare function MultiSelectFilter({ label, options, selected, onChange, className }: MultiSelectFilterProps): react.JSX.Element;
|
|
758
|
+
interface BulkActionBarProps {
|
|
759
|
+
readonly selectedCount: number;
|
|
760
|
+
readonly selectedLabel: (count: number) => string;
|
|
761
|
+
readonly clearLabel: string;
|
|
762
|
+
readonly onClear: () => void;
|
|
763
|
+
readonly children?: ReactNode;
|
|
764
|
+
}
|
|
765
|
+
declare function BulkActionBar({ selectedCount, selectedLabel, clearLabel, onClear, children }: BulkActionBarProps): react.JSX.Element | null;
|
|
766
|
+
interface ListingPaginationProps {
|
|
767
|
+
readonly page: number;
|
|
768
|
+
readonly total: number;
|
|
769
|
+
readonly perPage: number;
|
|
770
|
+
readonly perPageOptions?: readonly number[];
|
|
771
|
+
readonly onPageChange: (page: number) => void;
|
|
772
|
+
readonly onPerPageChange?: (perPage: number) => void;
|
|
773
|
+
readonly labels: {
|
|
774
|
+
readonly show: string;
|
|
775
|
+
readonly perPage: string;
|
|
776
|
+
readonly total: (count: number) => string;
|
|
777
|
+
readonly page: (current: number, last: number) => string;
|
|
778
|
+
readonly previous: string;
|
|
779
|
+
readonly next: string;
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
declare function ListingPagination({ page, total, perPage, perPageOptions, onPageChange, onPerPageChange, labels, }: ListingPaginationProps): react.JSX.Element;
|
|
783
|
+
|
|
784
|
+
/**
|
|
785
|
+
* Vocabulário da biblioteca de arquivos. Sobrescrevível campo a campo: o produto troca "cliente"
|
|
786
|
+
* por "lead" ou o idioma inteiro sem manter uma cópia da tela para isso.
|
|
787
|
+
*/
|
|
788
|
+
interface DocumentsWorkspaceLabels {
|
|
789
|
+
readonly title: string;
|
|
790
|
+
readonly subtitle: (total: number) => string;
|
|
791
|
+
readonly searchPlaceholder: string;
|
|
792
|
+
readonly empty: string;
|
|
793
|
+
readonly noResults: string;
|
|
794
|
+
readonly loading: string;
|
|
795
|
+
readonly failure: string;
|
|
796
|
+
readonly view: string;
|
|
797
|
+
readonly download: string;
|
|
798
|
+
readonly remove: string;
|
|
799
|
+
readonly removeConfirm: (filename: string) => string;
|
|
800
|
+
readonly openConversation: string;
|
|
801
|
+
readonly sourceFilter: string;
|
|
802
|
+
readonly categoryFilter: string;
|
|
803
|
+
readonly startDate: string;
|
|
804
|
+
readonly endDate: string;
|
|
805
|
+
readonly clearFilters: string;
|
|
806
|
+
readonly selectAllPage: string;
|
|
807
|
+
readonly selectRow: string;
|
|
808
|
+
readonly bulkSelected: (count: number) => string;
|
|
809
|
+
readonly bulkClear: string;
|
|
810
|
+
readonly bulkDownloadZip: string;
|
|
811
|
+
readonly bulkRemove: (count: number) => string;
|
|
812
|
+
readonly bulkRemoveConfirm: (count: number) => string;
|
|
813
|
+
readonly columnFilename: string;
|
|
814
|
+
readonly columnContact: string;
|
|
815
|
+
readonly columnType: string;
|
|
816
|
+
readonly columnSize: string;
|
|
817
|
+
readonly columnSource: string;
|
|
818
|
+
readonly columnDate: string;
|
|
819
|
+
readonly columnActions: string;
|
|
820
|
+
readonly sourceLabels: Readonly<Record<string, string>>;
|
|
821
|
+
readonly categoryLabels: Readonly<Record<string, string>>;
|
|
822
|
+
readonly show: string;
|
|
823
|
+
readonly perPage: string;
|
|
824
|
+
readonly total: (count: number) => string;
|
|
825
|
+
readonly page: (current: number, last: number) => string;
|
|
826
|
+
readonly previousPage: string;
|
|
827
|
+
readonly nextPage: string;
|
|
828
|
+
}
|
|
829
|
+
declare const DEFAULT_DOCUMENTS_WORKSPACE_LABELS: DocumentsWorkspaceLabels;
|
|
830
|
+
|
|
831
|
+
interface DocumentsWorkspaceClassNames {
|
|
832
|
+
root: string;
|
|
833
|
+
header: string;
|
|
834
|
+
filters: string;
|
|
835
|
+
table: string;
|
|
836
|
+
row: string;
|
|
837
|
+
status: string;
|
|
838
|
+
}
|
|
839
|
+
interface DocumentsWorkspaceProps {
|
|
840
|
+
readonly perPage?: number;
|
|
841
|
+
readonly perPageOptions?: readonly number[];
|
|
842
|
+
/** Abrir a conversa de origem. Ausente, o número aparece como texto e não como link. */
|
|
843
|
+
readonly onOpenConversation?: (conversationId: string) => void;
|
|
844
|
+
/** Origens filtráveis. Ausente, usa o vocabulário padrão (`customer`, `agent`, `bot`). */
|
|
845
|
+
readonly sources?: readonly FilterOption[];
|
|
846
|
+
/** Categorias de arquivo. Lista vazia esconde o filtro — nem todo host classifica anexo. */
|
|
847
|
+
readonly categories?: readonly FilterOption[];
|
|
848
|
+
/** Recorte por data. Desligado quando o backend não sabe filtrar por período. */
|
|
849
|
+
readonly dateFilter?: boolean;
|
|
850
|
+
/**
|
|
851
|
+
* Filtros do produto (cliente, unidade, campanha). Recebe os parâmetros extras atuais e devolve
|
|
852
|
+
* os controles; o que o produto guardar aqui viaja em `extra` para o `getAllDocuments`.
|
|
853
|
+
*/
|
|
854
|
+
readonly renderFilters?: (context: DocumentsFiltersContext) => ReactNode;
|
|
855
|
+
readonly labels?: Partial<DocumentsWorkspaceLabels>;
|
|
856
|
+
readonly className?: string;
|
|
857
|
+
readonly classNames?: Partial<DocumentsWorkspaceClassNames>;
|
|
858
|
+
/** Espelhar filtros e paginação na URL. Desligado em preview, onde não há rota de verdade. */
|
|
859
|
+
readonly syncUrl?: boolean;
|
|
860
|
+
}
|
|
861
|
+
interface DocumentsFiltersContext {
|
|
862
|
+
readonly extra: Readonly<Record<string, string | number>>;
|
|
863
|
+
readonly setExtra: (next: Readonly<Record<string, string | number>>) => void;
|
|
864
|
+
}
|
|
865
|
+
declare function DocumentsWorkspace({ perPage: initialPerPage, perPageOptions, onOpenConversation, sources, categories, dateFilter, renderFilters, labels: labelsOverride, className, classNames, syncUrl, }: DocumentsWorkspaceProps): react.JSX.Element | null;
|
|
866
|
+
|
|
867
|
+
/**
|
|
868
|
+
* Estado de listagem espelhado na URL — ordenação, filtros e paginação (regra `web.md` §7).
|
|
869
|
+
*
|
|
870
|
+
* Escrito sobre `history.replaceState` e não sobre um router: o pacote roda em três produtos com
|
|
871
|
+
* routers diferentes, e exigir um deles arrastaria dependência de framework para dentro do módulo.
|
|
872
|
+
* `replaceState` também é o comportamento certo aqui — filtrar não é navegar, e cada tecla digitada
|
|
873
|
+
* na busca não deve virar uma entrada no botão "voltar".
|
|
874
|
+
*/
|
|
875
|
+
/** `enabled: false` mantém o mesmo contrato de estado sem tocar na URL — para uso em preview e teste. */
|
|
876
|
+
interface UrlStateOptions {
|
|
877
|
+
readonly enabled?: boolean;
|
|
878
|
+
}
|
|
879
|
+
declare function useUrlStringState(key: string, initial: string, { enabled }?: UrlStateOptions): [string, (next: string) => void];
|
|
880
|
+
declare function useUrlNumberState(key: string, initial: number, { enabled }?: UrlStateOptions): [number, (next: number) => void];
|
|
881
|
+
declare function useUrlArrayState(key: string, { enabled }?: UrlStateOptions): [readonly string[], (next: readonly string[]) => void];
|
|
882
|
+
/**
|
|
883
|
+
* Espera o usuário parar de digitar antes de deixar o valor chegar à query. Sem isto, cada tecla
|
|
884
|
+
* na busca vira uma chamada de rede e uma reescrita de URL.
|
|
885
|
+
*/
|
|
886
|
+
declare function useDebouncedValue<TValue>(value: TValue, delayMs?: number): TValue;
|
|
887
|
+
|
|
736
888
|
/**
|
|
737
889
|
* Arquivos trocados na conversa. Sai do transcript e vira lista própria porque anexo é o que o
|
|
738
890
|
* atendente mais precisa reencontrar depois — rolar meses de mensagens para achar um comprovante é
|
|
@@ -1108,10 +1260,13 @@ interface WhatsAppTemplatesSettingsProps {
|
|
|
1108
1260
|
onSubmit: (event: FormEvent) => void;
|
|
1109
1261
|
submitting?: boolean;
|
|
1110
1262
|
result?: WhatsAppCreateTemplateResult | null;
|
|
1263
|
+
labels?: Partial<WhatsAppCreateTemplateFormLabels>;
|
|
1111
1264
|
};
|
|
1112
1265
|
labels?: Partial<WhatsAppTemplatesSettingsLabels>;
|
|
1266
|
+
/** Vocabulário do formulário de seleção — separado de `labels`, que nomeia só as abas daqui. */
|
|
1267
|
+
settingsLabels?: Partial<WhatsAppTemplateSettingsFormLabels>;
|
|
1113
1268
|
}
|
|
1114
|
-
declare function WhatsAppTemplatesSettings({ labels: labelsOverride, create, ...settingsProps }: WhatsAppTemplatesSettingsProps): react.JSX.Element;
|
|
1269
|
+
declare function WhatsAppTemplatesSettings({ labels: labelsOverride, settingsLabels, create, ...settingsProps }: WhatsAppTemplatesSettingsProps): react.JSX.Element;
|
|
1115
1270
|
|
|
1116
1271
|
interface TopicItem {
|
|
1117
1272
|
key: string;
|
|
@@ -1137,6 +1292,67 @@ interface TopicsFormProps {
|
|
|
1137
1292
|
}
|
|
1138
1293
|
declare function TopicsForm({ topics, onToggle, onMessageChange, onSave, saving, saveSuccess, labels: labelsOverride, }: TopicsFormProps): react.JSX.Element;
|
|
1139
1294
|
|
|
1295
|
+
interface BotMessages {
|
|
1296
|
+
welcomeMessage: string;
|
|
1297
|
+
farewellMessage: string;
|
|
1298
|
+
}
|
|
1299
|
+
interface TemplateSettings {
|
|
1300
|
+
templateName: string;
|
|
1301
|
+
templateLanguage: string;
|
|
1302
|
+
variables: string[];
|
|
1303
|
+
}
|
|
1304
|
+
interface TranscriptionSettings {
|
|
1305
|
+
enabled: boolean;
|
|
1306
|
+
mode: TranscriptionMode;
|
|
1307
|
+
available: boolean;
|
|
1308
|
+
}
|
|
1309
|
+
interface MessagesWorkspaceApi {
|
|
1310
|
+
getMessages(): Promise<BotMessages>;
|
|
1311
|
+
saveMessages(messages: BotMessages): Promise<void>;
|
|
1312
|
+
/** Sem este par, a seção de tópicos não é desenhada. */
|
|
1313
|
+
getTopics?(): Promise<TopicItem[]>;
|
|
1314
|
+
saveTopics?(topics: TopicItem[]): Promise<void>;
|
|
1315
|
+
/** Sem este par, a aba de templates não é desenhada. */
|
|
1316
|
+
getTemplateSettings?(): Promise<TemplateSettings>;
|
|
1317
|
+
saveTemplateSettings?(settings: TemplateSettings): Promise<void>;
|
|
1318
|
+
/**
|
|
1319
|
+
* Lista de templates aprovados na Meta. Ausente, a aba ainda existe (dá para salvar o nome
|
|
1320
|
+
* escolhido), mas nasce sem opções e sem botão de recarregar.
|
|
1321
|
+
*/
|
|
1322
|
+
listTemplates?(): Promise<WhatsAppTemplateSummary[]>;
|
|
1323
|
+
/** Sem isto, o submenu "Criar template" some. */
|
|
1324
|
+
createTemplate?(input: WhatsAppCreateTemplateState): Promise<WhatsAppCreateTemplateResult>;
|
|
1325
|
+
/** Sem este par, a aba de transcrição não é desenhada. */
|
|
1326
|
+
getTranscription?(): Promise<TranscriptionSettings>;
|
|
1327
|
+
saveTranscription?(settings: Omit<TranscriptionSettings, 'available'>): Promise<void>;
|
|
1328
|
+
}
|
|
1329
|
+
interface MessagesWorkspaceLabels {
|
|
1330
|
+
title: string;
|
|
1331
|
+
subtitle: string;
|
|
1332
|
+
loading: string;
|
|
1333
|
+
loadError: string;
|
|
1334
|
+
tabBot: string;
|
|
1335
|
+
tabTemplates: string;
|
|
1336
|
+
tabTranscription: string;
|
|
1337
|
+
welcomeFarewell: Partial<WelcomeFarewellFormLabels>;
|
|
1338
|
+
topics: Partial<TopicsFormLabels>;
|
|
1339
|
+
templates: Partial<WhatsAppTemplatesSettingsLabels>;
|
|
1340
|
+
templateSettings: Partial<WhatsAppTemplateSettingsFormLabels>;
|
|
1341
|
+
createTemplate: Partial<WhatsAppCreateTemplateFormLabels>;
|
|
1342
|
+
transcription: Partial<TranscriptionSettingsFormLabels>;
|
|
1343
|
+
}
|
|
1344
|
+
interface MessagesWorkspaceProps {
|
|
1345
|
+
readonly api: MessagesWorkspaceApi;
|
|
1346
|
+
readonly labels?: Partial<MessagesWorkspaceLabels>;
|
|
1347
|
+
readonly welcomePlaceholders?: readonly string[];
|
|
1348
|
+
readonly farewellPlaceholders?: readonly string[];
|
|
1349
|
+
readonly availableVariables?: WhatsAppTemplateVariableSuggestion[];
|
|
1350
|
+
/** Aviso do produto acima da aba de templates (ex.: rota da Graph API ainda não implementada). */
|
|
1351
|
+
readonly renderTemplatesNotice?: () => ReactNode;
|
|
1352
|
+
readonly className?: string;
|
|
1353
|
+
}
|
|
1354
|
+
declare function MessagesWorkspace({ api, labels: labelsOverride, welcomePlaceholders, farewellPlaceholders, availableVariables, renderTemplatesNotice, className, }: MessagesWorkspaceProps): react.JSX.Element;
|
|
1355
|
+
|
|
1140
1356
|
interface UseConversationMessagesResult {
|
|
1141
1357
|
messages: MessagePayload[];
|
|
1142
1358
|
loading: boolean;
|
|
@@ -1300,6 +1516,9 @@ interface ConversationsWorkspaceLabels {
|
|
|
1300
1516
|
readonly copySelected: string;
|
|
1301
1517
|
readonly composerPlaceholder: string;
|
|
1302
1518
|
readonly attachFailure: string;
|
|
1519
|
+
/** Tira um arquivo da fila antes de enviar. */
|
|
1520
|
+
readonly attachmentRemove: string;
|
|
1521
|
+
readonly recordFailure: string;
|
|
1303
1522
|
readonly sendFailure: string;
|
|
1304
1523
|
readonly takeoverToReply: string;
|
|
1305
1524
|
readonly signIn: string;
|
|
@@ -1428,20 +1647,28 @@ interface ConversationsWorkspaceProps {
|
|
|
1428
1647
|
readonly messageSelection?: boolean;
|
|
1429
1648
|
/** Texto já no campo ao abrir a conversa (deep link que sugere a resposta). */
|
|
1430
1649
|
readonly initialComposerText?: string | undefined;
|
|
1650
|
+
/** `rich` troca o campo simples pelo texto com a formatação do WhatsApp desenhada ao escrever. */
|
|
1651
|
+
readonly composer?: 'simple' | 'rich';
|
|
1652
|
+
/** Valores que o operador insere sem digitar. Só o composer `rich` os oferece. */
|
|
1653
|
+
readonly composerVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => readonly RichComposerVariable[];
|
|
1654
|
+
/** Fila de anexos com legenda, como no WhatsApp. Ausente, o clipe manda cada arquivo na hora. */
|
|
1655
|
+
readonly onSendAttachments?: (conversation: ConversationSummary, files: readonly File[], caption: string) => Promise<void>;
|
|
1656
|
+
/** Nota de voz. Ausente, o microfone não aparece. */
|
|
1657
|
+
readonly onRecordAudio?: (conversation: ConversationSummary, file: File) => Promise<void>;
|
|
1431
1658
|
readonly contextEntriesOf?: (context: Record<string, unknown> | undefined) => readonly ConversationContextEntry[];
|
|
1432
1659
|
readonly onAttach?: (conversation: ConversationSummary, file: File) => Promise<void>;
|
|
1433
1660
|
readonly extraUtilitiesFor?: (conversation: ConversationSummary) => readonly ConversationHeaderUtility[];
|
|
1434
1661
|
readonly renderFilters?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1435
1662
|
readonly renderBulkActions?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1436
1663
|
readonly renderRow?: (conversation: ConversationSummary) => ReactNode;
|
|
1437
|
-
readonly renderAboveTranscript?: (conversation: ConversationSummary) => ReactNode;
|
|
1664
|
+
readonly renderAboveTranscript?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => ReactNode;
|
|
1438
1665
|
readonly renderHeaderActions?: (inbox: UseConversationsInboxResult) => ReactNode;
|
|
1439
1666
|
readonly onSendTemplateToSelected?: (inbox: UseConversationsInboxResult) => void;
|
|
1440
1667
|
/** Destino do link de reentrar no painel, mostrado junto do aviso de sessão expirada. */
|
|
1441
1668
|
readonly signInHref?: string;
|
|
1442
1669
|
readonly className?: string;
|
|
1443
1670
|
}
|
|
1444
|
-
declare function ConversationsWorkspace({ labels: labelsOverride, filters, perPage, markReadOnOpen, serverPaginated, initialConversationId, initialWhatsappNumber, simulator, quickReplies, quickReplyVariablesFor, flowLabelOf, onDownload, requireTakeoverToReply, messageSelection, initialComposerText, contextEntriesOf, onAttach, extraUtilitiesFor, renderFilters, renderBulkActions, renderRow, renderAboveTranscript, renderHeaderActions, onSendTemplateToSelected, signInHref, className, }: ConversationsWorkspaceProps): react.JSX.Element;
|
|
1671
|
+
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;
|
|
1445
1672
|
|
|
1446
1673
|
interface ConversationPaneProps {
|
|
1447
1674
|
readonly conversation: ConversationSummary;
|
|
@@ -1480,11 +1707,30 @@ interface ConversationPaneProps {
|
|
|
1480
1707
|
readonly messageSelection?: boolean;
|
|
1481
1708
|
/** Texto já no campo ao abrir (deep link que sugere a resposta). */
|
|
1482
1709
|
readonly initialComposerText?: string | undefined;
|
|
1483
|
-
/**
|
|
1484
|
-
|
|
1710
|
+
/**
|
|
1711
|
+
* Peça do produto entre o contexto e o transcript (ex.: ficha do lead, resumo do pedido). Recebe o
|
|
1712
|
+
* contexto do fluxo junto: é dele que sai o resumo, e sem isso o host teria de buscá-lo de novo.
|
|
1713
|
+
*/
|
|
1714
|
+
readonly renderAboveTranscript?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => ReactNode;
|
|
1485
1715
|
readonly onAttach?: ((file: File) => Promise<void>) | undefined;
|
|
1716
|
+
/**
|
|
1717
|
+
* `rich` troca o `textarea` pelo campo com a formatação do WhatsApp desenhada enquanto se escreve.
|
|
1718
|
+
* Vale onde o atendente manda texto longo e formatado; para responder "já vou ver" o campo simples
|
|
1719
|
+
* é menos coisa na tela.
|
|
1720
|
+
*/
|
|
1721
|
+
readonly composer?: 'simple' | 'rich';
|
|
1722
|
+
/** Valores que o operador insere sem digitar. Só o composer `rich` os oferece. */
|
|
1723
|
+
readonly composerVariablesFor?: (conversation: ConversationSummary, context: Record<string, unknown> | undefined) => readonly RichComposerVariable[];
|
|
1724
|
+
/**
|
|
1725
|
+
* Fila de anexos com legenda, como no WhatsApp: os arquivos escolhidos ficam visíveis acima da
|
|
1726
|
+
* barra e saem junto com o texto escrito. Ausente, o clipe manda cada arquivo na hora — o que
|
|
1727
|
+
* perde a legenda, e era a diferença entre as telas.
|
|
1728
|
+
*/
|
|
1729
|
+
readonly onSendAttachments?: (files: readonly File[], caption: string) => Promise<void>;
|
|
1730
|
+
/** Grava e envia nota de voz. Ausente, o microfone não aparece. */
|
|
1731
|
+
readonly onRecordAudio?: (file: File) => Promise<void>;
|
|
1486
1732
|
}
|
|
1487
|
-
declare function ConversationPane({ conversation, now, busy, labels, onTakeover, onReturnToBot, onFinish, onBack, extraUtilities, contextEntriesOf, quickReplies, quickReplyVariablesFor, flowLabel, onDownload, requireTakeoverToReply, messageSelection, initialComposerText, renderAboveTranscript, onAttach, }: ConversationPaneProps): react.JSX.Element;
|
|
1733
|
+
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;
|
|
1488
1734
|
|
|
1489
1735
|
interface ConversationsInboxListProps {
|
|
1490
1736
|
readonly inbox: UseConversationsInboxResult;
|
|
@@ -1499,4 +1745,4 @@ interface ConversationsInboxListProps {
|
|
|
1499
1745
|
}
|
|
1500
1746
|
declare function ConversationsInboxList({ inbox, labels, className, renderFilters, renderBulkActions, renderRow, onSendTemplateToSelected, }: ConversationsInboxListProps): react.JSX.Element;
|
|
1501
1747
|
|
|
1502
|
-
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 };
|
|
1748
|
+
export { type AsyncResourceState, AudioPlayer, type AudioPlayerProps, AudioTranscription, type AudioTranscriptionProps, Avatar, type AvatarLabels, type AvatarProps, type BotMessages, type BuildTranscriptTextParams, BulkActionBar, type BulkActionBarProps, 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_DOCUMENTS_WORKSPACE_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, type DocumentsFiltersContext, DocumentsLibrary, type DocumentsLibraryClassNames, type DocumentsLibraryLabels, type DocumentsLibraryProps, DocumentsWorkspace, type DocumentsWorkspaceClassNames, type DocumentsWorkspaceLabels, type DocumentsWorkspaceProps, EMOJI_CATEGORIES, type EmojiCategory, type EmojiEntry, EmojiPicker, type EmojiPickerLabels, type EmojiPickerProps, FileIcon, type FileIconProps, type FilterOption, InteractiveMessage, type InteractiveMessageLabels, type InteractiveMessageProps, InteractivePayload, InteractiveSelection, Lightbox, type LightboxLabels, type LightboxProps, ListConversationsParams, ListDocumentsParams, ListingPagination, type ListingPaginationProps, MessageBubble, type MessageBubbleProps, MessageComposer, type MessageComposerClassNames, type MessageComposerLabels, type MessageComposerProps, MessagePayload, MessageTail, MessageText, type MessageTextProps, MessageTimestamp, MessageTranscription, MessagesWorkspace, type MessagesWorkspaceApi, type MessagesWorkspaceLabels, type MessagesWorkspaceProps, MultiSelectFilter, type MultiSelectFilterProps, 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, type SortDirection, SortableHead, type SortableHeadProps, StatusTicks, type StatusTicksProps, TEMPLATE_SETTINGS_TAB, type TemplateSettings, type TemplateSettingsTab, ToastProvider, type TopicItem, TopicsForm, type TopicsFormLabels, type TopicsFormProps, TranscriptionMode, type TranscriptionSettings, TranscriptionSettingsForm, type TranscriptionSettingsFormLabels, type TranscriptionSettingsFormProps, type UrlStateOptions, 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, useDebouncedValue, useGlobalRealtime, useInboxActions, useIsDarkTheme, useIsNarrow, useScrollToLatestMessage, useToast, useUrlArrayState, useUrlNumberState, useUrlStringState, useWaitingNotifications, waToHTML, waToHTMLInline, windowOf };
|