@synchat/webchat 0.0.24 → 0.0.26

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/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/synchat-br/synchat-webchat/main/docs/synchat-logo.svg" alt="Synchat" width="280" />
2
+ <img src="https://synchat.com.br/assets/synchat-logo-CrEzWHdF.png" alt="Synchat" width="280" />
3
3
  </p>
4
4
 
5
5
  # @synchat/webchat
@@ -68,7 +68,6 @@ function App() {
68
68
  ```
69
69
 
70
70
  - **token:** valor exibido ao criar o canal WebChat no portal (obrigatório).
71
- - **apiBaseUrl:** opcional. Se não informado, usa `https://api.synchat.com.br`. Só informe se sua API estiver em outra URL.
72
71
  - **primaryColor:** opcional. Cor do botão flutuante e do bloco "fora do horário". Padrão: cor Synchat (`#0D9488`). Ex.: `primaryColor="#007bff"` para azul.
73
72
 
74
73
  O widget exibe um **botão flutuante** no canto inferior direito. Ao clicar:
@@ -79,19 +78,6 @@ O widget exibe um **botão flutuante** no canto inferior direito. Ao clicar:
79
78
 
80
79
  ---
81
80
 
82
- ## Mesmo WebSocket por negócio (businessId)
83
-
84
- O WebSocket da Synchat é **único por negócio**: `/ws/business/{businessId}`. Tanto o portal quanto o widget do webchat conectam no mesmo endpoint usando o `businessId`.
85
-
86
- A configuração do canal (retornada por `GET /channel/webchat/{token}`) inclui **businessId**. Assim, quem tem apenas o token do webchat pode:
87
- 1. Chamar a API para obter a config (nome, status, horário, **businessId**).
88
- 2. Conectar no mesmo WebSocket: `ws://.../ws/business/{businessId}`.
89
- 3. Enviar/receber mensagens tipadas (ex.: `type: "webchat"` ou `type: "whatsapp"`) no mesmo canal.
90
-
91
- O componente recebe a config (com `businessId`) após o fetch; em `onStartChat` você pode usar `config.businessId` para abrir a conexão WebSocket se estiver guardando a config no estado.
92
-
93
- ---
94
-
95
81
  ## Início da conversa (WebSocket)
96
82
 
97
83
  O **início da conversa** não é feito por API; será feito via **WebSocket**. Por isso, o componente espera que você implemente o callback **onStartChat** e, nele, conecte ao WebSocket da Synchat e envie os dados do visitante.
@@ -120,7 +106,6 @@ Se **onStartChat** não for passado, o widget exibe uma mensagem orientando a co
120
106
  | Prop | Tipo | Obrigatório | Descrição |
121
107
  |-----------------|----------|-------------|-----------|
122
108
  | **token** | `string` | Sim | Token do canal WebChat (portal → Canais → criar WebChat → copiar token). |
123
- | **apiBaseUrl** | `string` | Não | URL base da API. Padrão: `https://api.synchat.com.br`. Só informe se a API estiver em outra URL. |
124
109
  | **primaryColor**| `string` | Não | Cor do botão flutuante e do bloco "fora do horário". Padrão: cor Synchat (`#0D9488`). Aceita hex (ex.: `#007bff`) ou valor CSS. |
125
110
  | **onStartChat** | `(data) => void \| Promise<void>` | Não | Callback ao clicar em "Iniciar chat". Recebe `{ name, email, phone, message, businessId? }`. Implemente aqui a conexão WebSocket. |
126
111
  | **outOfHoursMessage** | `string` | Não | Mensagem customizada quando estiver fora do horário. Se não informado, usa o texto padrão com o horário configurado no canal. |
@@ -160,24 +145,6 @@ Se a API estiver em outra URL, passe `apiBaseUrl`. Para customizar a cor do bot
160
145
 
161
146
  ---
162
147
 
163
- ## Pacote com URL da API fixa
164
-
165
- Se você **distribuir um build** do widget com a URL da API já embutida (para o cliente não precisar informar `apiBaseUrl`), faça o build do pacote com a variável de ambiente **SYNCHAT_API_URL**:
166
-
167
- ```bash
168
- SYNCHAT_API_URL=https://api.synchat.com.br npm run build
169
- ```
170
-
171
- Ou, para um ambiente próprio:
172
-
173
- ```bash
174
- SYNCHAT_API_URL=https://api.empresa.com/synchat npm run build
175
- ```
176
-
177
- O valor é injetado no código no momento do build. O cliente que instalar esse pacote (ou usar o bundle gerado) não precisa passar `apiBaseUrl` — o padrão será a URL que você definiu no build.
178
-
179
- ---
180
-
181
148
  ## Resumo do fluxo
182
149
 
183
150
  1. **Cadastro:** [portal.synchat.com.br](https://portal.synchat.com.br) → Cadastre-se.
package/dist/index.d.mts CHANGED
@@ -24,7 +24,6 @@ interface WebChatSchedule {
24
24
  weekendEnd?: string;
25
25
  }
26
26
  interface WebChatConfig {
27
- /** Business ID; use it to connect to the same WebSocket as the portal: ws://.../ws/business/{businessId} */
28
27
  businessId: string;
29
28
  name: string;
30
29
  status: string;
@@ -33,20 +32,8 @@ interface WebChatConfig {
33
32
  sendToQueueWhenInactive?: boolean;
34
33
  }
35
34
  interface WebChatProps {
36
- /** Channel token (from portal when creating webchat channel). */
37
35
  token: string;
38
- /**
39
- * Base URL of the Synchat API.
40
- * Opcional: se não informado, usa o padrão (https://api.synchat.com.br).
41
- * Em builds do pacote, a URL padrão pode ser fixada via SYNCHAT_API_URL (veja README).
42
- */
43
- apiBaseUrl?: string;
44
- /**
45
- * Cor principal do botão flutuante e do bloco "fora do horário" (ex.: "#0D9488").
46
- * Se não informado, usa a cor padrão da Synchat.
47
- */
48
36
  primaryColor?: string;
49
- /** Called when user clicks "Iniciar chat". The app should connect via WebSocket and send the message. businessId is provided so you can connect to /ws/business/{businessId}. */
50
37
  onStartChat?: (data: {
51
38
  name: string;
52
39
  email: string;
@@ -54,7 +41,6 @@ interface WebChatProps {
54
41
  message: string;
55
42
  businessId?: string;
56
43
  }) => void | Promise<void>;
57
- /** Optional: custom out-of-hours message. If not set, uses schedule from config. */
58
44
  outOfHoursMessage?: string;
59
45
  }
60
46
  interface WebChatFormData {
package/dist/index.d.ts CHANGED
@@ -24,7 +24,6 @@ interface WebChatSchedule {
24
24
  weekendEnd?: string;
25
25
  }
26
26
  interface WebChatConfig {
27
- /** Business ID; use it to connect to the same WebSocket as the portal: ws://.../ws/business/{businessId} */
28
27
  businessId: string;
29
28
  name: string;
30
29
  status: string;
@@ -33,20 +32,8 @@ interface WebChatConfig {
33
32
  sendToQueueWhenInactive?: boolean;
34
33
  }
35
34
  interface WebChatProps {
36
- /** Channel token (from portal when creating webchat channel). */
37
35
  token: string;
38
- /**
39
- * Base URL of the Synchat API.
40
- * Opcional: se não informado, usa o padrão (https://api.synchat.com.br).
41
- * Em builds do pacote, a URL padrão pode ser fixada via SYNCHAT_API_URL (veja README).
42
- */
43
- apiBaseUrl?: string;
44
- /**
45
- * Cor principal do botão flutuante e do bloco "fora do horário" (ex.: "#0D9488").
46
- * Se não informado, usa a cor padrão da Synchat.
47
- */
48
36
  primaryColor?: string;
49
- /** Called when user clicks "Iniciar chat". The app should connect via WebSocket and send the message. businessId is provided so you can connect to /ws/business/{businessId}. */
50
37
  onStartChat?: (data: {
51
38
  name: string;
52
39
  email: string;
@@ -54,7 +41,6 @@ interface WebChatProps {
54
41
  message: string;
55
42
  businessId?: string;
56
43
  }) => void | Promise<void>;
57
- /** Optional: custom out-of-hours message. If not set, uses schedule from config. */
58
44
  outOfHoursMessage?: string;
59
45
  }
60
46
  interface WebChatFormData {
package/dist/index.js CHANGED
@@ -344,12 +344,11 @@ function parseColor(color) {
344
344
  }
345
345
  var WebChatPage = ({
346
346
  token,
347
- apiBaseUrl,
348
347
  primaryColor,
349
348
  onStartChat,
350
349
  outOfHoursMessage
351
350
  }) => {
352
- const baseUrl = apiBaseUrl?.trim() || DEFAULT_API_BASE_URL;
351
+ const baseUrl = DEFAULT_API_BASE_URL;
353
352
  const colors = parseColor(primaryColor);
354
353
  const [config, setConfig] = react.useState(null);
355
354
  const [loading, setLoading] = react.useState(true);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/components/atoms/button/styles.tsx","../src/lib/components/atoms/button/index.tsx","../src/lib/components/atoms/floating-button/FabIconButton.tsx","../src/lib/components/atoms/spinner/Spinner.tsx","../src/lib/components/molecules/floating-button-trigger/FabTrigger.tsx","../src/lib/components/molecules/out-of-hours-card/PanelHeader.tsx","../src/lib/components/molecules/out-of-hours-card/OutOfHoursCard.tsx","../src/lib/components/molecules/chat-form/ChatForm.tsx","../src/lib/components/organisms/webchat/constants.ts","../src/lib/components/organisms/chat-panel-content/ChatPanelContent.tsx","../src/lib/components/organisms/chat-panel/ChatPanel.tsx","../src/lib/components/organisms/layout/WebChatLayout.tsx","../src/lib/components/organisms/webchat/WebChatPage.tsx"],"names":["styled","Button","jsx","IconButton","Box","CircularProgress","ChatIcon","jsxs","Typography","CloseIcon","ScheduleIcon","TextField","Fragment","start","end","useState","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { Button, ButtonProps, styled } from \"@mui/material\";\nimport { ButtonHTMLAttributes } from \"react\";\n\nconst disabledStyles = {\n backgroundColor: \"#E0E0E0\",\n color: \"#9E9E9E\",\n borderColor: \"#BDBDBD\",\n};\n\nconst buttonVariants = {\n primary: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"none\",\n },\n secondary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n error: {\n background: \"transparent\",\n color: \"#D32F2F\",\n border: \"#D32F2F\",\n },\n danger: {\n background: \"#E61E2E\",\n color: \"#fff\",\n border: \"none\",\n },\n outlinedBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"#2196F3\",\n },\n outlinedGreen: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n outlinedBlack: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"#000000DE\",\n },\n outlinedGrey: {\n background: \"transparent\",\n color: \"#59676D\",\n border: \"#0B0D0E52\",\n },\n textPrimary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"transparent\",\n },\n textSecondary: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"transparent\",\n },\n textBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"transparent\",\n },\n default: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"#00BB7E\",\n },\n};\n\ninterface AtomButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ButtonProps {\n buttonType?: keyof typeof buttonVariants;\n}\n\nexport const AtomButton = styled(Button, {\n shouldForwardProp: (prop) => prop !== \"buttonType\",\n})<AtomButtonProps>(({ buttonType = \"default\" }) => {\n\n return {\n }\n\n});","import * as React from 'react'\nimport { ChatButtonProps } from \"./types\";\nimport IComponent from \"../../../../types/component\";\nimport { AtomButton } from \"./styles\";\n\nexport const ChatButton: IComponent<ChatButtonProps> = ({ children = 'Chat', onClick, className, disabled }) => {\n return (\n <AtomButton\n onClick={onClick}\n disabled={disabled}\n className={className}\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#007bff\",\n color: \"#fff\",\n display: \"flex\",\n borderRadius: \"50%\",\n width: \"60px\",\n height: \"60px\"\n }}\n >\n {children}\n </AtomButton>\n )\n}\n","import React from \"react\";\nimport { IconButton, IconButtonProps } from \"@mui/material\";\n\nexport interface FabIconButtonProps extends Omit<IconButtonProps, \"size\"> {\n bgColor: string;\n hoverColor: string;\n children: React.ReactNode;\n}\n\nexport const FabIconButton: React.FC<FabIconButtonProps> = ({\n bgColor,\n hoverColor,\n children,\n sx,\n ...rest\n}) => (\n <IconButton\n size=\"large\"\n sx={{\n width: 56,\n height: 56,\n bgcolor: bgColor,\n color: \"white\",\n \"&:hover\": { bgcolor: hoverColor },\n boxShadow: 2,\n ...sx,\n }}\n {...rest}\n >\n {children}\n </IconButton>\n);\n","import React from \"react\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport interface SpinnerProps {\n size?: number;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ size = 32 }) => (\n <Box display=\"flex\" justifyContent=\"center\" py={3}>\n <CircularProgress size={size} />\n </Box>\n);\n","import React from \"react\";\nimport ChatIcon from \"@mui/icons-material/Chat\";\nimport { FabIconButton } from \"../../atoms\";\n\nexport interface FabTriggerProps {\n onClick: () => void;\n bgColor: string;\n hoverColor: string;\n}\n\nexport const FabTrigger: React.FC<FabTriggerProps> = ({\n onClick,\n bgColor,\n hoverColor,\n}) => (\n <FabIconButton\n onClick={onClick}\n bgColor={bgColor}\n hoverColor={hoverColor}\n sx={{ position: \"fixed\", bottom: 20, right: 20 }}\n >\n <ChatIcon />\n </FabIconButton>\n);\n","import React from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nexport interface PanelHeaderProps {\n title: string;\n onClose: () => void;\n}\n\n/**\n * Molécula: cabeçalho do painel com título e botão fechar.\n */\nexport const PanelHeader: React.FC<PanelHeaderProps> = ({ title, onClose }) => (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Typography variant=\"subtitle1\" fontWeight={600}>\n {title}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Fechar\">\n <CloseIcon />\n </IconButton>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport ScheduleIcon from \"@mui/icons-material/Schedule\";\n\nexport interface OutOfHoursCardProps {\n message: string;\n bgColor: string;\n}\n\n/**\n * Molécula: card \"Fora do horário de atendimento\" com ícone e mensagem.\n */\nexport const OutOfHoursCard: React.FC<OutOfHoursCardProps> = ({\n message,\n bgColor,\n}) => (\n <Box\n sx={{\n textAlign: \"center\",\n py: 2,\n px: 1,\n bgcolor: bgColor,\n borderRadius: 1,\n color: \"white\",\n }}\n >\n <ScheduleIcon sx={{ fontSize: 48, opacity: 0.9, mb: 1 }} />\n <Typography variant=\"body1\" sx={{ fontWeight: 500, mb: 1 }}>\n Fora do horário de atendimento\n </Typography>\n <Typography variant=\"body2\" sx={{ opacity: 0.95 }}>\n {message}\n </Typography>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Button, TextField } from \"@mui/material\";\n\nexport interface ChatFormData {\n name: string;\n email: string;\n phone: string;\n message: string;\n}\n\nexport interface ChatFormProps {\n value: ChatFormData;\n onChange: (data: ChatFormData) => void;\n onSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n submitLabel?: string;\n}\n\n/**\n * Molécula: formulário de início de chat (nome, e-mail, telefone, mensagem + enviar).\n */\nexport const ChatForm: React.FC<ChatFormProps> = ({\n value,\n onChange,\n onSubmit,\n submitting,\n submitLabel = \"Iniciar chat\",\n}) => (\n <form onSubmit={onSubmit}>\n <Box display=\"flex\" flexDirection=\"column\" gap={2}>\n <TextField\n label=\"Nome\"\n value={value.name}\n onChange={(e) => onChange({ ...value, name: e.target.value })}\n required\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"E-mail\"\n type=\"email\"\n value={value.email}\n onChange={(e) => onChange({ ...value, email: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Telefone\"\n value={value.phone}\n onChange={(e) => onChange({ ...value, phone: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Mensagem\"\n value={value.message}\n onChange={(e) => onChange({ ...value, message: e.target.value })}\n multiline\n rows={3}\n fullWidth\n size=\"small\"\n />\n <Button\n type=\"submit\"\n variant=\"contained\"\n disabled={submitting || !value.name.trim()}\n fullWidth\n >\n {submitting ? \"Enviando…\" : submitLabel}\n </Button>\n </Box>\n </form>\n);\n","/**\n * Cor padrão do botão/floating action do WebChat (identidade Synchat).\n * Pode ser sobrescrita pela prop primaryColor.\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#0D9488\";\nexport const DEFAULT_PRIMARY_COLOR_HOVER = \"#0F766E\";\n\n/**\n * URL base da API usada quando apiBaseUrl não é passada.\n * No build: para embutir outra URL no pacote, use\n * SYNCHAT_API_URL=https://sua-api.com npm run build\n */\ndeclare const __SYNCHAT_API_URL__: string;\nexport const DEFAULT_API_BASE_URL = __SYNCHAT_API_URL__;\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport { Spinner } from \"../../atoms\";\nimport { OutOfHoursCard, ChatForm } from \"../../molecules\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport type PanelContentState =\n | \"loading\"\n | \"error\"\n | \"inactive\"\n | \"outOfHours\"\n | \"form\"\n | \"submitted\";\n\nexport interface ChatPanelContentProps {\n state: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n outOfHoursBgColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: conteúdo do painel (loading, erro, inativo, fora do horário, formulário ou sucesso).\n */\nexport const ChatPanelContent: React.FC<ChatPanelContentProps> = ({\n state,\n errorMessage,\n outOfHoursMessage,\n outOfHoursBgColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => (\n <Box sx={{ p: 2, flex: 1 }}>\n {state === \"loading\" && <Spinner />}\n\n {state === \"error\" && errorMessage && (\n <Typography color=\"error\" variant=\"body2\">\n {errorMessage}\n </Typography>\n )}\n\n {state === \"inactive\" && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n Este canal não está disponível no momento.\n </Typography>\n )}\n\n {state === \"outOfHours\" && (\n <OutOfHoursCard message={outOfHoursMessage} bgColor={outOfHoursBgColor} />\n )}\n\n {state === \"form\" && (\n <ChatForm\n value={formValue}\n onChange={onFormChange}\n onSubmit={onFormSubmit}\n submitting={submitting}\n />\n )}\n\n {state === \"submitted\" && (\n <Typography color=\"text.secondary\" variant=\"body2\" sx={{ py: 2 }}>\n Sua mensagem foi enviada. Em breve um atendente responderá.\n </Typography>\n )}\n </Box>\n);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { PanelHeader } from \"../../molecules\";\nimport { ChatPanelContent } from \"../chat-panel-content/ChatPanelContent\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface ChatPanelProps {\n open: boolean;\n title: string;\n onClose: () => void;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n primaryColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: painel do chat (cabeçalho + conteúdo).\n */\nexport const ChatPanel: React.FC<ChatPanelProps> = ({\n open,\n title,\n onClose,\n contentState,\n errorMessage,\n outOfHoursMessage,\n primaryColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => {\n if (!open) return null;\n\n return (\n <Box\n sx={{\n position: \"fixed\",\n bottom: 90,\n right: 20,\n width: 380,\n maxWidth: \"calc(100vw - 40px)\",\n maxHeight: \"calc(100vh - 120px)\",\n overflow: \"auto\",\n bgcolor: \"background.paper\",\n borderRadius: 2,\n boxShadow: 6,\n zIndex: 1300,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <PanelHeader title={title} onClose={onClose} />\n <ChatPanelContent\n state={contentState}\n errorMessage={errorMessage}\n outOfHoursMessage={outOfHoursMessage}\n outOfHoursBgColor={primaryColor}\n formValue={formValue}\n onFormChange={onFormChange}\n onFormSubmit={onFormSubmit}\n submitting={submitting}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { FabTrigger } from \"../../molecules\";\nimport { ChatPanel } from \"../chat-panel/ChatPanel\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface WebChatLayoutProps {\n open: boolean;\n onToggleOpen: () => void;\n primaryColor: string;\n hoverColor: string;\n panelTitle: string;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Template: layout do widget (FAB + painel condicional).\n */\nexport const WebChatLayout: React.FC<WebChatLayoutProps> = (props) => (\n <>\n <FabTrigger\n onClick={props.onToggleOpen}\n bgColor={props.primaryColor}\n hoverColor={props.hoverColor}\n />\n <ChatPanel\n open={props.open}\n title={props.panelTitle}\n onClose={props.onToggleOpen}\n contentState={props.contentState}\n errorMessage={props.errorMessage}\n outOfHoursMessage={props.outOfHoursMessage}\n primaryColor={props.primaryColor}\n formValue={props.formValue}\n onFormChange={props.onFormChange}\n onFormSubmit={props.onFormSubmit}\n submitting={props.submitting}\n />\n </>\n);\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_PRIMARY_COLOR,\n DEFAULT_PRIMARY_COLOR_HOVER,\n} from \"./constants\";\nimport { WebChatLayout } from \"../layout/WebChatLayout\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\nimport { WebChatConfig, WebChatProps } from \"./types\";\n\nconst DAY_MAP: Record<number, string> = {\n 0: \"SUNDAY\",\n 1: \"MONDAY\",\n 2: \"TUESDAY\",\n 3: \"WEDNESDAY\",\n 4: \"THURSDAY\",\n 5: \"FRIDAY\",\n 6: \"SATURDAY\",\n};\n\nfunction isWithinSchedule(config: WebChatConfig): boolean {\n if (!config.restrictBySchedule || !config.schedule) return true;\n const now = new Date();\n const day = DAY_MAP[now.getDay()];\n const time =\n String(now.getHours()).padStart(2, \"0\") +\n \":\" +\n String(now.getMinutes()).padStart(2, \"0\");\n const weekDays = config.schedule.weekDays ?? [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n ];\n const isWeekday = weekDays.includes(day);\n if (isWeekday) {\n const start = config.schedule.weekdaysStart ?? \"07:00\";\n const end = config.schedule.weekdaysEnd ?? \"18:00\";\n return time >= start && time <= end;\n }\n const start = config.schedule.weekendStart ?? \"07:00\";\n const end = config.schedule.weekendEnd ?? \"13:00\";\n return time >= start && time <= end;\n}\n\nfunction formatScheduleMessage(config: WebChatConfig): string {\n if (!config.schedule) {\n return \"Nosso horário de atendimento é de segunda à sexta-feira das 07:00h às 18:00h. Sábados, domingos e feriados das 07:00h às 13:00h.\";\n }\n const wdStart = config.schedule.weekdaysStart ?? \"07:00\";\n const wdEnd = config.schedule.weekdaysEnd ?? \"18:00\";\n const weStart = config.schedule.weekendStart ?? \"07:00\";\n const weEnd = config.schedule.weekendEnd ?? \"13:00\";\n return `Nosso horário de atendimento é de segunda à sexta-feira das ${wdStart}h às ${wdEnd}h. Sábados, domingos e feriados das ${weStart}h às ${weEnd}h.`;\n}\n\nfunction parseColor(color: string | undefined): { main: string; hover: string } {\n if (!color || !color.trim()) {\n return { main: DEFAULT_PRIMARY_COLOR, hover: DEFAULT_PRIMARY_COLOR_HOVER };\n }\n const c = color.trim();\n if (c.startsWith(\"#\") && c.length === 7) {\n const hex = c.slice(1);\n const r = Math.max(0, parseInt(hex.slice(0, 2), 16) - 18);\n const g = Math.max(0, parseInt(hex.slice(2, 4), 16) - 18);\n const b = Math.max(0, parseInt(hex.slice(4, 6), 16) - 18);\n const hover = `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n return { main: c, hover };\n }\n return { main: c, hover: c };\n}\n\nexport const WebChatPage: React.FC<WebChatProps> = ({\n token,\n apiBaseUrl,\n primaryColor,\n onStartChat,\n outOfHoursMessage,\n}) => {\n const baseUrl = apiBaseUrl?.trim() || DEFAULT_API_BASE_URL;\n const colors = parseColor(primaryColor);\n const [config, setConfig] = useState<WebChatConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [open, setOpen] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [form, setForm] = useState<ChatFormData>({\n name: \"\",\n email: \"\",\n phone: \"\",\n message: \"\",\n });\n\n const fetchConfig = useCallback(async () => {\n if (!token) return;\n setLoading(true);\n setError(null);\n try {\n const base = baseUrl.replace(/\\/$/, \"\");\n const res = await fetch(`${base}/channel/webchat/${encodeURIComponent(token)}`);\n if (!res.ok) {\n setError(\"Canal não encontrado.\");\n setConfig(null);\n return;\n }\n const data: WebChatConfig = await res.json();\n setConfig(data);\n } catch {\n setError(\"Não foi possível carregar o canal.\");\n setConfig(null);\n } finally {\n setLoading(false);\n }\n }, [token, baseUrl]);\n\n useEffect(() => {\n fetchConfig();\n }, [fetchConfig]);\n\n const isActive =\n config && (config.status === \"live\" || config.status === \"enable\");\n const outsideHours =\n config && config.restrictBySchedule && !isWithinSchedule(config);\n const showOutOfHours = isActive && outsideHours;\n const showForm = isActive && !outsideHours;\n\n const contentState: PanelContentState = loading\n ? \"loading\"\n : error\n ? \"error\"\n : config && !isActive\n ? \"inactive\"\n : showOutOfHours\n ? \"outOfHours\"\n : showForm && !submitted\n ? \"form\"\n : \"submitted\";\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || !form.name.trim()) return;\n if (!onStartChat) {\n setError(\n \"Início de conversa será via WebSocket. Configure onStartChat no componente.\"\n );\n return;\n }\n setSubmitting(true);\n try {\n await onStartChat({\n name: form.name.trim(),\n email: form.email.trim(),\n phone: form.phone.trim(),\n message: form.message.trim(),\n ...(config?.businessId && { businessId: config.businessId }),\n });\n setSubmitted(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Erro ao enviar.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!token) return null;\n\n return (\n <WebChatLayout\n open={open}\n onToggleOpen={() => setOpen((o) => !o)}\n primaryColor={colors.main}\n hoverColor={colors.hover}\n panelTitle={config?.name ?? \"Chat\"}\n contentState={contentState}\n errorMessage={error}\n outOfHoursMessage={\n outOfHoursMessage ?? (config ? formatScheduleMessage(config) : \"\")\n }\n formValue={form}\n onFormChange={setForm}\n onFormSubmit={handleSubmit}\n submitting={submitting}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/lib/components/atoms/button/styles.tsx","../src/lib/components/atoms/button/index.tsx","../src/lib/components/atoms/floating-button/FabIconButton.tsx","../src/lib/components/atoms/spinner/Spinner.tsx","../src/lib/components/molecules/floating-button-trigger/FabTrigger.tsx","../src/lib/components/molecules/out-of-hours-card/PanelHeader.tsx","../src/lib/components/molecules/out-of-hours-card/OutOfHoursCard.tsx","../src/lib/components/molecules/chat-form/ChatForm.tsx","../src/lib/components/organisms/webchat/constants.ts","../src/lib/components/organisms/chat-panel-content/ChatPanelContent.tsx","../src/lib/components/organisms/chat-panel/ChatPanel.tsx","../src/lib/components/organisms/layout/WebChatLayout.tsx","../src/lib/components/organisms/webchat/WebChatPage.tsx"],"names":["styled","Button","jsx","IconButton","Box","CircularProgress","ChatIcon","jsxs","Typography","CloseIcon","ScheduleIcon","TextField","Fragment","start","end","useState","useCallback","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { Button, ButtonProps, styled } from \"@mui/material\";\nimport { ButtonHTMLAttributes } from \"react\";\n\nconst disabledStyles = {\n backgroundColor: \"#E0E0E0\",\n color: \"#9E9E9E\",\n borderColor: \"#BDBDBD\",\n};\n\nconst buttonVariants = {\n primary: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"none\",\n },\n secondary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n error: {\n background: \"transparent\",\n color: \"#D32F2F\",\n border: \"#D32F2F\",\n },\n danger: {\n background: \"#E61E2E\",\n color: \"#fff\",\n border: \"none\",\n },\n outlinedBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"#2196F3\",\n },\n outlinedGreen: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n outlinedBlack: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"#000000DE\",\n },\n outlinedGrey: {\n background: \"transparent\",\n color: \"#59676D\",\n border: \"#0B0D0E52\",\n },\n textPrimary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"transparent\",\n },\n textSecondary: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"transparent\",\n },\n textBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"transparent\",\n },\n default: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"#00BB7E\",\n },\n};\n\ninterface AtomButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ButtonProps {\n buttonType?: keyof typeof buttonVariants;\n}\n\nexport const AtomButton = styled(Button, {\n shouldForwardProp: (prop) => prop !== \"buttonType\",\n})<AtomButtonProps>(({ buttonType = \"default\" }) => {\n\n return {\n }\n\n});","import * as React from 'react'\nimport { ChatButtonProps } from \"./types\";\nimport IComponent from \"../../../../types/component\";\nimport { AtomButton } from \"./styles\";\n\nexport const ChatButton: IComponent<ChatButtonProps> = ({ children = 'Chat', onClick, className, disabled }) => {\n return (\n <AtomButton\n onClick={onClick}\n disabled={disabled}\n className={className}\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#007bff\",\n color: \"#fff\",\n display: \"flex\",\n borderRadius: \"50%\",\n width: \"60px\",\n height: \"60px\"\n }}\n >\n {children}\n </AtomButton>\n )\n}\n","import React from \"react\";\nimport { IconButton, IconButtonProps } from \"@mui/material\";\n\nexport interface FabIconButtonProps extends Omit<IconButtonProps, \"size\"> {\n bgColor: string;\n hoverColor: string;\n children: React.ReactNode;\n}\n\nexport const FabIconButton: React.FC<FabIconButtonProps> = ({\n bgColor,\n hoverColor,\n children,\n sx,\n ...rest\n}) => (\n <IconButton\n size=\"large\"\n sx={{\n width: 56,\n height: 56,\n bgcolor: bgColor,\n color: \"white\",\n \"&:hover\": { bgcolor: hoverColor },\n boxShadow: 2,\n ...sx,\n }}\n {...rest}\n >\n {children}\n </IconButton>\n);\n","import React from \"react\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport interface SpinnerProps {\n size?: number;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ size = 32 }) => (\n <Box display=\"flex\" justifyContent=\"center\" py={3}>\n <CircularProgress size={size} />\n </Box>\n);\n","import React from \"react\";\nimport ChatIcon from \"@mui/icons-material/Chat\";\nimport { FabIconButton } from \"../../atoms\";\n\nexport interface FabTriggerProps {\n onClick: () => void;\n bgColor: string;\n hoverColor: string;\n}\n\nexport const FabTrigger: React.FC<FabTriggerProps> = ({\n onClick,\n bgColor,\n hoverColor,\n}) => (\n <FabIconButton\n onClick={onClick}\n bgColor={bgColor}\n hoverColor={hoverColor}\n sx={{ position: \"fixed\", bottom: 20, right: 20 }}\n >\n <ChatIcon />\n </FabIconButton>\n);\n","import React from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nexport interface PanelHeaderProps {\n title: string;\n onClose: () => void;\n}\n\n/**\n * Molécula: cabeçalho do painel com título e botão fechar.\n */\nexport const PanelHeader: React.FC<PanelHeaderProps> = ({ title, onClose }) => (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Typography variant=\"subtitle1\" fontWeight={600}>\n {title}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Fechar\">\n <CloseIcon />\n </IconButton>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport ScheduleIcon from \"@mui/icons-material/Schedule\";\n\nexport interface OutOfHoursCardProps {\n message: string;\n bgColor: string;\n}\n\n/**\n * Molécula: card \"Fora do horário de atendimento\" com ícone e mensagem.\n */\nexport const OutOfHoursCard: React.FC<OutOfHoursCardProps> = ({\n message,\n bgColor,\n}) => (\n <Box\n sx={{\n textAlign: \"center\",\n py: 2,\n px: 1,\n bgcolor: bgColor,\n borderRadius: 1,\n color: \"white\",\n }}\n >\n <ScheduleIcon sx={{ fontSize: 48, opacity: 0.9, mb: 1 }} />\n <Typography variant=\"body1\" sx={{ fontWeight: 500, mb: 1 }}>\n Fora do horário de atendimento\n </Typography>\n <Typography variant=\"body2\" sx={{ opacity: 0.95 }}>\n {message}\n </Typography>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Button, TextField } from \"@mui/material\";\n\nexport interface ChatFormData {\n name: string;\n email: string;\n phone: string;\n message: string;\n}\n\nexport interface ChatFormProps {\n value: ChatFormData;\n onChange: (data: ChatFormData) => void;\n onSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n submitLabel?: string;\n}\n\n/**\n * Molécula: formulário de início de chat (nome, e-mail, telefone, mensagem + enviar).\n */\nexport const ChatForm: React.FC<ChatFormProps> = ({\n value,\n onChange,\n onSubmit,\n submitting,\n submitLabel = \"Iniciar chat\",\n}) => (\n <form onSubmit={onSubmit}>\n <Box display=\"flex\" flexDirection=\"column\" gap={2}>\n <TextField\n label=\"Nome\"\n value={value.name}\n onChange={(e) => onChange({ ...value, name: e.target.value })}\n required\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"E-mail\"\n type=\"email\"\n value={value.email}\n onChange={(e) => onChange({ ...value, email: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Telefone\"\n value={value.phone}\n onChange={(e) => onChange({ ...value, phone: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Mensagem\"\n value={value.message}\n onChange={(e) => onChange({ ...value, message: e.target.value })}\n multiline\n rows={3}\n fullWidth\n size=\"small\"\n />\n <Button\n type=\"submit\"\n variant=\"contained\"\n disabled={submitting || !value.name.trim()}\n fullWidth\n >\n {submitting ? \"Enviando…\" : submitLabel}\n </Button>\n </Box>\n </form>\n);\n","export const DEFAULT_PRIMARY_COLOR = \"#0D9488\";\nexport const DEFAULT_PRIMARY_COLOR_HOVER = \"#0F766E\";\n\ndeclare const __SYNCHAT_API_URL__: string;\nexport const DEFAULT_API_BASE_URL = __SYNCHAT_API_URL__;\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport { Spinner } from \"../../atoms\";\nimport { OutOfHoursCard, ChatForm } from \"../../molecules\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport type PanelContentState =\n | \"loading\"\n | \"error\"\n | \"inactive\"\n | \"outOfHours\"\n | \"form\"\n | \"submitted\";\n\nexport interface ChatPanelContentProps {\n state: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n outOfHoursBgColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: conteúdo do painel (loading, erro, inativo, fora do horário, formulário ou sucesso).\n */\nexport const ChatPanelContent: React.FC<ChatPanelContentProps> = ({\n state,\n errorMessage,\n outOfHoursMessage,\n outOfHoursBgColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => (\n <Box sx={{ p: 2, flex: 1 }}>\n {state === \"loading\" && <Spinner />}\n\n {state === \"error\" && errorMessage && (\n <Typography color=\"error\" variant=\"body2\">\n {errorMessage}\n </Typography>\n )}\n\n {state === \"inactive\" && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n Este canal não está disponível no momento.\n </Typography>\n )}\n\n {state === \"outOfHours\" && (\n <OutOfHoursCard message={outOfHoursMessage} bgColor={outOfHoursBgColor} />\n )}\n\n {state === \"form\" && (\n <ChatForm\n value={formValue}\n onChange={onFormChange}\n onSubmit={onFormSubmit}\n submitting={submitting}\n />\n )}\n\n {state === \"submitted\" && (\n <Typography color=\"text.secondary\" variant=\"body2\" sx={{ py: 2 }}>\n Sua mensagem foi enviada. Em breve um atendente responderá.\n </Typography>\n )}\n </Box>\n);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { PanelHeader } from \"../../molecules\";\nimport { ChatPanelContent } from \"../chat-panel-content/ChatPanelContent\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface ChatPanelProps {\n open: boolean;\n title: string;\n onClose: () => void;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n primaryColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: painel do chat (cabeçalho + conteúdo).\n */\nexport const ChatPanel: React.FC<ChatPanelProps> = ({\n open,\n title,\n onClose,\n contentState,\n errorMessage,\n outOfHoursMessage,\n primaryColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => {\n if (!open) return null;\n\n return (\n <Box\n sx={{\n position: \"fixed\",\n bottom: 90,\n right: 20,\n width: 380,\n maxWidth: \"calc(100vw - 40px)\",\n maxHeight: \"calc(100vh - 120px)\",\n overflow: \"auto\",\n bgcolor: \"background.paper\",\n borderRadius: 2,\n boxShadow: 6,\n zIndex: 1300,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <PanelHeader title={title} onClose={onClose} />\n <ChatPanelContent\n state={contentState}\n errorMessage={errorMessage}\n outOfHoursMessage={outOfHoursMessage}\n outOfHoursBgColor={primaryColor}\n formValue={formValue}\n onFormChange={onFormChange}\n onFormSubmit={onFormSubmit}\n submitting={submitting}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { FabTrigger } from \"../../molecules\";\nimport { ChatPanel } from \"../chat-panel/ChatPanel\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface WebChatLayoutProps {\n open: boolean;\n onToggleOpen: () => void;\n primaryColor: string;\n hoverColor: string;\n panelTitle: string;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Template: layout do widget (FAB + painel condicional).\n */\nexport const WebChatLayout: React.FC<WebChatLayoutProps> = (props) => (\n <>\n <FabTrigger\n onClick={props.onToggleOpen}\n bgColor={props.primaryColor}\n hoverColor={props.hoverColor}\n />\n <ChatPanel\n open={props.open}\n title={props.panelTitle}\n onClose={props.onToggleOpen}\n contentState={props.contentState}\n errorMessage={props.errorMessage}\n outOfHoursMessage={props.outOfHoursMessage}\n primaryColor={props.primaryColor}\n formValue={props.formValue}\n onFormChange={props.onFormChange}\n onFormSubmit={props.onFormSubmit}\n submitting={props.submitting}\n />\n </>\n);\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_PRIMARY_COLOR,\n DEFAULT_PRIMARY_COLOR_HOVER,\n} from \"./constants\";\nimport { WebChatLayout } from \"../layout/WebChatLayout\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\nimport { WebChatConfig, WebChatProps } from \"./types\";\n\nconst DAY_MAP: Record<number, string> = {\n 0: \"SUNDAY\",\n 1: \"MONDAY\",\n 2: \"TUESDAY\",\n 3: \"WEDNESDAY\",\n 4: \"THURSDAY\",\n 5: \"FRIDAY\",\n 6: \"SATURDAY\",\n};\n\nfunction isWithinSchedule(config: WebChatConfig): boolean {\n if (!config.restrictBySchedule || !config.schedule) return true;\n const now = new Date();\n const day = DAY_MAP[now.getDay()];\n const time =\n String(now.getHours()).padStart(2, \"0\") +\n \":\" +\n String(now.getMinutes()).padStart(2, \"0\");\n const weekDays = config.schedule.weekDays ?? [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n ];\n const isWeekday = weekDays.includes(day);\n if (isWeekday) {\n const start = config.schedule.weekdaysStart ?? \"07:00\";\n const end = config.schedule.weekdaysEnd ?? \"18:00\";\n return time >= start && time <= end;\n }\n const start = config.schedule.weekendStart ?? \"07:00\";\n const end = config.schedule.weekendEnd ?? \"13:00\";\n return time >= start && time <= end;\n}\n\nfunction formatScheduleMessage(config: WebChatConfig): string {\n if (!config.schedule) {\n return \"Nosso horário de atendimento é de segunda à sexta-feira das 07:00h às 18:00h. Sábados, domingos e feriados das 07:00h às 13:00h.\";\n }\n const wdStart = config.schedule.weekdaysStart ?? \"07:00\";\n const wdEnd = config.schedule.weekdaysEnd ?? \"18:00\";\n const weStart = config.schedule.weekendStart ?? \"07:00\";\n const weEnd = config.schedule.weekendEnd ?? \"13:00\";\n return `Nosso horário de atendimento é de segunda à sexta-feira das ${wdStart}h às ${wdEnd}h. Sábados, domingos e feriados das ${weStart}h às ${weEnd}h.`;\n}\n\nfunction parseColor(color: string | undefined): { main: string; hover: string } {\n if (!color || !color.trim()) {\n return { main: DEFAULT_PRIMARY_COLOR, hover: DEFAULT_PRIMARY_COLOR_HOVER };\n }\n const c = color.trim();\n if (c.startsWith(\"#\") && c.length === 7) {\n const hex = c.slice(1);\n const r = Math.max(0, parseInt(hex.slice(0, 2), 16) - 18);\n const g = Math.max(0, parseInt(hex.slice(2, 4), 16) - 18);\n const b = Math.max(0, parseInt(hex.slice(4, 6), 16) - 18);\n const hover = `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n return { main: c, hover };\n }\n return { main: c, hover: c };\n}\n\nexport const WebChatPage: React.FC<WebChatProps> = ({\n token,\n primaryColor,\n onStartChat,\n outOfHoursMessage,\n}) => {\n const baseUrl = DEFAULT_API_BASE_URL;\n const colors = parseColor(primaryColor);\n const [config, setConfig] = useState<WebChatConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [open, setOpen] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [form, setForm] = useState<ChatFormData>({\n name: \"\",\n email: \"\",\n phone: \"\",\n message: \"\",\n });\n\n const fetchConfig = useCallback(async () => {\n if (!token) return;\n setLoading(true);\n setError(null);\n try {\n const base = baseUrl.replace(/\\/$/, \"\");\n const res = await fetch(`${base}/channel/webchat/${encodeURIComponent(token)}`);\n if (!res.ok) {\n setError(\"Canal não encontrado.\");\n setConfig(null);\n return;\n }\n const data: WebChatConfig = await res.json();\n setConfig(data);\n } catch {\n setError(\"Não foi possível carregar o canal.\");\n setConfig(null);\n } finally {\n setLoading(false);\n }\n }, [token, baseUrl]);\n\n useEffect(() => {\n fetchConfig();\n }, [fetchConfig]);\n\n const isActive =\n config && (config.status === \"live\" || config.status === \"enable\");\n const outsideHours =\n config && config.restrictBySchedule && !isWithinSchedule(config);\n const showOutOfHours = isActive && outsideHours;\n const showForm = isActive && !outsideHours;\n\n const contentState: PanelContentState = loading\n ? \"loading\"\n : error\n ? \"error\"\n : config && !isActive\n ? \"inactive\"\n : showOutOfHours\n ? \"outOfHours\"\n : showForm && !submitted\n ? \"form\"\n : \"submitted\";\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || !form.name.trim()) return;\n if (!onStartChat) {\n setError(\n \"Início de conversa será via WebSocket. Configure onStartChat no componente.\"\n );\n return;\n }\n setSubmitting(true);\n try {\n await onStartChat({\n name: form.name.trim(),\n email: form.email.trim(),\n phone: form.phone.trim(),\n message: form.message.trim(),\n ...(config?.businessId && { businessId: config.businessId }),\n });\n setSubmitted(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Erro ao enviar.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!token) return null;\n\n return (\n <WebChatLayout\n open={open}\n onToggleOpen={() => setOpen((o) => !o)}\n primaryColor={colors.main}\n hoverColor={colors.hover}\n panelTitle={config?.name ?? \"Chat\"}\n contentState={contentState}\n errorMessage={error}\n outOfHoursMessage={\n outOfHoursMessage ?? (config ? formatScheduleMessage(config) : \"\")\n }\n formValue={form}\n onFormChange={setForm}\n onFormSubmit={handleSubmit}\n submitting={submitting}\n />\n );\n};\n"]}
package/dist/index.mjs CHANGED
@@ -336,12 +336,11 @@ function parseColor(color) {
336
336
  }
337
337
  var WebChatPage = ({
338
338
  token,
339
- apiBaseUrl,
340
339
  primaryColor,
341
340
  onStartChat,
342
341
  outOfHoursMessage
343
342
  }) => {
344
- const baseUrl = apiBaseUrl?.trim() || DEFAULT_API_BASE_URL;
343
+ const baseUrl = DEFAULT_API_BASE_URL;
345
344
  const colors = parseColor(primaryColor);
346
345
  const [config, setConfig] = useState(null);
347
346
  const [loading, setLoading] = useState(true);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/components/atoms/button/styles.tsx","../src/lib/components/atoms/button/index.tsx","../src/lib/components/atoms/floating-button/FabIconButton.tsx","../src/lib/components/atoms/spinner/Spinner.tsx","../src/lib/components/molecules/floating-button-trigger/FabTrigger.tsx","../src/lib/components/molecules/out-of-hours-card/PanelHeader.tsx","../src/lib/components/molecules/out-of-hours-card/OutOfHoursCard.tsx","../src/lib/components/molecules/chat-form/ChatForm.tsx","../src/lib/components/organisms/webchat/constants.ts","../src/lib/components/organisms/chat-panel-content/ChatPanelContent.tsx","../src/lib/components/organisms/chat-panel/ChatPanel.tsx","../src/lib/components/organisms/layout/WebChatLayout.tsx","../src/lib/components/organisms/webchat/WebChatPage.tsx"],"names":["jsx","Box","IconButton","jsxs","Typography","Button","start","end"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Button, ButtonProps, styled } from \"@mui/material\";\nimport { ButtonHTMLAttributes } from \"react\";\n\nconst disabledStyles = {\n backgroundColor: \"#E0E0E0\",\n color: \"#9E9E9E\",\n borderColor: \"#BDBDBD\",\n};\n\nconst buttonVariants = {\n primary: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"none\",\n },\n secondary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n error: {\n background: \"transparent\",\n color: \"#D32F2F\",\n border: \"#D32F2F\",\n },\n danger: {\n background: \"#E61E2E\",\n color: \"#fff\",\n border: \"none\",\n },\n outlinedBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"#2196F3\",\n },\n outlinedGreen: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n outlinedBlack: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"#000000DE\",\n },\n outlinedGrey: {\n background: \"transparent\",\n color: \"#59676D\",\n border: \"#0B0D0E52\",\n },\n textPrimary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"transparent\",\n },\n textSecondary: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"transparent\",\n },\n textBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"transparent\",\n },\n default: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"#00BB7E\",\n },\n};\n\ninterface AtomButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ButtonProps {\n buttonType?: keyof typeof buttonVariants;\n}\n\nexport const AtomButton = styled(Button, {\n shouldForwardProp: (prop) => prop !== \"buttonType\",\n})<AtomButtonProps>(({ buttonType = \"default\" }) => {\n\n return {\n }\n\n});","import * as React from 'react'\nimport { ChatButtonProps } from \"./types\";\nimport IComponent from \"../../../../types/component\";\nimport { AtomButton } from \"./styles\";\n\nexport const ChatButton: IComponent<ChatButtonProps> = ({ children = 'Chat', onClick, className, disabled }) => {\n return (\n <AtomButton\n onClick={onClick}\n disabled={disabled}\n className={className}\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#007bff\",\n color: \"#fff\",\n display: \"flex\",\n borderRadius: \"50%\",\n width: \"60px\",\n height: \"60px\"\n }}\n >\n {children}\n </AtomButton>\n )\n}\n","import React from \"react\";\nimport { IconButton, IconButtonProps } from \"@mui/material\";\n\nexport interface FabIconButtonProps extends Omit<IconButtonProps, \"size\"> {\n bgColor: string;\n hoverColor: string;\n children: React.ReactNode;\n}\n\nexport const FabIconButton: React.FC<FabIconButtonProps> = ({\n bgColor,\n hoverColor,\n children,\n sx,\n ...rest\n}) => (\n <IconButton\n size=\"large\"\n sx={{\n width: 56,\n height: 56,\n bgcolor: bgColor,\n color: \"white\",\n \"&:hover\": { bgcolor: hoverColor },\n boxShadow: 2,\n ...sx,\n }}\n {...rest}\n >\n {children}\n </IconButton>\n);\n","import React from \"react\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport interface SpinnerProps {\n size?: number;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ size = 32 }) => (\n <Box display=\"flex\" justifyContent=\"center\" py={3}>\n <CircularProgress size={size} />\n </Box>\n);\n","import React from \"react\";\nimport ChatIcon from \"@mui/icons-material/Chat\";\nimport { FabIconButton } from \"../../atoms\";\n\nexport interface FabTriggerProps {\n onClick: () => void;\n bgColor: string;\n hoverColor: string;\n}\n\nexport const FabTrigger: React.FC<FabTriggerProps> = ({\n onClick,\n bgColor,\n hoverColor,\n}) => (\n <FabIconButton\n onClick={onClick}\n bgColor={bgColor}\n hoverColor={hoverColor}\n sx={{ position: \"fixed\", bottom: 20, right: 20 }}\n >\n <ChatIcon />\n </FabIconButton>\n);\n","import React from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nexport interface PanelHeaderProps {\n title: string;\n onClose: () => void;\n}\n\n/**\n * Molécula: cabeçalho do painel com título e botão fechar.\n */\nexport const PanelHeader: React.FC<PanelHeaderProps> = ({ title, onClose }) => (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Typography variant=\"subtitle1\" fontWeight={600}>\n {title}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Fechar\">\n <CloseIcon />\n </IconButton>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport ScheduleIcon from \"@mui/icons-material/Schedule\";\n\nexport interface OutOfHoursCardProps {\n message: string;\n bgColor: string;\n}\n\n/**\n * Molécula: card \"Fora do horário de atendimento\" com ícone e mensagem.\n */\nexport const OutOfHoursCard: React.FC<OutOfHoursCardProps> = ({\n message,\n bgColor,\n}) => (\n <Box\n sx={{\n textAlign: \"center\",\n py: 2,\n px: 1,\n bgcolor: bgColor,\n borderRadius: 1,\n color: \"white\",\n }}\n >\n <ScheduleIcon sx={{ fontSize: 48, opacity: 0.9, mb: 1 }} />\n <Typography variant=\"body1\" sx={{ fontWeight: 500, mb: 1 }}>\n Fora do horário de atendimento\n </Typography>\n <Typography variant=\"body2\" sx={{ opacity: 0.95 }}>\n {message}\n </Typography>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Button, TextField } from \"@mui/material\";\n\nexport interface ChatFormData {\n name: string;\n email: string;\n phone: string;\n message: string;\n}\n\nexport interface ChatFormProps {\n value: ChatFormData;\n onChange: (data: ChatFormData) => void;\n onSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n submitLabel?: string;\n}\n\n/**\n * Molécula: formulário de início de chat (nome, e-mail, telefone, mensagem + enviar).\n */\nexport const ChatForm: React.FC<ChatFormProps> = ({\n value,\n onChange,\n onSubmit,\n submitting,\n submitLabel = \"Iniciar chat\",\n}) => (\n <form onSubmit={onSubmit}>\n <Box display=\"flex\" flexDirection=\"column\" gap={2}>\n <TextField\n label=\"Nome\"\n value={value.name}\n onChange={(e) => onChange({ ...value, name: e.target.value })}\n required\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"E-mail\"\n type=\"email\"\n value={value.email}\n onChange={(e) => onChange({ ...value, email: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Telefone\"\n value={value.phone}\n onChange={(e) => onChange({ ...value, phone: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Mensagem\"\n value={value.message}\n onChange={(e) => onChange({ ...value, message: e.target.value })}\n multiline\n rows={3}\n fullWidth\n size=\"small\"\n />\n <Button\n type=\"submit\"\n variant=\"contained\"\n disabled={submitting || !value.name.trim()}\n fullWidth\n >\n {submitting ? \"Enviando…\" : submitLabel}\n </Button>\n </Box>\n </form>\n);\n","/**\n * Cor padrão do botão/floating action do WebChat (identidade Synchat).\n * Pode ser sobrescrita pela prop primaryColor.\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#0D9488\";\nexport const DEFAULT_PRIMARY_COLOR_HOVER = \"#0F766E\";\n\n/**\n * URL base da API usada quando apiBaseUrl não é passada.\n * No build: para embutir outra URL no pacote, use\n * SYNCHAT_API_URL=https://sua-api.com npm run build\n */\ndeclare const __SYNCHAT_API_URL__: string;\nexport const DEFAULT_API_BASE_URL = __SYNCHAT_API_URL__;\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport { Spinner } from \"../../atoms\";\nimport { OutOfHoursCard, ChatForm } from \"../../molecules\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport type PanelContentState =\n | \"loading\"\n | \"error\"\n | \"inactive\"\n | \"outOfHours\"\n | \"form\"\n | \"submitted\";\n\nexport interface ChatPanelContentProps {\n state: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n outOfHoursBgColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: conteúdo do painel (loading, erro, inativo, fora do horário, formulário ou sucesso).\n */\nexport const ChatPanelContent: React.FC<ChatPanelContentProps> = ({\n state,\n errorMessage,\n outOfHoursMessage,\n outOfHoursBgColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => (\n <Box sx={{ p: 2, flex: 1 }}>\n {state === \"loading\" && <Spinner />}\n\n {state === \"error\" && errorMessage && (\n <Typography color=\"error\" variant=\"body2\">\n {errorMessage}\n </Typography>\n )}\n\n {state === \"inactive\" && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n Este canal não está disponível no momento.\n </Typography>\n )}\n\n {state === \"outOfHours\" && (\n <OutOfHoursCard message={outOfHoursMessage} bgColor={outOfHoursBgColor} />\n )}\n\n {state === \"form\" && (\n <ChatForm\n value={formValue}\n onChange={onFormChange}\n onSubmit={onFormSubmit}\n submitting={submitting}\n />\n )}\n\n {state === \"submitted\" && (\n <Typography color=\"text.secondary\" variant=\"body2\" sx={{ py: 2 }}>\n Sua mensagem foi enviada. Em breve um atendente responderá.\n </Typography>\n )}\n </Box>\n);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { PanelHeader } from \"../../molecules\";\nimport { ChatPanelContent } from \"../chat-panel-content/ChatPanelContent\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface ChatPanelProps {\n open: boolean;\n title: string;\n onClose: () => void;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n primaryColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: painel do chat (cabeçalho + conteúdo).\n */\nexport const ChatPanel: React.FC<ChatPanelProps> = ({\n open,\n title,\n onClose,\n contentState,\n errorMessage,\n outOfHoursMessage,\n primaryColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => {\n if (!open) return null;\n\n return (\n <Box\n sx={{\n position: \"fixed\",\n bottom: 90,\n right: 20,\n width: 380,\n maxWidth: \"calc(100vw - 40px)\",\n maxHeight: \"calc(100vh - 120px)\",\n overflow: \"auto\",\n bgcolor: \"background.paper\",\n borderRadius: 2,\n boxShadow: 6,\n zIndex: 1300,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <PanelHeader title={title} onClose={onClose} />\n <ChatPanelContent\n state={contentState}\n errorMessage={errorMessage}\n outOfHoursMessage={outOfHoursMessage}\n outOfHoursBgColor={primaryColor}\n formValue={formValue}\n onFormChange={onFormChange}\n onFormSubmit={onFormSubmit}\n submitting={submitting}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { FabTrigger } from \"../../molecules\";\nimport { ChatPanel } from \"../chat-panel/ChatPanel\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface WebChatLayoutProps {\n open: boolean;\n onToggleOpen: () => void;\n primaryColor: string;\n hoverColor: string;\n panelTitle: string;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Template: layout do widget (FAB + painel condicional).\n */\nexport const WebChatLayout: React.FC<WebChatLayoutProps> = (props) => (\n <>\n <FabTrigger\n onClick={props.onToggleOpen}\n bgColor={props.primaryColor}\n hoverColor={props.hoverColor}\n />\n <ChatPanel\n open={props.open}\n title={props.panelTitle}\n onClose={props.onToggleOpen}\n contentState={props.contentState}\n errorMessage={props.errorMessage}\n outOfHoursMessage={props.outOfHoursMessage}\n primaryColor={props.primaryColor}\n formValue={props.formValue}\n onFormChange={props.onFormChange}\n onFormSubmit={props.onFormSubmit}\n submitting={props.submitting}\n />\n </>\n);\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_PRIMARY_COLOR,\n DEFAULT_PRIMARY_COLOR_HOVER,\n} from \"./constants\";\nimport { WebChatLayout } from \"../layout/WebChatLayout\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\nimport { WebChatConfig, WebChatProps } from \"./types\";\n\nconst DAY_MAP: Record<number, string> = {\n 0: \"SUNDAY\",\n 1: \"MONDAY\",\n 2: \"TUESDAY\",\n 3: \"WEDNESDAY\",\n 4: \"THURSDAY\",\n 5: \"FRIDAY\",\n 6: \"SATURDAY\",\n};\n\nfunction isWithinSchedule(config: WebChatConfig): boolean {\n if (!config.restrictBySchedule || !config.schedule) return true;\n const now = new Date();\n const day = DAY_MAP[now.getDay()];\n const time =\n String(now.getHours()).padStart(2, \"0\") +\n \":\" +\n String(now.getMinutes()).padStart(2, \"0\");\n const weekDays = config.schedule.weekDays ?? [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n ];\n const isWeekday = weekDays.includes(day);\n if (isWeekday) {\n const start = config.schedule.weekdaysStart ?? \"07:00\";\n const end = config.schedule.weekdaysEnd ?? \"18:00\";\n return time >= start && time <= end;\n }\n const start = config.schedule.weekendStart ?? \"07:00\";\n const end = config.schedule.weekendEnd ?? \"13:00\";\n return time >= start && time <= end;\n}\n\nfunction formatScheduleMessage(config: WebChatConfig): string {\n if (!config.schedule) {\n return \"Nosso horário de atendimento é de segunda à sexta-feira das 07:00h às 18:00h. Sábados, domingos e feriados das 07:00h às 13:00h.\";\n }\n const wdStart = config.schedule.weekdaysStart ?? \"07:00\";\n const wdEnd = config.schedule.weekdaysEnd ?? \"18:00\";\n const weStart = config.schedule.weekendStart ?? \"07:00\";\n const weEnd = config.schedule.weekendEnd ?? \"13:00\";\n return `Nosso horário de atendimento é de segunda à sexta-feira das ${wdStart}h às ${wdEnd}h. Sábados, domingos e feriados das ${weStart}h às ${weEnd}h.`;\n}\n\nfunction parseColor(color: string | undefined): { main: string; hover: string } {\n if (!color || !color.trim()) {\n return { main: DEFAULT_PRIMARY_COLOR, hover: DEFAULT_PRIMARY_COLOR_HOVER };\n }\n const c = color.trim();\n if (c.startsWith(\"#\") && c.length === 7) {\n const hex = c.slice(1);\n const r = Math.max(0, parseInt(hex.slice(0, 2), 16) - 18);\n const g = Math.max(0, parseInt(hex.slice(2, 4), 16) - 18);\n const b = Math.max(0, parseInt(hex.slice(4, 6), 16) - 18);\n const hover = `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n return { main: c, hover };\n }\n return { main: c, hover: c };\n}\n\nexport const WebChatPage: React.FC<WebChatProps> = ({\n token,\n apiBaseUrl,\n primaryColor,\n onStartChat,\n outOfHoursMessage,\n}) => {\n const baseUrl = apiBaseUrl?.trim() || DEFAULT_API_BASE_URL;\n const colors = parseColor(primaryColor);\n const [config, setConfig] = useState<WebChatConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [open, setOpen] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [form, setForm] = useState<ChatFormData>({\n name: \"\",\n email: \"\",\n phone: \"\",\n message: \"\",\n });\n\n const fetchConfig = useCallback(async () => {\n if (!token) return;\n setLoading(true);\n setError(null);\n try {\n const base = baseUrl.replace(/\\/$/, \"\");\n const res = await fetch(`${base}/channel/webchat/${encodeURIComponent(token)}`);\n if (!res.ok) {\n setError(\"Canal não encontrado.\");\n setConfig(null);\n return;\n }\n const data: WebChatConfig = await res.json();\n setConfig(data);\n } catch {\n setError(\"Não foi possível carregar o canal.\");\n setConfig(null);\n } finally {\n setLoading(false);\n }\n }, [token, baseUrl]);\n\n useEffect(() => {\n fetchConfig();\n }, [fetchConfig]);\n\n const isActive =\n config && (config.status === \"live\" || config.status === \"enable\");\n const outsideHours =\n config && config.restrictBySchedule && !isWithinSchedule(config);\n const showOutOfHours = isActive && outsideHours;\n const showForm = isActive && !outsideHours;\n\n const contentState: PanelContentState = loading\n ? \"loading\"\n : error\n ? \"error\"\n : config && !isActive\n ? \"inactive\"\n : showOutOfHours\n ? \"outOfHours\"\n : showForm && !submitted\n ? \"form\"\n : \"submitted\";\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || !form.name.trim()) return;\n if (!onStartChat) {\n setError(\n \"Início de conversa será via WebSocket. Configure onStartChat no componente.\"\n );\n return;\n }\n setSubmitting(true);\n try {\n await onStartChat({\n name: form.name.trim(),\n email: form.email.trim(),\n phone: form.phone.trim(),\n message: form.message.trim(),\n ...(config?.businessId && { businessId: config.businessId }),\n });\n setSubmitted(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Erro ao enviar.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!token) return null;\n\n return (\n <WebChatLayout\n open={open}\n onToggleOpen={() => setOpen((o) => !o)}\n primaryColor={colors.main}\n hoverColor={colors.hover}\n panelTitle={config?.name ?? \"Chat\"}\n contentState={contentState}\n errorMessage={error}\n outOfHoursMessage={\n outOfHoursMessage ?? (config ? formatScheduleMessage(config) : \"\")\n }\n formValue={form}\n onFormChange={setForm}\n onFormSubmit={handleSubmit}\n submitting={submitting}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/lib/components/atoms/button/styles.tsx","../src/lib/components/atoms/button/index.tsx","../src/lib/components/atoms/floating-button/FabIconButton.tsx","../src/lib/components/atoms/spinner/Spinner.tsx","../src/lib/components/molecules/floating-button-trigger/FabTrigger.tsx","../src/lib/components/molecules/out-of-hours-card/PanelHeader.tsx","../src/lib/components/molecules/out-of-hours-card/OutOfHoursCard.tsx","../src/lib/components/molecules/chat-form/ChatForm.tsx","../src/lib/components/organisms/webchat/constants.ts","../src/lib/components/organisms/chat-panel-content/ChatPanelContent.tsx","../src/lib/components/organisms/chat-panel/ChatPanel.tsx","../src/lib/components/organisms/layout/WebChatLayout.tsx","../src/lib/components/organisms/webchat/WebChatPage.tsx"],"names":["jsx","Box","IconButton","jsxs","Typography","Button","start","end"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Button, ButtonProps, styled } from \"@mui/material\";\nimport { ButtonHTMLAttributes } from \"react\";\n\nconst disabledStyles = {\n backgroundColor: \"#E0E0E0\",\n color: \"#9E9E9E\",\n borderColor: \"#BDBDBD\",\n};\n\nconst buttonVariants = {\n primary: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"none\",\n },\n secondary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n error: {\n background: \"transparent\",\n color: \"#D32F2F\",\n border: \"#D32F2F\",\n },\n danger: {\n background: \"#E61E2E\",\n color: \"#fff\",\n border: \"none\",\n },\n outlinedBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"#2196F3\",\n },\n outlinedGreen: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"#00BB7E\",\n },\n outlinedBlack: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"#000000DE\",\n },\n outlinedGrey: {\n background: \"transparent\",\n color: \"#59676D\",\n border: \"#0B0D0E52\",\n },\n textPrimary: {\n background: \"transparent\",\n color: \"#00BB7E\",\n border: \"transparent\",\n },\n textSecondary: {\n background: \"transparent\",\n color: \"#000000DE\",\n border: \"transparent\",\n },\n textBlue: {\n background: \"transparent\",\n color: \"#2196F3\",\n border: \"transparent\",\n },\n default: {\n background: \"#00BB7E\",\n color: \"#FFF\",\n border: \"#00BB7E\",\n },\n};\n\ninterface AtomButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"color\">,\n ButtonProps {\n buttonType?: keyof typeof buttonVariants;\n}\n\nexport const AtomButton = styled(Button, {\n shouldForwardProp: (prop) => prop !== \"buttonType\",\n})<AtomButtonProps>(({ buttonType = \"default\" }) => {\n\n return {\n }\n\n});","import * as React from 'react'\nimport { ChatButtonProps } from \"./types\";\nimport IComponent from \"../../../../types/component\";\nimport { AtomButton } from \"./styles\";\n\nexport const ChatButton: IComponent<ChatButtonProps> = ({ children = 'Chat', onClick, className, disabled }) => {\n return (\n <AtomButton\n onClick={onClick}\n disabled={disabled}\n className={className}\n style={{\n position: \"fixed\",\n bottom: \"20px\",\n right: \"20px\",\n backgroundColor: \"#007bff\",\n color: \"#fff\",\n display: \"flex\",\n borderRadius: \"50%\",\n width: \"60px\",\n height: \"60px\"\n }}\n >\n {children}\n </AtomButton>\n )\n}\n","import React from \"react\";\nimport { IconButton, IconButtonProps } from \"@mui/material\";\n\nexport interface FabIconButtonProps extends Omit<IconButtonProps, \"size\"> {\n bgColor: string;\n hoverColor: string;\n children: React.ReactNode;\n}\n\nexport const FabIconButton: React.FC<FabIconButtonProps> = ({\n bgColor,\n hoverColor,\n children,\n sx,\n ...rest\n}) => (\n <IconButton\n size=\"large\"\n sx={{\n width: 56,\n height: 56,\n bgcolor: bgColor,\n color: \"white\",\n \"&:hover\": { bgcolor: hoverColor },\n boxShadow: 2,\n ...sx,\n }}\n {...rest}\n >\n {children}\n </IconButton>\n);\n","import React from \"react\";\nimport { Box, CircularProgress } from \"@mui/material\";\n\nexport interface SpinnerProps {\n size?: number;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({ size = 32 }) => (\n <Box display=\"flex\" justifyContent=\"center\" py={3}>\n <CircularProgress size={size} />\n </Box>\n);\n","import React from \"react\";\nimport ChatIcon from \"@mui/icons-material/Chat\";\nimport { FabIconButton } from \"../../atoms\";\n\nexport interface FabTriggerProps {\n onClick: () => void;\n bgColor: string;\n hoverColor: string;\n}\n\nexport const FabTrigger: React.FC<FabTriggerProps> = ({\n onClick,\n bgColor,\n hoverColor,\n}) => (\n <FabIconButton\n onClick={onClick}\n bgColor={bgColor}\n hoverColor={hoverColor}\n sx={{ position: \"fixed\", bottom: 20, right: 20 }}\n >\n <ChatIcon />\n </FabIconButton>\n);\n","import React from \"react\";\nimport { Box, IconButton, Typography } from \"@mui/material\";\nimport CloseIcon from \"@mui/icons-material/Close\";\n\nexport interface PanelHeaderProps {\n title: string;\n onClose: () => void;\n}\n\n/**\n * Molécula: cabeçalho do painel com título e botão fechar.\n */\nexport const PanelHeader: React.FC<PanelHeaderProps> = ({ title, onClose }) => (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n p: 1.5,\n borderBottom: 1,\n borderColor: \"divider\",\n }}\n >\n <Typography variant=\"subtitle1\" fontWeight={600}>\n {title}\n </Typography>\n <IconButton size=\"small\" onClick={onClose} aria-label=\"Fechar\">\n <CloseIcon />\n </IconButton>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport ScheduleIcon from \"@mui/icons-material/Schedule\";\n\nexport interface OutOfHoursCardProps {\n message: string;\n bgColor: string;\n}\n\n/**\n * Molécula: card \"Fora do horário de atendimento\" com ícone e mensagem.\n */\nexport const OutOfHoursCard: React.FC<OutOfHoursCardProps> = ({\n message,\n bgColor,\n}) => (\n <Box\n sx={{\n textAlign: \"center\",\n py: 2,\n px: 1,\n bgcolor: bgColor,\n borderRadius: 1,\n color: \"white\",\n }}\n >\n <ScheduleIcon sx={{ fontSize: 48, opacity: 0.9, mb: 1 }} />\n <Typography variant=\"body1\" sx={{ fontWeight: 500, mb: 1 }}>\n Fora do horário de atendimento\n </Typography>\n <Typography variant=\"body2\" sx={{ opacity: 0.95 }}>\n {message}\n </Typography>\n </Box>\n);\n","import React from \"react\";\nimport { Box, Button, TextField } from \"@mui/material\";\n\nexport interface ChatFormData {\n name: string;\n email: string;\n phone: string;\n message: string;\n}\n\nexport interface ChatFormProps {\n value: ChatFormData;\n onChange: (data: ChatFormData) => void;\n onSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n submitLabel?: string;\n}\n\n/**\n * Molécula: formulário de início de chat (nome, e-mail, telefone, mensagem + enviar).\n */\nexport const ChatForm: React.FC<ChatFormProps> = ({\n value,\n onChange,\n onSubmit,\n submitting,\n submitLabel = \"Iniciar chat\",\n}) => (\n <form onSubmit={onSubmit}>\n <Box display=\"flex\" flexDirection=\"column\" gap={2}>\n <TextField\n label=\"Nome\"\n value={value.name}\n onChange={(e) => onChange({ ...value, name: e.target.value })}\n required\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"E-mail\"\n type=\"email\"\n value={value.email}\n onChange={(e) => onChange({ ...value, email: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Telefone\"\n value={value.phone}\n onChange={(e) => onChange({ ...value, phone: e.target.value })}\n fullWidth\n size=\"small\"\n />\n <TextField\n label=\"Mensagem\"\n value={value.message}\n onChange={(e) => onChange({ ...value, message: e.target.value })}\n multiline\n rows={3}\n fullWidth\n size=\"small\"\n />\n <Button\n type=\"submit\"\n variant=\"contained\"\n disabled={submitting || !value.name.trim()}\n fullWidth\n >\n {submitting ? \"Enviando…\" : submitLabel}\n </Button>\n </Box>\n </form>\n);\n","export const DEFAULT_PRIMARY_COLOR = \"#0D9488\";\nexport const DEFAULT_PRIMARY_COLOR_HOVER = \"#0F766E\";\n\ndeclare const __SYNCHAT_API_URL__: string;\nexport const DEFAULT_API_BASE_URL = __SYNCHAT_API_URL__;\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport { Spinner } from \"../../atoms\";\nimport { OutOfHoursCard, ChatForm } from \"../../molecules\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport type PanelContentState =\n | \"loading\"\n | \"error\"\n | \"inactive\"\n | \"outOfHours\"\n | \"form\"\n | \"submitted\";\n\nexport interface ChatPanelContentProps {\n state: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n outOfHoursBgColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: conteúdo do painel (loading, erro, inativo, fora do horário, formulário ou sucesso).\n */\nexport const ChatPanelContent: React.FC<ChatPanelContentProps> = ({\n state,\n errorMessage,\n outOfHoursMessage,\n outOfHoursBgColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => (\n <Box sx={{ p: 2, flex: 1 }}>\n {state === \"loading\" && <Spinner />}\n\n {state === \"error\" && errorMessage && (\n <Typography color=\"error\" variant=\"body2\">\n {errorMessage}\n </Typography>\n )}\n\n {state === \"inactive\" && (\n <Typography color=\"text.secondary\" variant=\"body2\">\n Este canal não está disponível no momento.\n </Typography>\n )}\n\n {state === \"outOfHours\" && (\n <OutOfHoursCard message={outOfHoursMessage} bgColor={outOfHoursBgColor} />\n )}\n\n {state === \"form\" && (\n <ChatForm\n value={formValue}\n onChange={onFormChange}\n onSubmit={onFormSubmit}\n submitting={submitting}\n />\n )}\n\n {state === \"submitted\" && (\n <Typography color=\"text.secondary\" variant=\"body2\" sx={{ py: 2 }}>\n Sua mensagem foi enviada. Em breve um atendente responderá.\n </Typography>\n )}\n </Box>\n);\n","import React from \"react\";\nimport { Box } from \"@mui/material\";\nimport { PanelHeader } from \"../../molecules\";\nimport { ChatPanelContent } from \"../chat-panel-content/ChatPanelContent\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface ChatPanelProps {\n open: boolean;\n title: string;\n onClose: () => void;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n primaryColor: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Organismo: painel do chat (cabeçalho + conteúdo).\n */\nexport const ChatPanel: React.FC<ChatPanelProps> = ({\n open,\n title,\n onClose,\n contentState,\n errorMessage,\n outOfHoursMessage,\n primaryColor,\n formValue,\n onFormChange,\n onFormSubmit,\n submitting,\n}) => {\n if (!open) return null;\n\n return (\n <Box\n sx={{\n position: \"fixed\",\n bottom: 90,\n right: 20,\n width: 380,\n maxWidth: \"calc(100vw - 40px)\",\n maxHeight: \"calc(100vh - 120px)\",\n overflow: \"auto\",\n bgcolor: \"background.paper\",\n borderRadius: 2,\n boxShadow: 6,\n zIndex: 1300,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <PanelHeader title={title} onClose={onClose} />\n <ChatPanelContent\n state={contentState}\n errorMessage={errorMessage}\n outOfHoursMessage={outOfHoursMessage}\n outOfHoursBgColor={primaryColor}\n formValue={formValue}\n onFormChange={onFormChange}\n onFormSubmit={onFormSubmit}\n submitting={submitting}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { FabTrigger } from \"../../molecules\";\nimport { ChatPanel } from \"../chat-panel/ChatPanel\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\n\nexport interface WebChatLayoutProps {\n open: boolean;\n onToggleOpen: () => void;\n primaryColor: string;\n hoverColor: string;\n panelTitle: string;\n contentState: PanelContentState;\n errorMessage: string | null;\n outOfHoursMessage: string;\n formValue: ChatFormData;\n onFormChange: (data: ChatFormData) => void;\n onFormSubmit: (e: React.FormEvent) => void;\n submitting: boolean;\n}\n\n/**\n * Template: layout do widget (FAB + painel condicional).\n */\nexport const WebChatLayout: React.FC<WebChatLayoutProps> = (props) => (\n <>\n <FabTrigger\n onClick={props.onToggleOpen}\n bgColor={props.primaryColor}\n hoverColor={props.hoverColor}\n />\n <ChatPanel\n open={props.open}\n title={props.panelTitle}\n onClose={props.onToggleOpen}\n contentState={props.contentState}\n errorMessage={props.errorMessage}\n outOfHoursMessage={props.outOfHoursMessage}\n primaryColor={props.primaryColor}\n formValue={props.formValue}\n onFormChange={props.onFormChange}\n onFormSubmit={props.onFormSubmit}\n submitting={props.submitting}\n />\n </>\n);\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_PRIMARY_COLOR,\n DEFAULT_PRIMARY_COLOR_HOVER,\n} from \"./constants\";\nimport { WebChatLayout } from \"../layout/WebChatLayout\";\nimport type { PanelContentState } from \"../chat-panel-content/ChatPanelContent\";\nimport type { ChatFormData } from \"../../molecules\";\nimport { WebChatConfig, WebChatProps } from \"./types\";\n\nconst DAY_MAP: Record<number, string> = {\n 0: \"SUNDAY\",\n 1: \"MONDAY\",\n 2: \"TUESDAY\",\n 3: \"WEDNESDAY\",\n 4: \"THURSDAY\",\n 5: \"FRIDAY\",\n 6: \"SATURDAY\",\n};\n\nfunction isWithinSchedule(config: WebChatConfig): boolean {\n if (!config.restrictBySchedule || !config.schedule) return true;\n const now = new Date();\n const day = DAY_MAP[now.getDay()];\n const time =\n String(now.getHours()).padStart(2, \"0\") +\n \":\" +\n String(now.getMinutes()).padStart(2, \"0\");\n const weekDays = config.schedule.weekDays ?? [\n \"MONDAY\",\n \"TUESDAY\",\n \"WEDNESDAY\",\n \"THURSDAY\",\n \"FRIDAY\",\n ];\n const isWeekday = weekDays.includes(day);\n if (isWeekday) {\n const start = config.schedule.weekdaysStart ?? \"07:00\";\n const end = config.schedule.weekdaysEnd ?? \"18:00\";\n return time >= start && time <= end;\n }\n const start = config.schedule.weekendStart ?? \"07:00\";\n const end = config.schedule.weekendEnd ?? \"13:00\";\n return time >= start && time <= end;\n}\n\nfunction formatScheduleMessage(config: WebChatConfig): string {\n if (!config.schedule) {\n return \"Nosso horário de atendimento é de segunda à sexta-feira das 07:00h às 18:00h. Sábados, domingos e feriados das 07:00h às 13:00h.\";\n }\n const wdStart = config.schedule.weekdaysStart ?? \"07:00\";\n const wdEnd = config.schedule.weekdaysEnd ?? \"18:00\";\n const weStart = config.schedule.weekendStart ?? \"07:00\";\n const weEnd = config.schedule.weekendEnd ?? \"13:00\";\n return `Nosso horário de atendimento é de segunda à sexta-feira das ${wdStart}h às ${wdEnd}h. Sábados, domingos e feriados das ${weStart}h às ${weEnd}h.`;\n}\n\nfunction parseColor(color: string | undefined): { main: string; hover: string } {\n if (!color || !color.trim()) {\n return { main: DEFAULT_PRIMARY_COLOR, hover: DEFAULT_PRIMARY_COLOR_HOVER };\n }\n const c = color.trim();\n if (c.startsWith(\"#\") && c.length === 7) {\n const hex = c.slice(1);\n const r = Math.max(0, parseInt(hex.slice(0, 2), 16) - 18);\n const g = Math.max(0, parseInt(hex.slice(2, 4), 16) - 18);\n const b = Math.max(0, parseInt(hex.slice(4, 6), 16) - 18);\n const hover = `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n return { main: c, hover };\n }\n return { main: c, hover: c };\n}\n\nexport const WebChatPage: React.FC<WebChatProps> = ({\n token,\n primaryColor,\n onStartChat,\n outOfHoursMessage,\n}) => {\n const baseUrl = DEFAULT_API_BASE_URL;\n const colors = parseColor(primaryColor);\n const [config, setConfig] = useState<WebChatConfig | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [open, setOpen] = useState(false);\n const [submitting, setSubmitting] = useState(false);\n const [submitted, setSubmitted] = useState(false);\n const [form, setForm] = useState<ChatFormData>({\n name: \"\",\n email: \"\",\n phone: \"\",\n message: \"\",\n });\n\n const fetchConfig = useCallback(async () => {\n if (!token) return;\n setLoading(true);\n setError(null);\n try {\n const base = baseUrl.replace(/\\/$/, \"\");\n const res = await fetch(`${base}/channel/webchat/${encodeURIComponent(token)}`);\n if (!res.ok) {\n setError(\"Canal não encontrado.\");\n setConfig(null);\n return;\n }\n const data: WebChatConfig = await res.json();\n setConfig(data);\n } catch {\n setError(\"Não foi possível carregar o canal.\");\n setConfig(null);\n } finally {\n setLoading(false);\n }\n }, [token, baseUrl]);\n\n useEffect(() => {\n fetchConfig();\n }, [fetchConfig]);\n\n const isActive =\n config && (config.status === \"live\" || config.status === \"enable\");\n const outsideHours =\n config && config.restrictBySchedule && !isWithinSchedule(config);\n const showOutOfHours = isActive && outsideHours;\n const showForm = isActive && !outsideHours;\n\n const contentState: PanelContentState = loading\n ? \"loading\"\n : error\n ? \"error\"\n : config && !isActive\n ? \"inactive\"\n : showOutOfHours\n ? \"outOfHours\"\n : showForm && !submitted\n ? \"form\"\n : \"submitted\";\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (submitting || !form.name.trim()) return;\n if (!onStartChat) {\n setError(\n \"Início de conversa será via WebSocket. Configure onStartChat no componente.\"\n );\n return;\n }\n setSubmitting(true);\n try {\n await onStartChat({\n name: form.name.trim(),\n email: form.email.trim(),\n phone: form.phone.trim(),\n message: form.message.trim(),\n ...(config?.businessId && { businessId: config.businessId }),\n });\n setSubmitted(true);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Erro ao enviar.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n if (!token) return null;\n\n return (\n <WebChatLayout\n open={open}\n onToggleOpen={() => setOpen((o) => !o)}\n primaryColor={colors.main}\n hoverColor={colors.hover}\n panelTitle={config?.name ?? \"Chat\"}\n contentState={contentState}\n errorMessage={error}\n outOfHoursMessage={\n outOfHoursMessage ?? (config ? formatScheduleMessage(config) : \"\")\n }\n formValue={form}\n onFormChange={setForm}\n onFormSubmit={handleSubmit}\n submitting={submitting}\n />\n );\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synchat/webchat",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "description": "Starter de biblioteca de componentes React + TypeScript com tsup.",
5
5
  "author": "synchat <contato@synchat.com.br>",
6
6
  "license": "MIT",
@@ -17,8 +17,7 @@
17
17
  "sideEffects": false,
18
18
  "files": [
19
19
  "dist",
20
- "README.md",
21
- "docs/synchat-logo.svg"
20
+ "README.md"
22
21
  ],
23
22
  "repository": {
24
23
  "type": "git",
@@ -1 +0,0 @@
1
- <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 537.1 104.02"><defs><style>.cls-1{fill:#00bb7e;}.cls-2{fill:#07272d;}</style></defs><path class="cls-1" d="M194.3,125c-5-2.21-13.39-5.74-16.78-9.93a16.7,16.7,0,0,1-3.58-13.91c2.34-11.28,13.14-16,23.71-16a30.67,30.67,0,0,1,21.52,8.93,3.37,3.37,0,0,1-.19,5l-7.34,6.3a3.4,3.4,0,0,1-4.54-.22,15,15,0,0,0-9.45-4.45,9.49,9.49,0,0,0-5.07.82,3.19,3.19,0,0,0-1.78,2c-.43,2.64,7.68,5.92,9.63,6.88,10,4.93,24.48,9.5,22.61,24-1.56,12-14.23,17.1-25,17.09-8.54,0-17.36-4-23.55-10.05a3.38,3.38,0,0,1,.17-5l7.39-6.52a3.49,3.49,0,0,1,4.5,0c3.95,3.46,8.93,6.41,14.2,5.9,1.41-.13,4.77-.81,5.09-2.5C206.4,130.59,196.47,126.06,194.3,125Z" transform="translate(-66.32 -66.32)"/><path class="cls-1" d="M266.32,144.59c-1.34,3.69-2.63,7.51-4.05,11.17-3.71,9.5-9.75,14.58-19.73,14.58H227.77a3.41,3.41,0,0,1-3.4-3.4v-9.47a3.41,3.41,0,0,1,3.4-3.4h12.65c4.3,0,5.38-2,6.54-5.45L226,90.78a3.19,3.19,0,0,1,3.2-4.56h9.88a3.67,3.67,0,0,1,3.2,2.24l5.5,15.17L254,120.79c1.06,2.91,2.78,2.91,3.84,0l8.68-23.9,3.06-8.43a3.65,3.65,0,0,1,3.2-2.24h9.87a3.19,3.19,0,0,1,3.2,4.56Z" transform="translate(-66.32 -66.32)"/><path class="cls-1" d="M328.2,85.54l.34,0c15.85,2.14,27.33,16.27,27.33,32.26v30.52a2.17,2.17,0,0,1-2.16,2.17H342a2.17,2.17,0,0,1-2.17-2.17V117.6c0-8-5.74-15.14-13.67-16.11A15.65,15.65,0,0,0,308.52,117v31.36a2.18,2.18,0,0,1-2.17,2.17H294.6a2.18,2.18,0,0,1-2.17-2.17V88.49a2.18,2.18,0,0,1,2.17-2.17h11.75a2.18,2.18,0,0,1,2.17,2.17h0c0,2.06,1.46,2.91,3.25,1.87l3.53-2A20.85,20.85,0,0,1,328.2,85.54Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M458.91,85.24h-.26a16.57,16.57,0,0,0-9,2.23l-4.1,2.36a2.67,2.67,0,0,1-4-2.31V69.72a3.42,3.42,0,0,0-3.41-3.4h-9.27a3.41,3.41,0,0,0-3.41,3.4v60.44a3.14,3.14,0,0,1-3.13,3.14H392c-7.64,0-13.83-6.63-13.83-14.8s6.19-14.79,13.83-14.79h22.41a2.84,2.84,0,0,0,2.84-2.83V89.39a2.85,2.85,0,0,0-2.84-2.83H392c-13.76,0-25.35,10-28.81,23.53a34.52,34.52,0,0,0,0,16.82c3.46,13.56,15,23.53,28.81,23.53h46.06a3.42,3.42,0,0,0,3.41-3.4V116.91a15.64,15.64,0,0,1,16.35-15.62c8.43.38,14.92,7.67,14.92,16.11V147a3.41,3.41,0,0,0,3.4,3.4h9.28a3.4,3.4,0,0,0,3.4-3.39V117.36C488.85,100.45,475.79,86.16,458.91,85.24Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M520.94,85.87l.31-.06a26.73,26.73,0,0,1,18.42,3.31l2.59,1.49c1.46.84,2.65.16,2.65-1.53V88a1.77,1.77,0,0,1,1.77-1.77h12.55A1.77,1.77,0,0,1,561,88v60.69a1.77,1.77,0,0,1-1.77,1.76H546.68a1.77,1.77,0,0,1-1.77-1.76h0a2.4,2.4,0,0,0-3.6-2.08L537.12,149a18.41,18.41,0,0,1-9.22,2.47h-.06a33.17,33.17,0,0,1-6.9-65.62Zm6.9,49.54a17.08,17.08,0,1,0-17.08-17.08A17.07,17.07,0,0,0,527.84,135.41Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M603.42,139.71v7.58a3.54,3.54,0,0,1-2.75,3.34c-4.73.92-9.87,1.38-14.73,0-8.94-2.62-15.28-10-15.28-20.18V74.59a3.41,3.41,0,0,1,3.41-3.41h9.27a3.41,3.41,0,0,1,3.41,3.41v9a2.64,2.64,0,0,0,2.64,2.64H600a3.41,3.41,0,0,1,3.4,3.41v7.21a3.41,3.41,0,0,1-3.4,3.4H589.08a2.33,2.33,0,0,0-2.33,2.34v24.13c-.8,8.28,4.82,11,12.67,9.66A3.29,3.29,0,0,1,603.42,139.71Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M113.69,137.69c-2.57-9.25-24.49-14.11-21.41-16.8h0a12.32,12.32,0,0,0,2.75.48h35.43a10,10,0,0,0,10-10.65,10.28,10.28,0,0,0-10.39-9.41H112.9a0,0,0,0,1-.05,0V85a0,0,0,0,1,.05,0h17c14.41,0,26.61,11.3,27,25.7a26.39,26.39,0,0,1-26.39,27.1Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M91,111.47h0a5.36,5.36,0,0,1,5.34-5.34h0a5.36,5.36,0,0,1,5.34,5.34h0a5.35,5.35,0,0,1-5.34,5.34h0A5.36,5.36,0,0,1,91,111.47Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M108,111.47h0a5.36,5.36,0,0,1,5.34-5.34h0a5.36,5.36,0,0,1,5.34,5.34h0a5.36,5.36,0,0,1-5.34,5.34h0A5.35,5.35,0,0,1,108,111.47Z" transform="translate(-66.32 -66.32)"/><path class="cls-2" d="M125,111.47h0a5.36,5.36,0,0,1,5.34-5.34h0a5.36,5.36,0,0,1,5.34,5.34h0a5.35,5.35,0,0,1-5.34,5.34h0A5.35,5.35,0,0,1,125,111.47Z" transform="translate(-66.32 -66.32)"/><path class="cls-1" d="M93.24,121.36l-.2-.09h0c-.25-.12-.53-.33-.74-.4l-.55-.2-1.16-.54A10,10,0,0,1,95.4,101.3h17.52V84.93H95.4a26.4,26.4,0,0,0-6,52.1c3.66,1.83,9.72,5.1,9.3,7.28-.32,1.69-3.68,2.37-5.09,2.5-5.27.51-10.25-2.44-14.2-5.9a3.49,3.49,0,0,0-4.5,0l-7.39,6.52a3.37,3.37,0,0,0-.16,5c6.18,6,15,10.05,23.54,10.05,10.75,0,23.41-5.05,25-17.09C117.72,130.86,103.24,126.29,93.24,121.36Z" transform="translate(-66.32 -66.32)"/></svg>