@credithub/harlan-components 1.39.3 → 1.39.6

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.
@@ -11,15 +11,15 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
11
11
  }
12
12
  return to.concat(ar || Array.prototype.slice.call(from));
13
13
  };
14
- import React from 'react';
14
+ import { useWindowSize } from '../../hooks/useWindowSize';
15
15
  import { Chart, registerables } from 'chart.js';
16
- import CategoriaProtesto from './components/categoryProtestos';
17
- import ResponsiveGrid from '../interface/responsiveGrid';
18
- import PieChart from './components/PieChart';
16
+ import ChartDataLabels from 'chartjs-plugin-datalabels';
17
+ import React from 'react';
19
18
  import styled from 'styled-components';
19
+ import ResponsiveGrid from '../interface/responsiveGrid';
20
+ import CategoriaProtesto from './components/categoryProtestos';
20
21
  import MixedChart from './components/MixedChart';
21
- import ChartDataLabels from 'chartjs-plugin-datalabels';
22
- import { useWindowSize } from '../../hooks/useWindowSize';
22
+ import PieChart from './components/PieChart';
23
23
  Chart.register.apply(Chart, __spreadArray([ChartDataLabels], registerables, false));
24
24
  var Title = styled.h2(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n text-align: left;\n margin-bottom: 20px;\n"], ["\n text-align: left;\n margin-bottom: 20px;\n"])));
25
25
  var getWidth = function (windowWidth, chartType) {
@@ -29,7 +29,7 @@ var getWidth = function (windowWidth, chartType) {
29
29
  }
30
30
  return baseWidth;
31
31
  };
32
- var ChartContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n width: ", ";\n"], ["\n width: ", ";\n"])), function (_a) {
32
+ var ChartContainer = styled.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n width: ", ";\n padding: 30px 0;\n"], ["\n width: ", ";\n padding: 30px 0;\n"])), function (_a) {
33
33
  var windowWidth = _a.windowWidth, chartType = _a.chartType;
34
34
  return getWidth(windowWidth, chartType);
35
35
  });
@@ -10,6 +10,7 @@ import { useMixedChartData } from '../hooks/useMixedChartData';
10
10
  var TimeFilterButton = styled.button(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n padding: 8px 16px;\n margin-right: 5px;\n background-color: #f0f0f0;\n border: 1px solid #ccc;\n border-radius: 8px;\n cursor: pointer;\n width: 100px;\n min-width: 100px;\n text-align: center;\n\n ", "\n\n &:hover {\n background-color: #007af2;\n color: white;\n }\n\n @media print {\n display: none !important;\n }\n"], ["\n padding: 8px 16px;\n margin-right: 5px;\n background-color: #f0f0f0;\n border: 1px solid #ccc;\n border-radius: 8px;\n cursor: pointer;\n width: 100px;\n min-width: 100px;\n text-align: center;\n\n ", "\n\n &:hover {\n background-color: #007af2;\n color: white;\n }\n\n @media print {\n display: none !important;\n }\n"])), function (props) {
11
11
  return props.isActive && css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n background-color: #007af2;\n color: white;\n border-color: #007af2;\n "], ["\n background-color: #007af2;\n color: white;\n border-color: #007af2;\n "])));
12
12
  });
13
+ var ContainerMixedChart = styled.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n padding: 24px 0;\n"], ["\n padding: 24px 0;\n"])));
13
14
  var hasNonZeroDataForPeriod = function (data, months) {
14
15
  var now = new Date();
15
16
  var dateLimit = subMonths(now, months);
@@ -38,7 +39,7 @@ var MixedChart = function (_a) {
38
39
  ? 'bar'
39
40
  : 'line';
40
41
  return (React.createElement("div", null,
41
- React.createElement("div", null, ['all', '1y', '6m', '1m'].map(function (filter) { return (React.createElement(TimeFilterButton, { key: filter, onClick: function () { return setTimeFilter(filter); }, isActive: timeFilter === filter }, filter === 'all'
42
+ React.createElement(ContainerMixedChart, null, ['all', '1y', '6m', '1m'].map(function (filter) { return (React.createElement(TimeFilterButton, { key: filter, onClick: function () { return setTimeFilter(filter); }, isActive: timeFilter === filter }, filter === 'all'
42
43
  ? 'All'
43
44
  : filter === '1y'
44
45
  ? '1 Ano'
@@ -48,4 +49,4 @@ var MixedChart = function (_a) {
48
49
  React.createElement(Chart, { className: "mixed-chart", type: chartType, data: data, options: options })));
49
50
  };
50
51
  export default MixedChart;
51
- var templateObject_1, templateObject_2;
52
+ var templateObject_1, templateObject_2, templateObject_3;
@@ -75,8 +75,8 @@ var useChartData = function (documento) {
75
75
  ctxProtestos === null || ctxProtestos === void 0 ? void 0 : ctxProtestos.type,
76
76
  ctxCCF === null || ctxCCF === void 0 ? void 0 : ctxCCF.type,
77
77
  ctxProcessosJuridicos === null || ctxProcessosJuridicos === void 0 ? void 0 : ctxProcessosJuridicos.type
78
- ].every(function (status) { return status !== RequestStatus.Loading; });
79
- }, [ctxProtestos, ctxCCF, ctxProcessosJuridicos]);
78
+ ].every(function (status) { return status !== RequestStatus.Loading && status != RequestStatus.Empty; });
79
+ }, [ctxProtestos === null || ctxProtestos === void 0 ? void 0 : ctxProtestos.type, ctxCCF === null || ctxCCF === void 0 ? void 0 : ctxCCF.type, ctxProcessosJuridicos === null || ctxProcessosJuridicos === void 0 ? void 0 : ctxProcessosJuridicos.type]);
80
80
  var dadosProtestos = useMemo(function () {
81
81
  if ((ctxProtestos === null || ctxProtestos === void 0 ? void 0 : ctxProtestos.type) === RequestStatus.Success && ctxProtestos.document) {
82
82
  return processProtestData(ctxProtestos.document);
@@ -1,25 +1,6 @@
1
1
  export declare function flattenData(data: any): string;
2
2
  export declare const selectRelevantData: (data: any, documento: string) => {
3
- documento: string;
4
- protestos: any;
5
- ultimoRegistroCCF: any;
6
- ccf: any;
7
- dividasPublicas: any;
8
- processosJuridicos: any;
9
- bankAccounts: any;
10
- ccfData: any;
11
- divida: any;
12
- dossie: any;
13
- imoveis: any;
14
- liminar: any;
15
- partners: any;
16
- pepData: any;
17
- processosJuridicosData: any;
18
- protestosData: any;
19
- reclameAqui: any;
20
- refinBoaVista: any;
21
- refinSerasa: any;
22
- scoreData: any;
23
- scr: any;
24
- veiculos: any;
3
+ dadosFiltrados: {
4
+ [k: string]: any;
5
+ };
25
6
  };
@@ -15,29 +15,40 @@ export function flattenData(data) {
15
15
  return safeStringify(flattened);
16
16
  }
17
17
  export var selectRelevantData = function (data, documento) {
18
- var protestos = data.protestos, ultimoRegistroCCF = data.ultimoRegistroCCF, ccf = data.ccf, dividasPublicas = data.dividasPublicas, processosJuridicos = data.processosJuridicos, bankAccounts = data.bankAccounts, ccfData = data.ccfData, divida = data.divida, dossie = data.dossie, imoveis = data.imoveis, liminar = data.liminar, partners = data.partners, pepData = data.pepData, processosJuridicosData = data.processosJuridicosData, protestosData = data.protestosData, reclameAqui = data.reclameAqui, refinBoaVista = data.refinBoaVista, refinSerasa = data.refinSerasa, scoreData = data.scoreData, scr = data.scr, veiculos = data.veiculos;
19
- return {
20
- documento: documento,
21
- protestos: protestos,
22
- ultimoRegistroCCF: ultimoRegistroCCF,
23
- ccf: ccf,
18
+ var _a = data || {}, protestosDeCredito = _a.protestos, chequesSemFundo = _a.ccf, dividasPublicas = _a.dividasPublicas, processosJuridicos = _a.processosJuridicos, contasBancarias = _a.bankAccounts, dadosDeChequesSemFundo = _a.ccfData, dividas = _a.divida, _b = _a.dossie, perfilDaEmpresa = _b.carousel, resumoDaEmpresa = _b.summary, liminar = _a.liminar, socios = _a.partners, dadosPessoasExpostasPoliticamente = _a.pepData, detalhesProcessosJuridicos = _a.processosJuridicosData, detalhesDosProtestos = _a.protestosData, dadosReclameAqui = _a.reclameAqui, relatoriosRefinBoaVista = _a.refinBoaVista, relatoriosRefinSerasa = _a.refinSerasa, dadosScore = _a.scoreData, relatoriosSCR = _a.scr, registrosDeVeiculos = _a.veiculos;
19
+ var liminarResult = liminar && liminar.totalProtestos === 'NADA CONSTA'
20
+ ? 'Liminar para esconder protestos'
21
+ : liminar
22
+ ? 'TEM LIMINAR'
23
+ : undefined;
24
+ var dadosOrganizados = {
25
+ documento: documento || undefined,
26
+ protestosDeCredito: protestosDeCredito,
27
+ chequesSemFundo: chequesSemFundo,
24
28
  dividasPublicas: dividasPublicas,
25
29
  processosJuridicos: processosJuridicos,
26
- bankAccounts: bankAccounts,
27
- ccfData: ccfData,
28
- divida: divida,
29
- dossie: dossie,
30
- imoveis: imoveis,
31
- liminar: liminar,
32
- partners: partners,
33
- pepData: pepData,
34
- processosJuridicosData: processosJuridicosData,
35
- protestosData: protestosData,
36
- reclameAqui: reclameAqui,
37
- refinBoaVista: refinBoaVista,
38
- refinSerasa: refinSerasa,
39
- scoreData: scoreData,
40
- scr: scr,
41
- veiculos: veiculos
30
+ contasBancarias: contasBancarias,
31
+ dadosDeChequesSemFundo: dadosDeChequesSemFundo,
32
+ dividas: dividas,
33
+ perfilDaEmpresa: perfilDaEmpresa,
34
+ resumoDaEmpresa: resumoDaEmpresa,
35
+ liminar: liminarResult,
36
+ socios: socios,
37
+ dadosPessoasExpostasPoliticamente: dadosPessoasExpostasPoliticamente,
38
+ detalhesProcessosJuridicos: detalhesProcessosJuridicos,
39
+ detalhesDosProtestos: detalhesDosProtestos,
40
+ dadosReclameAqui: dadosReclameAqui,
41
+ relatoriosRefinBoaVista: relatoriosRefinBoaVista,
42
+ relatoriosRefinSerasa: relatoriosRefinSerasa,
43
+ dadosScore: dadosScore,
44
+ relatoriosSCR: relatoriosSCR,
45
+ registrosDeVeiculos: registrosDeVeiculos
46
+ };
47
+ var dadosFiltrados = Object.fromEntries(Object.entries(dadosOrganizados).filter(function (_a) {
48
+ var _ = _a[0], valor = _a[1];
49
+ return valor !== undefined;
50
+ }));
51
+ return {
52
+ dadosFiltrados: dadosFiltrados
42
53
  };
43
54
  };
@@ -30,6 +30,7 @@ import { useStreamQuery } from '../../../components/streamQuery';
30
30
  import { useGlobalData } from '../../../contexts/globalDataContext';
31
31
  import useToggle from '../../../hooks/useToggle';
32
32
  import React, { useEffect, useMemo, useRef, useState } from 'react';
33
+ import ReactMarkdown from 'react-markdown';
33
34
  import { flattenData, selectRelevantData } from './dataUtils';
34
35
  import { createQueryAndMessages } from './queryUtils';
35
36
  import { BetaTag, ChatInput, ChatInputContainer, Container, ContainerInput, Header, HeaderContent, InitialMessageBox, InitialMessageContent, LoadingDots, Message, MessageHistory, SendButton, Title } from './styles';
@@ -125,20 +126,26 @@ var Llama = function (_a) {
125
126
  }
126
127
  };
127
128
  useEffect(function () {
128
- if (globalData && documento && !hasMadeInitialRequest) {
129
- try {
130
- var relevantData = selectRelevantData(globalData, documento);
131
- var serialized = flattenData(relevantData);
132
- setSerializedData(serialized);
133
- setQueryEnabled(true);
134
- setHasMadeInitialRequest(true);
135
- }
136
- catch (error) {
137
- console.error('Erro ao preparar os dados para a API:', error);
138
- setSerializedData('{}');
139
- setQueryEnabled(false);
140
- }
129
+ var timeoutId;
130
+ if (globalData && documento) {
131
+ timeoutId = setTimeout(function () {
132
+ try {
133
+ var relevantData = selectRelevantData(globalData, documento);
134
+ var serialized = flattenData(relevantData);
135
+ setSerializedData(serialized);
136
+ setQueryEnabled(true);
137
+ setHasMadeInitialRequest(true);
138
+ }
139
+ catch (error) {
140
+ console.error('Erro ao preparar os dados para a API:', error);
141
+ setSerializedData('{}');
142
+ setQueryEnabled(false);
143
+ }
144
+ }, 3000);
141
145
  }
146
+ return function () {
147
+ clearTimeout(timeoutId);
148
+ };
142
149
  }, [documento, globalData, hasMadeInitialRequest]);
143
150
  var queryData = useMemo(function () {
144
151
  if (!queryEnabled || !serializedData || serializedData === '{}')
@@ -229,7 +236,7 @@ var Llama = function (_a) {
229
236
  currentMessageIndex === 0 &&
230
237
  !((_b = messageHistory[0]) === null || _b === void 0 ? void 0 : _b.content) ? (React.createElement(LoadingDots, null)) : shouldStartTyping &&
231
238
  isTyping &&
232
- currentMessageIndex === 0 ? (typingMessage) : ((_c = messageHistory[0]) === null || _c === void 0 ? void 0 : _c.content))),
239
+ currentMessageIndex === 0 ? (typingMessage) : (React.createElement(ReactMarkdown, null, ((_c = messageHistory[0]) === null || _c === void 0 ? void 0 : _c.content) || '')))),
233
240
  React.createElement("div", { className: "additional-message" },
234
241
  React.createElement("p", null, "Voc\u00EA pode fazer perguntas como:"),
235
242
  React.createElement("p", { className: "blue-text" }, "\u00C9 seguro oferecer um cr\u00E9dito de R$ 15.000,00 a uma taxa de juros de 3% em 12x?")),
@@ -242,7 +249,8 @@ var Llama = function (_a) {
242
249
  .map(function (msg, index) { return (React.createElement(Message, { key: index + 1, role: msg.role },
243
250
  React.createElement("div", { className: "icon-and-message" },
244
251
  msg.role === 'user' ? (React.createElement(Person, { size: 18 })) : (React.createElement(Credithub, { size: 18, className: "initial-icon" })),
245
- React.createElement("span", null, msg.content)))); }),
252
+ React.createElement("span", null,
253
+ React.createElement(ReactMarkdown, null, msg.content))))); }),
246
254
  isLoading && ((_d = messageHistory[0]) === null || _d === void 0 ? void 0 : _d.content) !== undefined ? (React.createElement(Message, { role: "assistant" },
247
255
  React.createElement("div", { className: "icon-and-message" },
248
256
  React.createElement(Credithub, { size: 18, className: "initial-icon" }),
@@ -250,7 +258,8 @@ var Llama = function (_a) {
250
258
  React.createElement(LoadingDots, null))))) : shouldStartTyping && isTyping && currentMessageIndex > 0 ? (React.createElement(Message, { role: "assistant" },
251
259
  React.createElement("div", { className: "icon-and-message" },
252
260
  React.createElement(Credithub, { size: 18, className: "initial-icon" }),
253
- React.createElement("span", null, typingMessage)))) : null)),
261
+ React.createElement("span", null,
262
+ React.createElement(ReactMarkdown, null, typingMessage))))) : null)),
254
263
  React.createElement(ContainerInput, null,
255
264
  React.createElement(ChatInputContainer, null,
256
265
  React.createElement(ChatInput, { type: "text", placeholder: "Digite o que deseja saber sobre esse dossi\u00EA", value: userInput, onChange: function (e) { return setUserInput(e.target.value); }, onKeyPress: handleKeyPress, disabled: isProcessing || isTyping }),
@@ -7,16 +7,17 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
7
7
  }
8
8
  return to.concat(ar || Array.prototype.slice.call(from));
9
9
  };
10
+ import { stringify } from 'yaml';
10
11
  /* eslint-disable @typescript-eslint/no-explicit-any */
11
12
  export var createQueryAndMessages = function (relevantData, messageHistory, extraMessage) {
12
13
  var baseMessages = __spreadArray([
13
14
  {
14
15
  role: 'system',
15
- content: "\n Voc\u00EA \u00E9 NostraCredit, um analista de cr\u00E9dito de intelig\u00EAncia artificial do CreditHub, o bureau de cr\u00E9dito especializado em an\u00E1lise de cr\u00E9dito no Brasil. Sua miss\u00E3o \u00E9 ajudar os analistas de ind\u00FAstrias e financeiras a tomarem decis\u00F5es mais informadas e seguras, analisando dossi\u00EAs e destacando informa\u00E7\u00F5es relevantes que afetariam o recebimento de vendas futuras. Ao receber as condi\u00E7\u00F5es de venda e os dados de um dossi\u00EA, voc\u00EA deve:\n Identificar informa\u00E7\u00F5es chave que possam influenciar negativamente a decis\u00E3o de cr\u00E9dito (por exemplo, hist\u00F3rico financeiro, renda, d\u00EDvidas p\u00FAblicas, score de cr\u00E9dito, protestos, a exist\u00EAncia de liminar, cadastro de cheques sem fundos, processos judiciais etc.) e calcular o poder de compra de acordo ao risco que elas apresentam:\n Protestos representam atrasos em pagamento na data especificada.\n Cheques sem fundo (CCF) representam falta de saldo em conta na data especificada.\n D\u00EDvidas Publicas representam impostos que n\u00E3o foram pagos na data especificada.\n Liminar representa oculta\u00E7\u00E3o de negativa\u00E7\u00F5es e um risco elevado por limitar os dados recebidos.\n Processos judiciais representam conflitos n\u00E3o resolvidos que dever\u00E3o ser representados obrigatoriamente.\n Sugerir insights sobre taxas de juros, condi\u00E7\u00F5es de pagamento e poss\u00EDveis riscos associados ao cliente, com base nas informa\u00E7\u00F5es fornecidas.\n Fazer perguntas complementares se notar que informa\u00E7\u00F5es cruciais est\u00E3o faltando, para garantir uma an\u00E1lise mais assertiva e completa.\n Oferecer recomenda\u00E7\u00F5es e insights sempre deixando claro que essa \u00E9 a sua opini\u00E3o como assistente do CreditHub, n\u00E3o uma decis\u00E3o final. Seu foco \u00E9 auxiliar o agente de cr\u00E9dito a tomar decis\u00F5es mais embasadas, fornecendo informa\u00E7\u00F5es \u00FAteis e estimulando o questionamento cr\u00EDtico, assegurando que todas as vari\u00E1veis relevantes sejam consideradas antes da decis\u00E3o final.\n Resumir, em uma curta senten\u00E7a, a recomenda\u00E7\u00E3o final citando a taxa de juros calculada de acordo aos riscos apresentados, levando em conta o valor total da venda/antecipa\u00E7\u00E3o e a quantidade de parcelas que ser\u00E3o pagas futuramente.\n "
16
+ content: "\n Voc\u00EA \u00E9 NostraCredit, um assistente de an\u00E1lise de cr\u00E9dito do CreditHub, especializado em fornecer insights para decis\u00F5es de cr\u00E9dito no Brasil. Sua fun\u00E7\u00E3o \u00E9 analisar dossi\u00EAs de cr\u00E9dito e destacar informa\u00E7\u00F5es que possam influenciar negativamente a concess\u00E3o de cr\u00E9dito, como:\n\n - Protestos (atrasos em pagamentos).\n - Cheques sem fundo (CCF).\n - D\u00EDvidas p\u00FAblicas (impostos n\u00E3o pagos).\n - Liminares (que ocultam informa\u00E7\u00F5es de risco).\n - Processos judiciais (conflitos pendentes).\n\n Sua resposta deve incluir:\n 1. Uma an\u00E1lise clara dos principais fatores de risco, priorizando processos judiciais e protestos.\n 2. Sugest\u00F5es sobre taxas de juros e condi\u00E7\u00F5es de pagamento, conforme o risco identificado.\n 3. Recomenda\u00E7\u00E3o final resumida, incluindo uma taxa de juros com base no risco.\n\n **Mantenha suas respostas diretas, objetivas e formatadas em portugu\u00EAs simples, sem jarg\u00F5es t\u00E9cnicos, nomes de chaves do YAML ou men\u00E7\u00E3o a IDs ou identificadores de qualquer tipo (ex.: n\u00FAmeros de documentos ou chaves t\u00E9cnicas). Evite qualquer refer\u00EAncia a valores booleanos ou irrelevantes. Use descri\u00E7\u00F5es amig\u00E1veis e compreens\u00EDveis.**\n Caso informa\u00E7\u00F5es essenciais estejam faltando, fa\u00E7a perguntas para garantir uma an\u00E1lise completa. Responda como um especialista acess\u00EDvel, auxiliando na tomada de decis\u00E3o de cr\u00E9dito.\n "
16
17
  },
17
18
  {
18
19
  role: 'user',
19
- content: "\n Esse dossi\u00EA inclui informa\u00E7\u00F5es financeiras e jur\u00EDdicas importantes. Sua tarefa \u00E9:\n 1. Informar se h\u00E1 protestos, processos judiciais ou outros problemas financeiros.\n 2. Priorizar informa\u00E7\u00F5es sobre processos judiciais, caso existam, e em seguida mencionar protestos.\n 3. N\u00E3o repetir informa\u00E7\u00F5es irrelevantes como valores ou detalhes n\u00E3o essenciais.\n 4. Manter o resumo curto, focando apenas em pontos cr\u00EDticos para a an\u00E1lise de cr\u00E9dito, com no m\u00E1ximo 150 caracteres.\n\n Aqui est\u00E3o os dados da empresa: ".concat(relevantData, ".\n\n Responda em portugu\u00EAs de forma objetiva, com foco em informa\u00E7\u00F5es cr\u00EDticas e evitando linguagem t\u00E9cnica.\n Construa a resposta com a seguinte estrutura: \"Esse dossi\u00EA tem alguns problemas com processos judiciais relacionados a cr\u00E9dito e trabalhistas,\n bem como protestos. Tenha cuidado.\"\n Seja bem sucinto e objetivo, a ideia \u00E9 apenas destacar qualitativamente o dossi\u00EA apresentado.\n ").concat(extraMessage || '', "\n ")
20
+ content: "\n Analisar o dossi\u00EA da seguinte empresa:\n```yaml\n".concat(stringify(JSON.parse(relevantData)), "\n```\n\n 1. Identifique os protestos, processos judiciais e outros problemas financeiros da empresa, e os descreva com termos claros, como \"valor financeiro\" ou \"pend\u00EAncia judicial\", sem mencionar nomes t\u00E9cnicos, IDs, chaves ou valores booleanos.\n 2. Descreva os processos judiciais e protestos em termos simples, utilizando frases como \"protesto registrado\" ou \"processo judicial ativo\", garantindo que a linguagem seja compreens\u00EDvel para um usu\u00E1rio comum.\n 3. Resuma os pontos cr\u00EDticos de forma objetiva, explicando como esses fatores podem impactar a decis\u00E3o de cr\u00E9dito. Enfatize o risco que eles representam para a empresa.\n 4. Responda com uma recomenda\u00E7\u00E3o final objetiva, propondo uma taxa de juros ou condi\u00E7\u00F5es espec\u00EDficas com base no risco identificado, como garantias adicionais ou prazos diferenciados.\n\n **Responda sempre em portugu\u00EAs claro e evite mencionar qualquer nome de campo do YAML, IDs ou n\u00FAmeros de documentos nas suas respostas. Certifique-se de eliminar qualquer dado n\u00E3o intelig\u00EDvel ou irrelevante, como valores booleanos.**\n\n ").concat(extraMessage || '', "\n ")
20
21
  }
21
22
  ], messageHistory, true);
22
23
  return {
@@ -7,7 +7,7 @@ export var BetaTag = styled.span(templateObject_1 || (templateObject_1 = __makeT
7
7
  export var dotFlashing = keyframes(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n 0% {\n opacity: 1;\n }\n 50%,\n 100% {\n opacity: 0;\n }\n"], ["\n 0% {\n opacity: 1;\n }\n 50%,\n 100% {\n opacity: 0;\n }\n"])));
8
8
  export var LoadingDots = styled.span(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n &::after {\n content: '...';\n animation: ", " 1.2s infinite steps(3, end);\n display: inline-block;\n width: 1em;\n text-align: left;\n }\n"], ["\n &::after {\n content: '...';\n animation: ", " 1.2s infinite steps(3, end);\n display: inline-block;\n width: 1em;\n text-align: left;\n }\n"])), dotFlashing);
9
9
  export var InitialMessageBox = styled.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n width: 95%;\n"], ["\n padding: 20px;\n border-radius: 8px;\n margin-bottom: 20px;\n width: 95%;\n"])));
10
- export var InitialMessageContent = styled.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n font-size: 1rem;\n line-height: 1.5;\n padding: 20px 56px;\n display: flex;\n flex-direction: column;\n\n .icon-and-text {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n }\n\n svg.initial-icon {\n width: 18px;\n height: 18px;\n margin-right: 8px;\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n .additional-message {\n margin-top: 16px;\n padding-left: 26px;\n\n p {\n margin: 0;\n }\n\n .blue-text {\n color: ", ";\n font-weight: bold;\n }\n }\n\n .final-message {\n margin-top: 16px;\n display: flex;\n align-items: center;\n color: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n\n svg {\n margin-right: 8px;\n }\n\n p {\n margin: 0;\n }\n }\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n padding: 10px 20px;\n\n .additional-message {\n padding-left: 20px;\n }\n }\n"], ["\n font-size: 1rem;\n line-height: 1.5;\n padding: 20px 56px;\n display: flex;\n flex-direction: column;\n\n .icon-and-text {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n }\n\n svg.initial-icon {\n width: 18px;\n height: 18px;\n margin-right: 8px;\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n .additional-message {\n margin-top: 16px;\n padding-left: 26px;\n\n p {\n margin: 0;\n }\n\n .blue-text {\n color: ", ";\n font-weight: bold;\n }\n }\n\n .final-message {\n margin-top: 16px;\n display: flex;\n align-items: center;\n color: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n\n svg {\n margin-right: 8px;\n }\n\n p {\n margin: 0;\n }\n }\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n padding: 10px 20px;\n\n .additional-message {\n padding-left: 20px;\n }\n }\n"])), function (_a) {
10
+ export var InitialMessageContent = styled.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n font-size: 1rem;\n line-height: 1.5;\n padding: 20px 56px;\n display: flex;\n flex-direction: column;\n\n .icon-and-text {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n\n span p:first-child {\n margin-top: 0;\n margin-bottom: -8px;\n margin-left: 8px;\n display: inline-block;\n }\n }\n\n svg.initial-icon {\n width: 18px;\n height: 18px;\n margin-right: 8px;\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n .additional-message {\n margin-top: 16px;\n padding-left: 26px;\n\n p {\n margin: 0;\n }\n\n .blue-text {\n color: ", ";\n font-weight: bold;\n }\n }\n\n .final-message {\n margin-top: 16px;\n display: flex;\n align-items: center;\n color: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n\n svg {\n margin-right: 8px;\n }\n\n p {\n margin: 0;\n }\n }\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n padding: 10px 20px;\n\n .additional-message {\n padding-left: 20px;\n }\n }\n"], ["\n font-size: 1rem;\n line-height: 1.5;\n padding: 20px 56px;\n display: flex;\n flex-direction: column;\n\n .icon-and-text {\n display: flex;\n align-items: flex-start;\n margin-bottom: 16px;\n\n span p:first-child {\n margin-top: 0;\n margin-bottom: -8px;\n margin-left: 8px;\n display: inline-block;\n }\n }\n\n svg.initial-icon {\n width: 18px;\n height: 18px;\n margin-right: 8px;\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n .additional-message {\n margin-top: 16px;\n padding-left: 26px;\n\n p {\n margin: 0;\n }\n\n .blue-text {\n color: ", ";\n font-weight: bold;\n }\n }\n\n .final-message {\n margin-top: 16px;\n display: flex;\n align-items: center;\n color: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n\n svg {\n margin-right: 8px;\n }\n\n p {\n margin: 0;\n }\n }\n\n @media (max-width: 768px) {\n font-size: 0.9rem;\n padding: 10px 20px;\n\n .additional-message {\n padding-left: 20px;\n }\n }\n"])), function (_a) {
11
11
  var theme = _a.theme;
12
12
  return theme.colors.azulCredithub;
13
13
  }, function (_a) {
@@ -37,7 +37,7 @@ export var MessageHistory = styled.div(templateObject_10 || (templateObject_10 =
37
37
  var theme = _a.theme;
38
38
  return theme.colors.cinzaBackground;
39
39
  });
40
- export var Message = styled.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: flex;\n align-items: flex-start;\n padding: 10px 15px;\n margin: 10px 0;\n max-width: 90%;\n border-radius: 16px;\n word-wrap: break-word;\n background-color: ", ";\n color: ", ";\n align-self: ", ";\n text-align: ", ";\n overflow-y: auto;\n opacity: 0;\n transform: translateY(20px);\n animation: fadeIn 0.5s ease-out forwards;\n\n .icon-and-message {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n svg {\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n span {\n font-size: 1rem;\n line-height: 1.5;\n }\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n max-width: 80%;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n"], ["\n display: flex;\n align-items: flex-start;\n padding: 10px 15px;\n margin: 10px 0;\n max-width: 90%;\n border-radius: 16px;\n word-wrap: break-word;\n background-color: ", ";\n color: ", ";\n align-self: ", ";\n text-align: ", ";\n overflow-y: auto;\n opacity: 0;\n transform: translateY(20px);\n animation: fadeIn 0.5s ease-out forwards;\n\n .icon-and-message {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n }\n\n svg {\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n span {\n font-size: 1rem;\n line-height: 1.5;\n }\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n max-width: 80%;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n"])), function (_a) {
40
+ export var Message = styled.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n display: flex;\n align-items: flex-start;\n padding: 10px 15px;\n margin: 10px 0;\n max-width: 90%;\n border-radius: 16px;\n word-wrap: break-word;\n background-color: ", ";\n color: ", ";\n align-self: ", ";\n text-align: ", ";\n overflow-y: auto;\n opacity: 0;\n transform: translateY(20px);\n animation: fadeIn 0.5s ease-out forwards;\n\n .icon-and-message {\n display: flex;\n align-items: center;\n gap: 8px;\n\n span p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n margin-left: 0;\n display: inline-block;\n }\n }\n\n svg {\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n span {\n font-size: 1rem;\n line-height: 1.5;\n }\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n max-width: 80%;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n"], ["\n display: flex;\n align-items: flex-start;\n padding: 10px 15px;\n margin: 10px 0;\n max-width: 90%;\n border-radius: 16px;\n word-wrap: break-word;\n background-color: ", ";\n color: ", ";\n align-self: ", ";\n text-align: ", ";\n overflow-y: auto;\n opacity: 0;\n transform: translateY(20px);\n animation: fadeIn 0.5s ease-out forwards;\n\n .icon-and-message {\n display: flex;\n align-items: center;\n gap: 8px;\n\n span p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n margin-left: 0;\n display: inline-block;\n }\n }\n\n svg {\n flex-shrink: 0;\n align-self: flex-start;\n }\n\n span {\n font-size: 1rem;\n line-height: 1.5;\n }\n\n @media (max-width: 768px) {\n padding: 8px;\n margin: 8px 0;\n max-width: 80%;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n"])), function (_a) {
41
41
  var theme = _a.theme;
42
42
  return theme.colors.white;
43
43
  }, function (_a) {
@@ -62,7 +62,7 @@ export var SendButton = styled.button(templateObject_14 || (templateObject_14 =
62
62
  var theme = _a.theme;
63
63
  return theme.colors.azulApoio;
64
64
  });
65
- export var ContainerInput = styled.div(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"], ["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n"])), function (_a) {
65
+ export var ContainerInput = styled.div(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n\n @media print {\n display: none;\n }\n"], ["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n background-color: ", ";\n width: 100%;\n max-width: 820px;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n padding: 10px;\n max-width: 100%;\n }\n\n @media print {\n display: none;\n }\n"])), function (_a) {
66
66
  var theme = _a.theme;
67
67
  return theme.colors.white;
68
68
  });
@@ -34,7 +34,6 @@ export function useStreamQuery(query, data, enabled) {
34
34
  setIsLoading(false);
35
35
  });
36
36
  streamReader.on('end', function () {
37
- console.log('Fim do stream');
38
37
  setIsLoading(false);
39
38
  });
40
39
  })