@solucx/react-native-solucx-widget 0.2.5 → 2.0.7

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.
Files changed (256) hide show
  1. package/README.md +526 -182
  2. package/lib/SoluCXWidget.d.ts +50 -7
  3. package/lib/SoluCXWidget.d.ts.map +1 -1
  4. package/lib/SoluCXWidget.js +105 -101
  5. package/lib/SoluCXWidget.js.map +1 -1
  6. package/lib/SoluCXWidgetHost.d.ts +3 -0
  7. package/lib/SoluCXWidgetHost.d.ts.map +1 -0
  8. package/lib/SoluCXWidgetHost.js +34 -0
  9. package/lib/SoluCXWidgetHost.js.map +1 -0
  10. package/lib/SoluCXWidgetView.d.ts +12 -0
  11. package/lib/SoluCXWidgetView.d.ts.map +1 -0
  12. package/lib/SoluCXWidgetView.js +61 -0
  13. package/lib/SoluCXWidgetView.js.map +1 -0
  14. package/lib/components/CloseButton.d.ts +1 -1
  15. package/lib/components/CloseButton.d.ts.map +1 -1
  16. package/lib/components/CloseButton.js +4 -1
  17. package/lib/components/CloseButton.js.map +1 -1
  18. package/lib/components/InlineWidget.d.ts.map +1 -1
  19. package/lib/components/InlineWidget.js +2 -7
  20. package/lib/components/InlineWidget.js.map +1 -1
  21. package/lib/components/ModalWidget.d.ts +1 -1
  22. package/lib/components/ModalWidget.d.ts.map +1 -1
  23. package/lib/components/ModalWidget.js +3 -16
  24. package/lib/components/ModalWidget.js.map +1 -1
  25. package/lib/components/OverlayWidget.d.ts.map +1 -1
  26. package/lib/components/OverlayWidget.js +5 -15
  27. package/lib/components/OverlayWidget.js.map +1 -1
  28. package/lib/components/index.d.ts +5 -0
  29. package/lib/components/index.d.ts.map +1 -0
  30. package/lib/components/index.js +12 -0
  31. package/lib/components/index.js.map +1 -0
  32. package/lib/constants/Constants.d.ts +11 -0
  33. package/lib/constants/Constants.d.ts.map +1 -1
  34. package/lib/constants/Constants.js +16 -1
  35. package/lib/constants/Constants.js.map +1 -1
  36. package/lib/{interfaces → domain}/WidgetCallbacks.d.ts +2 -2
  37. package/lib/domain/WidgetCallbacks.d.ts.map +1 -0
  38. package/lib/domain/WidgetCallbacks.js.map +1 -0
  39. package/{src/interfaces/WidgetData.ts → lib/domain/WidgetData.d.ts} +5 -2
  40. package/lib/domain/WidgetData.d.ts.map +1 -0
  41. package/lib/{interfaces → domain}/WidgetData.js.map +1 -1
  42. package/lib/domain/WidgetDisplayResult.d.ts +6 -0
  43. package/lib/domain/WidgetDisplayResult.d.ts.map +1 -0
  44. package/lib/domain/WidgetDisplayResult.js +3 -0
  45. package/lib/domain/WidgetDisplayResult.js.map +1 -0
  46. package/lib/domain/WidgetOptions.d.ts +27 -0
  47. package/lib/domain/WidgetOptions.d.ts.map +1 -0
  48. package/lib/domain/WidgetOptions.js +30 -0
  49. package/lib/domain/WidgetOptions.js.map +1 -0
  50. package/lib/domain/WidgetResponse.d.ts +5 -0
  51. package/lib/domain/WidgetResponse.d.ts.map +1 -0
  52. package/lib/{interfaces/WidgetOptions.js → domain/WidgetResponse.js} +1 -1
  53. package/lib/domain/WidgetResponse.js.map +1 -0
  54. package/lib/domain/WidgetSamplerLog.d.ts +12 -0
  55. package/lib/domain/WidgetSamplerLog.d.ts.map +1 -0
  56. package/lib/domain/WidgetSamplerLog.js.map +1 -0
  57. package/lib/{interfaces → domain}/index.d.ts +1 -2
  58. package/lib/domain/index.d.ts.map +1 -0
  59. package/lib/{interfaces → domain}/index.js.map +1 -1
  60. package/lib/hooks/index.d.ts +2 -2
  61. package/lib/hooks/index.d.ts.map +1 -1
  62. package/lib/hooks/index.js +5 -5
  63. package/lib/hooks/index.js.map +1 -1
  64. package/lib/hooks/useClientVersionCollector.d.ts +3 -0
  65. package/lib/hooks/useClientVersionCollector.d.ts.map +1 -0
  66. package/lib/{services/ClientVersionCollector.js → hooks/useClientVersionCollector.js} +7 -2
  67. package/lib/hooks/useClientVersionCollector.js.map +1 -0
  68. package/lib/hooks/useHeightAnimation.d.ts +0 -1
  69. package/lib/hooks/useHeightAnimation.d.ts.map +1 -1
  70. package/lib/hooks/useHeightAnimation.js +4 -2
  71. package/lib/hooks/useHeightAnimation.js.map +1 -1
  72. package/lib/hooks/useWidget.d.ts +13 -0
  73. package/lib/hooks/useWidget.d.ts.map +1 -0
  74. package/lib/hooks/useWidget.js +44 -0
  75. package/lib/hooks/useWidget.js.map +1 -0
  76. package/lib/hooks/useWidgetBootstrap.d.ts +21 -0
  77. package/lib/hooks/useWidgetBootstrap.d.ts.map +1 -0
  78. package/lib/hooks/useWidgetBootstrap.js +87 -0
  79. package/lib/hooks/useWidgetBootstrap.js.map +1 -0
  80. package/lib/hooks/useWidgetServices.d.ts +19 -0
  81. package/lib/hooks/useWidgetServices.d.ts.map +1 -0
  82. package/lib/hooks/useWidgetServices.js +34 -0
  83. package/lib/hooks/useWidgetServices.js.map +1 -0
  84. package/lib/hooks/useWidgetUI.d.ts +9 -0
  85. package/lib/hooks/useWidgetUI.d.ts.map +1 -0
  86. package/lib/hooks/useWidgetUI.js +33 -0
  87. package/lib/hooks/useWidgetUI.js.map +1 -0
  88. package/lib/index.d.ts +10 -11
  89. package/lib/index.d.ts.map +1 -1
  90. package/lib/index.js +13 -38
  91. package/lib/index.js.map +1 -1
  92. package/lib/services/UserIdentificationService.d.ts +3 -0
  93. package/lib/services/UserIdentificationService.d.ts.map +1 -0
  94. package/lib/services/UserIdentificationService.js +17 -0
  95. package/lib/services/UserIdentificationService.js.map +1 -0
  96. package/lib/services/WidgetBootstrapService.d.ts +12 -0
  97. package/lib/services/WidgetBootstrapService.d.ts.map +1 -0
  98. package/lib/services/{widgetBootstrapService.js → WidgetBootstrapService.js} +36 -15
  99. package/lib/services/WidgetBootstrapService.js.map +1 -0
  100. package/lib/services/WidgetEventService.d.ts +8 -0
  101. package/lib/services/WidgetEventService.d.ts.map +1 -0
  102. package/lib/services/WidgetEventService.js +14 -0
  103. package/lib/services/WidgetEventService.js.map +1 -0
  104. package/lib/services/WidgetStateManager.d.ts +20 -0
  105. package/lib/services/WidgetStateManager.d.ts.map +1 -0
  106. package/lib/services/WidgetStateManager.js +93 -0
  107. package/lib/services/WidgetStateManager.js.map +1 -0
  108. package/lib/services/WidgetValidationService.d.ts +17 -0
  109. package/lib/services/WidgetValidationService.d.ts.map +1 -0
  110. package/lib/services/WidgetValidationService.js +132 -0
  111. package/lib/services/WidgetValidationService.js.map +1 -0
  112. package/lib/services/events/EventHandlerFactory.d.ts +18 -0
  113. package/lib/services/events/EventHandlerFactory.d.ts.map +1 -0
  114. package/lib/services/events/EventHandlerFactory.js +67 -0
  115. package/lib/services/events/EventHandlerFactory.js.map +1 -0
  116. package/lib/services/events/EventHandlers.d.ts +10 -0
  117. package/lib/services/events/EventHandlers.d.ts.map +1 -0
  118. package/lib/services/events/EventHandlers.js +72 -0
  119. package/lib/services/events/EventHandlers.js.map +1 -0
  120. package/lib/services/events/index.d.ts +3 -0
  121. package/lib/services/events/index.d.ts.map +1 -0
  122. package/lib/services/events/index.js +21 -0
  123. package/lib/services/events/index.js.map +1 -0
  124. package/lib/services/height/HeightStrategies.d.ts +3 -0
  125. package/lib/services/height/HeightStrategies.d.ts.map +1 -0
  126. package/lib/services/height/HeightStrategies.js +14 -0
  127. package/lib/services/height/HeightStrategies.js.map +1 -0
  128. package/lib/services/storage/AsyncStorageService.d.ts +13 -0
  129. package/lib/services/storage/AsyncStorageService.d.ts.map +1 -0
  130. package/lib/services/storage/AsyncStorageService.js +73 -0
  131. package/lib/services/storage/AsyncStorageService.js.map +1 -0
  132. package/lib/services/storage/IStorageService.d.ts +30 -0
  133. package/lib/services/storage/IStorageService.d.ts.map +1 -0
  134. package/lib/services/storage/IStorageService.js +3 -0
  135. package/lib/services/storage/IStorageService.js.map +1 -0
  136. package/lib/services/storage/StorageIdBuilder.d.ts +11 -0
  137. package/lib/services/storage/StorageIdBuilder.d.ts.map +1 -0
  138. package/lib/services/storage/StorageIdBuilder.js +17 -0
  139. package/lib/services/storage/StorageIdBuilder.js.map +1 -0
  140. package/lib/services/storage/index.d.ts +3 -0
  141. package/lib/services/storage/index.d.ts.map +1 -0
  142. package/lib/services/storage/index.js +6 -0
  143. package/lib/services/storage/index.js.map +1 -0
  144. package/lib/styles/widgetStyles.d.ts +1 -1
  145. package/lib/styles/widgetStyles.d.ts.map +1 -1
  146. package/package.json +8 -2
  147. package/src/SoluCXWidget.ts +144 -0
  148. package/src/SoluCXWidgetHost.tsx +44 -0
  149. package/src/SoluCXWidgetView.tsx +97 -0
  150. package/src/__tests__/ClientVersionCollector.test.ts +5 -5
  151. package/src/__tests__/OverlayWidget.rendering.test.tsx +12 -14
  152. package/src/__tests__/SoluCXWidget.rendering.test.tsx +103 -60
  153. package/src/__tests__/SoluCXWidget.test.ts +448 -0
  154. package/src/__tests__/WidgetValidationService.test.ts +408 -0
  155. package/src/__tests__/e2e/widget-lifecycle.test.tsx +14 -23
  156. package/src/__tests__/index.test.tsx +39 -0
  157. package/src/__tests__/integration/webview-communication-simple.test.tsx +8 -6
  158. package/src/__tests__/integration/webview-communication.test.tsx +127 -130
  159. package/src/__tests__/normalizeWidgetOptions.test.ts +80 -0
  160. package/src/__tests__/useWidgetBootstrap.test.ts +634 -0
  161. package/src/__tests__/useWidgetState.test.ts +56 -13
  162. package/src/__tests__/widgetBootstrapService.test.ts +15 -17
  163. package/src/components/CloseButton.tsx +6 -2
  164. package/src/components/InlineWidget.tsx +4 -9
  165. package/src/components/ModalWidget.tsx +15 -45
  166. package/src/components/OverlayWidget.tsx +5 -15
  167. package/src/components/index.ts +4 -0
  168. package/src/constants/Constants.ts +15 -0
  169. package/src/{interfaces → domain}/WidgetCallbacks.ts +2 -2
  170. package/{lib/interfaces/WidgetData.d.ts → src/domain/WidgetData.ts} +3 -2
  171. package/src/domain/WidgetDisplayResult.ts +16 -0
  172. package/src/domain/WidgetOptions.ts +53 -0
  173. package/src/domain/WidgetResponse.ts +5 -0
  174. package/src/domain/WidgetSamplerLog.ts +11 -0
  175. package/src/{interfaces → domain}/index.ts +1 -2
  176. package/src/hooks/index.ts +2 -2
  177. package/src/{services/ClientVersionCollector.ts → hooks/useClientVersionCollector.ts} +6 -0
  178. package/src/hooks/useHeightAnimation.ts +6 -3
  179. package/src/hooks/useWidget.ts +46 -0
  180. package/src/hooks/useWidgetBootstrap.ts +117 -0
  181. package/src/hooks/useWidgetServices.ts +44 -0
  182. package/src/hooks/useWidgetUI.ts +38 -0
  183. package/src/index.ts +16 -11
  184. package/src/services/UserIdentificationService.ts +14 -0
  185. package/src/services/{widgetBootstrapService.ts → WidgetBootstrapService.ts} +43 -19
  186. package/src/services/WidgetEventService.ts +15 -0
  187. package/src/services/WidgetStateManager.ts +115 -0
  188. package/src/services/WidgetValidationService.ts +149 -0
  189. package/src/services/events/EventHandlerFactory.ts +70 -0
  190. package/src/services/events/EventHandlers.ts +67 -0
  191. package/src/services/events/index.ts +2 -0
  192. package/src/services/height/HeightStrategies.ts +15 -0
  193. package/src/services/storage/AsyncStorageService.ts +74 -0
  194. package/src/services/storage/IStorageService.ts +32 -0
  195. package/src/services/storage/StorageIdBuilder.ts +15 -0
  196. package/src/services/storage/index.ts +2 -0
  197. package/src/styles/widgetStyles.ts +1 -1
  198. package/README.intern.md +0 -490
  199. package/lib/constants/webViewConstants.d.ts +0 -12
  200. package/lib/constants/webViewConstants.d.ts.map +0 -1
  201. package/lib/constants/webViewConstants.js +0 -19
  202. package/lib/constants/webViewConstants.js.map +0 -1
  203. package/lib/hooks/useWidgetHeight.d.ts +0 -13
  204. package/lib/hooks/useWidgetHeight.d.ts.map +0 -1
  205. package/lib/hooks/useWidgetHeight.js +0 -21
  206. package/lib/hooks/useWidgetHeight.js.map +0 -1
  207. package/lib/hooks/useWidgetState.d.ts +0 -15
  208. package/lib/hooks/useWidgetState.d.ts.map +0 -1
  209. package/lib/hooks/useWidgetState.js +0 -79
  210. package/lib/hooks/useWidgetState.js.map +0 -1
  211. package/lib/interfaces/WidgetCallbacks.d.ts.map +0 -1
  212. package/lib/interfaces/WidgetCallbacks.js.map +0 -1
  213. package/lib/interfaces/WidgetData.d.ts.map +0 -1
  214. package/lib/interfaces/WidgetOptions.d.ts +0 -9
  215. package/lib/interfaces/WidgetOptions.d.ts.map +0 -1
  216. package/lib/interfaces/WidgetOptions.js.map +0 -1
  217. package/lib/interfaces/WidgetResponse.d.ts +0 -10
  218. package/lib/interfaces/WidgetResponse.d.ts.map +0 -1
  219. package/lib/interfaces/WidgetResponse.js +0 -12
  220. package/lib/interfaces/WidgetResponse.js.map +0 -1
  221. package/lib/interfaces/WidgetSamplerLog.d.ts +0 -7
  222. package/lib/interfaces/WidgetSamplerLog.d.ts.map +0 -1
  223. package/lib/interfaces/WidgetSamplerLog.js.map +0 -1
  224. package/lib/interfaces/index.d.ts.map +0 -1
  225. package/lib/services/ClientVersionCollector.d.ts +0 -2
  226. package/lib/services/ClientVersionCollector.d.ts.map +0 -1
  227. package/lib/services/ClientVersionCollector.js.map +0 -1
  228. package/lib/services/storage.d.ts +0 -8
  229. package/lib/services/storage.d.ts.map +0 -1
  230. package/lib/services/storage.js +0 -23
  231. package/lib/services/storage.js.map +0 -1
  232. package/lib/services/widgetBootstrapService.d.ts +0 -6
  233. package/lib/services/widgetBootstrapService.d.ts.map +0 -1
  234. package/lib/services/widgetBootstrapService.js.map +0 -1
  235. package/lib/services/widgetEventService.d.ts +0 -19
  236. package/lib/services/widgetEventService.d.ts.map +0 -1
  237. package/lib/services/widgetEventService.js +0 -79
  238. package/lib/services/widgetEventService.js.map +0 -1
  239. package/lib/services/widgetValidationService.d.ts +0 -18
  240. package/lib/services/widgetValidationService.d.ts.map +0 -1
  241. package/lib/services/widgetValidationService.js +0 -71
  242. package/lib/services/widgetValidationService.js.map +0 -1
  243. package/src/SoluCXWidget.tsx +0 -179
  244. package/src/constants/webViewConstants.ts +0 -15
  245. package/src/hooks/useWidgetHeight.ts +0 -38
  246. package/src/hooks/useWidgetState.ts +0 -101
  247. package/src/interfaces/WidgetOptions.ts +0 -8
  248. package/src/interfaces/WidgetResponse.ts +0 -15
  249. package/src/interfaces/WidgetSamplerLog.ts +0 -6
  250. package/src/services/storage.ts +0 -21
  251. package/src/services/widgetEventService.ts +0 -110
  252. package/src/services/widgetValidationService.ts +0 -102
  253. /package/lib/{interfaces → domain}/WidgetCallbacks.js +0 -0
  254. /package/lib/{interfaces → domain}/WidgetData.js +0 -0
  255. /package/lib/{interfaces → domain}/WidgetSamplerLog.js +0 -0
  256. /package/lib/{interfaces → domain}/index.js +0 -0
package/README.intern.md DELETED
@@ -1,490 +0,0 @@
1
- # SoluCX Widget
2
-
3
- Um widget React Native modular para coleta de feedback e pesquisas, desenvolvido seguindo princípios de Clean Code e arquitetura escalável.
4
-
5
- ## 📋 Visão Geral
6
-
7
- O SoluCX Widget oferece quatro modos de renderização flexíveis para integração em aplicações React Native/Expo:
8
-
9
- - **Top**: Widget fixo no topo da tela
10
- - **Bottom**: Widget fixo na parte inferior
11
- - **Modal**: Widget em sobreposição centralizada
12
- - **Inline**: Widget integrado ao fluxo do layout
13
-
14
- ## 🏗️ Arquitetura
15
-
16
- ### Componentes Principais
17
-
18
- - [`SoluCXWidget.tsx`](src/SoluCXWidget.tsx) - Componente principal
19
- - [`useWidgetState.ts`](src/hooks/useWidgetState.ts) - Hook para gerenciamento de estado
20
- - [`useWidgetHeight.ts`](src/hooks/useWidgetHeight.ts) - Hook para gerenciamento de altura (dinâmica/fixa)
21
- - [`WidgetEventService`](src/services/widgetEventService.ts) - Serviço de eventos
22
- - [`StorageService`](src/services/storage.ts) - Persistência local
23
-
24
- ### Estrutura de Arquivos
25
-
26
- ```
27
- src/
28
- ├── SoluCXWidget.tsx # Componente principal
29
- ├── components/ # Componentes especializados
30
- │ ├── ModalWidget.tsx # Widget modal
31
- │ ├── InlineWidget.tsx # Widget inline
32
- │ └── OverlayWidget.tsx # Widget overlay (top/bottom)
33
- ├── hooks/ # Hooks personalizados
34
- │ ├── useWidgetState.ts # Estado do widget
35
- │ ├── useWidgetHeight.ts # Gerenciamento de altura (dinâmica/fixa)
36
- │ └── useHeightAnimation.ts # Animação de altura
37
- ├── services/ # Serviços
38
- │ ├── widgetEventService.ts # Gerenciamento de eventos
39
- │ └── storage.ts # Persistência de dados
40
- ├── interfaces/ # Tipos TypeScript
41
- │ ├── index.ts # Exports centralizados
42
- │ ├── WidgetData.ts # Dados do widget
43
- │ ├── WidgetOptions.ts # Opções de configuração
44
- │ ├── WidgetResponse.ts # Respostas e erros
45
- │ └── WidgetSamplerLog.ts # Log de tentativas
46
- ├── styles/ # Estilos
47
- │ └── widgetStyles.ts # Estilos por tipo
48
- ├── utils/ # Utilitários
49
- │ └── urlUtils.ts # Construção de URLs
50
- ├── constants/ # Constantes
51
- │ └── webViewConstants.ts # URLs e configurações
52
- └── __tests__/ # Testes
53
- ├── urlUtils.test.ts
54
- └── useWidgetState.test.ts
55
- ```
56
-
57
- ## 🚀 Instalação e Uso
58
-
59
- ### Instalação
60
-
61
- ```bash
62
- # Como dependência local (monorepo)
63
- npm install solucx_widget@file:./modules/solucx_widget
64
-
65
- # Dependências peer necessárias
66
- npm install react-native-webview @react-native-async-storage/async-storage
67
- ```
68
-
69
- ### Uso Básico
70
-
71
- ```tsx
72
- import React from 'react';
73
- import { SoluCXWidget } from 'solucx_widget';
74
-
75
- export default function MyComponent() {
76
- return (
77
- <SoluCXWidget
78
- soluCXKey='sua-chave-solucx'
79
- type='bottom' // 'top' | 'bottom' | 'modal' | 'inline'
80
- data={{
81
- journey: 'nome_da_jornada',
82
- name: 'Nome do Cliente',
83
- email: 'cliente@email.com',
84
- phone: '11999999999',
85
- store_id: '1',
86
- employee_id: '1',
87
- amount: 100,
88
- param_REGIAO: 'SUDESTE'
89
- }}
90
- options={{
91
- height: 400
92
- }}
93
- />
94
- );
95
- }
96
- ```
97
-
98
- ## 🎛️ API do Componente
99
-
100
- ### Props do SoluCXWidget
101
-
102
- ```typescript
103
- interface SoluCXWidgetProps {
104
- soluCXKey: string; // Chave de autenticação SoluCX
105
- type: WidgetType; // Modo de renderização
106
- data: WidgetData; // Dados do cliente/transação
107
- options: WidgetOptions; // Configurações do widget
108
- }
109
- ```
110
-
111
- ### Tipos de Widget
112
-
113
- ```typescript
114
- type WidgetType = 'bottom' | 'top' | 'inline' | 'modal';
115
- ```
116
-
117
- ### Dados do Widget
118
-
119
- ```typescript
120
- interface WidgetData {
121
- // Identificadores
122
- transaction_id?: string;
123
- customer_id?: string;
124
-
125
- // Dados do cliente
126
- name?: string;
127
- email?: string;
128
- phone?: string;
129
- birth_date?: string;
130
- document?: string;
131
-
132
- // Dados da transação
133
- store_id?: string;
134
- store_name?: string;
135
- employee_id?: string;
136
- employee_name?: string;
137
- amount?: number;
138
- score?: number;
139
-
140
- // Parâmetros customizados
141
- journey?: string;
142
- [key: string]: string | number | undefined;
143
- }
144
- ```
145
-
146
- ### Opções de Configuração
147
-
148
- ```typescript
149
- interface WidgetOptions {
150
- height?: number; // Altura fixa em pontos (não pixels)
151
- // Se não fornecido: altura dinâmica baseada em eventos de resize
152
- // Se fornecido: altura fixa para todos os tipos de widget
153
- retry?: {
154
- // Configuração de retry
155
- attempts?: number; // Número de tentativas
156
- interval?: number; // Intervalo entre tentativas (ms)
157
- };
158
- waitDelayAfterRating?: number; // Delay após avaliação (ms)
159
- }
160
- ```
161
-
162
- **⚙️ Gerenciamento de Altura:**
163
-
164
- O widget possui dois modos de altura:
165
-
166
- 1. **Altura Dinâmica (padrão)**: Quando `height` não é fornecido, o widget se ajusta automaticamente através de eventos `FORM_RESIZE` do conteúdo. Funciona para todos os tipos (`bottom`, `top`, `inline`, `modal`).
167
-
168
- 2. **Altura Fixa**: Quando `height` é especificado, o valor é fixo e eventos de resize são ignorados. Funciona para todos os tipos de widget.
169
-
170
- ```tsx
171
- // Altura dinâmica - se adapta ao conteúdo
172
- <SoluCXWidget
173
- type="bottom"
174
- options={{}} // height não especificado
175
- {...props}
176
- />
177
-
178
- // Altura fixa de 400 pontos
179
- <SoluCXWidget
180
- type="modal"
181
- options={{ height: 400 }} // altura fixa
182
- {...props}
183
- />
184
- ```
185
-
186
- **⚠️ Importante**: O valor de `height` é sempre em **pontos** (points), não pixels, seguindo o padrão do React e React Native. O sistema operacional converte automaticamente para pixels considerando a densidade da tela do dispositivo.
187
-
188
- ## 🔄 Sistema de Eventos
189
-
190
- O widget comunica através de mensagens WebView bidirecionais:
191
-
192
- ### Eventos Suportados
193
-
194
- ```typescript
195
- type EventKey =
196
- | 'FORM_OPENED' // Widget foi aberto
197
- | 'FORM_CLOSE' // Usuário fechou o widget
198
- | 'FORM_ERROR' // Erro no carregamento
199
- | 'FORM_RESIZE' // Widget redimensionado
200
- | 'FORM_PAGECHANGED' // Mudança de página
201
- | 'QUESTION_ANSWERED' // Pergunta respondida
202
- | 'FORM_COMPLETED' // Formulário concluído
203
- | 'FORM_PARTIALCOMPLETED'; // Completado parcialmente
204
- ```
205
-
206
- ### Tratamento de Eventos
207
-
208
- Os eventos são processados automaticamente pelo [`WidgetEventService`](src/services/widgetEventService.ts):
209
-
210
- ```typescript
211
- const eventService = new WidgetEventService(
212
- setIsWidgetVisible, // Função para controlar visibilidade
213
- resize, // Função para redimensionar
214
- open // Função para abrir widget
215
- );
216
- ```
217
-
218
- ## 💾 Persistência de Dados
219
-
220
- O widget utiliza [`AsyncStorage`](@react-native-async-storage/async-storage) para persistir:
221
-
222
- - **Histórico de tentativas**: Controla quantas vezes o widget foi exibido
223
- - **Última avaliação**: Data da última interação
224
- - **Controle de frequência**: Evita spam de widgets
225
-
226
- ### Estrutura dos Dados
227
-
228
- ```typescript
229
- interface WidgetSamplerLog {
230
- attempts: number; // Número de tentativas
231
- lastAttempt: number; // Timestamp da última tentativa
232
- lastRating: number; // Timestamp da última avaliação
233
- lastParcial: number; // Timestamp do último parcial
234
- }
235
- ```
236
-
237
- ## 🎨 Customização de Estilos
238
-
239
- ### Estilos por Tipo
240
-
241
- Cada tipo de widget possui estilos específicos definidos em [`widgetStyles.ts`](src/styles/widgetStyles.ts):
242
-
243
- ```typescript
244
- export const getWidgetStyles = (type: WidgetType) => {
245
- const styleMap = {
246
- bottom: { container: styles.wrapper, content: styles.bottom },
247
- top: { container: styles.wrapper, content: styles.top },
248
- inline: { container: styles.inlineWrapper, content: styles.inline },
249
- modal: { container: styles.wrapper, content: styles.inline }
250
- };
251
-
252
- return styleMap[type] || styleMap.bottom;
253
- };
254
- ```
255
-
256
- ### Características Visuais
257
-
258
- - **Bottom/Top**: Position absolute com z-index elevado
259
- - **Modal**: Overlay com background semitransparente
260
- - **Inline**: Integrado ao fluxo normal do layout
261
-
262
- ## 🧪 Testes
263
-
264
- ### Executando Testes
265
-
266
- ```bash
267
- # Todos os testes
268
- npm test
269
-
270
- # Teste específico
271
- npm test -- urlUtils.test.ts
272
- npm test -- useWidgetState.test.ts
273
- ```
274
-
275
- ### Cobertura de Testes
276
-
277
- - ✅ Construção de URLs
278
- - ✅ Gerenciamento de eventos
279
- - ✅ Estados do widget
280
- - ✅ Persistência de dados
281
-
282
- ## ⚙️ Configuração
283
-
284
- ### Constantes
285
-
286
- Configurações centralizadas em [`webViewConstants.ts`](src/constants/webViewConstants.ts):
287
-
288
- ```typescript
289
- export const BASE_URL = 'https://survey-link.solucx.com.br/link';
290
- export const STORAGE_KEY = '@solucxWidgetLog';
291
- export const MIN_HEIGHT = 200;
292
- export const FIXED_Z_INDEX = 9999;
293
- export const MODAL_Z_INDEX = 10000;
294
- ```
295
-
296
- ### JavaScript Injection
297
-
298
- Listener para comunicação WebView:
299
-
300
- ```typescript
301
- export const WEB_VIEW_MESSAGE_LISTENER = `
302
- window.addEventListener('message', function(event) {
303
- window.ReactNativeWebView.postMessage(event.data);
304
- });
305
- `;
306
- ```
307
-
308
- ## 🚨 Considerações Importantes
309
-
310
- ### 1. **Comportamento de Posicionamento**
311
-
312
- ⚠️ **Ponto Crítico**: A posição no JSX **não determina** onde widgets `top`, `bottom` e `modal` aparecem:
313
-
314
- ```tsx
315
- // ❌ Isso NÃO faz o widget aparecer no meio
316
- <Text>Conteúdo antes</Text>
317
- <SoluCXWidget type="bottom" {...props} /> {/* Sempre aparece embaixo */}
318
- <Text>Conteúdo depois</Text>
319
-
320
- // ✅ Apenas o tipo "inline" respeita a posição no código
321
- <Text>Conteúdo antes</Text>
322
- <SoluCXWidget type="inline" {...props} /> {/* Aparece aqui */}
323
- <Text>Conteúdo depois</Text>
324
- ```
325
-
326
- ### 2. **Performance**
327
-
328
- - Widget usa WebView interna (overhead de performance)
329
- - Carregamento lazy das pesquisas
330
- - Cache automático via AsyncStorage
331
- - JavaScript injection para comunicação
332
-
333
- ### 3. **Segurança**
334
-
335
- - **Chaves API**: Nunca hardcode em produção
336
- - **Dados sensíveis**: Não são logados automaticamente
337
- - **URLs**: Validadas antes do carregamento
338
- - **HTTPS**: Obrigatório para comunicação
339
-
340
- ### 4. **Limitações Técnicas**
341
-
342
- - Requer conexão com internet
343
- - Dependente do WebView do sistema
344
- - Eventos assíncronos (não bloqueantes)
345
- - Storage limitado do dispositivo
346
-
347
- ## 📝 Desenvolvimento
348
-
349
- ### Adicionando Novos Tipos
350
-
351
- 1. **Estenda o tipo WidgetType**:
352
-
353
- ```typescript
354
- // modules/solucx_widget/src/interfaces/index.ts
355
- export type WidgetType = 'bottom' | 'top' | 'inline' | 'modal' | 'novo_tipo';
356
- ```
357
-
358
- 2. **Adicione estilos correspondentes**:
359
-
360
- ```typescript
361
- // modules/solucx_widget/src/styles/widgetStyles.ts
362
- const styleMap = {
363
- // ... estilos existentes
364
- novo_tipo: { container: styles.novoWrapper, content: styles.novoContent }
365
- };
366
- ```
367
-
368
- 3. **Implemente lógica no componente principal**:
369
-
370
- ```typescript
371
- // modules/solucx_widget/src/SoluCXWidget.tsx
372
- if (type === 'novo_tipo') {
373
- return <NovoTipoWidget>{/* ... */}</NovoTipoWidget>;
374
- }
375
- ```
376
-
377
- ### Adicionando Novos Eventos
378
-
379
- 1. **Estenda EventKey**:
380
-
381
- ```typescript
382
- // modules/solucx_widget/src/interfaces/index.ts
383
- export type EventKey = 'FORM_OPENED' | 'NOVO_EVENTO'; // Novo evento
384
- ```
385
-
386
- 2. **Implemente handler**:
387
-
388
- ```typescript
389
- // modules/solucx_widget/src/services/widgetEventService.ts
390
- private executeEvent(eventKey: EventKey, value: string): WidgetResponse {
391
- const eventHandlers = {
392
- // ... handlers existentes
393
- NOVO_EVENTO: (value: string) => this.handleNovoEvento(value),
394
- };
395
- }
396
- ```
397
-
398
- 3. **Adicione testes**:
399
-
400
- ```typescript
401
- // modules/solucx_widget/src/__tests__/widgetEventService.test.ts
402
- it('should handle NOVO_EVENTO correctly', () => {
403
- const result = service.handleMessage('NOVO_EVENTO-data', true);
404
- expect(result).toEqual({ status: 'success' });
405
- });
406
- ```
407
-
408
- ## 🔍 Troubleshooting
409
-
410
- ### Problemas Comuns
411
-
412
- #### 1. **Widget não aparece**
413
-
414
- ```bash
415
- # Verificações:
416
- ✅ Chave SoluCX válida?
417
- ✅ Conectividade com internet?
418
- ✅ Logs do WebView no console?
419
- ✅ Evento FORM_OPENED sendo disparado?
420
- ```
421
-
422
- #### 2. **Eventos não funcionam**
423
-
424
- ```bash
425
- # Verificações:
426
- ✅ JavaScript listener injetado?
427
- ✅ Formato das mensagens correto?
428
- ✅ WebView carregou completamente?
429
- ✅ postMessage funcionando?
430
- ```
431
-
432
- #### 3. **Layout quebrado**
433
-
434
- ```bash
435
- # Verificações:
436
- ✅ Dimensões adequadas para o dispositivo?
437
- ✅ Estilos corretos para o tipo?
438
- ✅ Z-index conflitando?
439
- ✅ SafeArea configurada?
440
- ```
441
-
442
- #### 4. **Storage não persiste**
443
-
444
- ```bash
445
- # Verificações:
446
- ✅ AsyncStorage instalado?
447
- ✅ Permissões de storage?
448
- ✅ Dados sendo serializados corretamente?
449
- ✅ Chaves de storage únicas?
450
- ```
451
-
452
- ### Debug Avançado
453
-
454
- ```typescript
455
- // Habilitar logs detalhados
456
- console.log('Widget event received:', processedKey, value);
457
-
458
- // Verificar dados persistidos
459
- const data = await storageService.read();
460
- console.log('Stored data:', data);
461
- ```
462
-
463
- ## 📚 Dependências
464
-
465
- ### Peer Dependencies
466
-
467
- ```json
468
- {
469
- "react-native-webview": "^13.0.0",
470
- "@react-native-async-storage/async-storage": "^2.0.0",
471
- "react": "^19.0.0",
472
- "react-native": "^0.79.0"
473
- }
474
- ```
475
-
476
- ### Compatibilidade
477
-
478
- - **React Native**: 0.70+
479
- - **Expo**: 50+
480
- - **iOS**: 11+
481
- - **Android**: API 21+
482
- - **Web**: Suporte limitado (WebView)
483
-
484
- ## 📄 Licença
485
-
486
- Este projeto é privado e proprietário da SoluCX.
487
-
488
- ---
489
-
490
- **Desenvolvido com ❤️ pela equipe SoluCX**
@@ -1,12 +0,0 @@
1
- export declare const BASE_URL = "https://survey-link.solucx.com.br/link";
2
- export declare const RATING_FORM_ENDPOINT = "https://widget-api.solucx.com.br/widget/preflight";
3
- export declare const STORAGE_KEY = "@solucxWidgetLog";
4
- export declare const DEFAULT_CHANNEL_NUMBER = 1;
5
- export declare const DEFAULT_CHANNEL = "widget";
6
- export declare const DEFAULT_WIDTH = 380;
7
- export declare const MIN_HEIGHT = 200;
8
- export declare const FIXED_Z_INDEX = 9999;
9
- export declare const MODAL_Z_INDEX = 10000;
10
- export declare const DESIGN_HEIGHT = 700;
11
- export declare const WEB_VIEW_MESSAGE_LISTENER = "\n window.addEventListener('message', function(event) {\n window.ReactNativeWebView.postMessage(event.data);\n });\n";
12
- //# sourceMappingURL=webViewConstants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webViewConstants.d.ts","sourceRoot":"","sources":["../../src/constants/webViewConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,2CAA2C,CAAC;AACjE,eAAO,MAAM,oBAAoB,sDAAsD,CAAC;AACxF,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,aAAa,OAAO,CAAC;AAClC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,yBAAyB,8HAIrC,CAAC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WEB_VIEW_MESSAGE_LISTENER = exports.DESIGN_HEIGHT = exports.MODAL_Z_INDEX = exports.FIXED_Z_INDEX = exports.MIN_HEIGHT = exports.DEFAULT_WIDTH = exports.DEFAULT_CHANNEL = exports.DEFAULT_CHANNEL_NUMBER = exports.STORAGE_KEY = exports.RATING_FORM_ENDPOINT = exports.BASE_URL = void 0;
4
- exports.BASE_URL = 'https://survey-link.solucx.com.br/link';
5
- exports.RATING_FORM_ENDPOINT = 'https://widget-api.solucx.com.br/widget/preflight';
6
- exports.STORAGE_KEY = '@solucxWidgetLog';
7
- exports.DEFAULT_CHANNEL_NUMBER = 1;
8
- exports.DEFAULT_CHANNEL = 'widget';
9
- exports.DEFAULT_WIDTH = 380;
10
- exports.MIN_HEIGHT = 200;
11
- exports.FIXED_Z_INDEX = 9999;
12
- exports.MODAL_Z_INDEX = 10000;
13
- exports.DESIGN_HEIGHT = 700;
14
- exports.WEB_VIEW_MESSAGE_LISTENER = `
15
- window.addEventListener('message', function(event) {
16
- window.ReactNativeWebView.postMessage(event.data);
17
- });
18
- `;
19
- //# sourceMappingURL=webViewConstants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webViewConstants.js","sourceRoot":"","sources":["../../src/constants/webViewConstants.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAG,wCAAwC,CAAC;AACpD,QAAA,oBAAoB,GAAG,mDAAmD,CAAC;AAC3E,QAAA,WAAW,GAAG,kBAAkB,CAAC;AACjC,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAC3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,UAAU,GAAG,GAAG,CAAC;AACjB,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,aAAa,GAAG,KAAK,CAAC;AACtB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,yBAAyB,GAAG;;;;CAIxC,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { WidgetOptions } from '../interfaces';
2
- interface UseWidgetHeightProps {
3
- options?: WidgetOptions;
4
- initialHeight?: number;
5
- }
6
- interface UseWidgetHeightReturn {
7
- height: number;
8
- isFixedHeight: boolean;
9
- handleResize: (newHeight: number) => void;
10
- }
11
- export declare const useWidgetHeight: ({ options, initialHeight }: UseWidgetHeightProps) => UseWidgetHeightReturn;
12
- export {};
13
- //# sourceMappingURL=useWidgetHeight.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWidgetHeight.d.ts","sourceRoot":"","sources":["../../src/hooks/useWidgetHeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,eAAe,GAAI,4BAG7B,oBAAoB,KAAG,qBAoBzB,CAAC"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useWidgetHeight = void 0;
4
- const react_1 = require("react");
5
- const useWidgetHeight = ({ options, initialHeight = 300 }) => {
6
- const [dynamicHeight, setDynamicHeight] = (0, react_1.useState)(initialHeight);
7
- const hasFixedHeight = typeof options?.height === 'number';
8
- const height = hasFixedHeight ? options.height : dynamicHeight;
9
- const handleResize = (0, react_1.useCallback)((newHeight) => {
10
- if (!hasFixedHeight && newHeight > 0) {
11
- setDynamicHeight(newHeight);
12
- }
13
- }, [hasFixedHeight]);
14
- return {
15
- height,
16
- isFixedHeight: hasFixedHeight,
17
- handleResize
18
- };
19
- };
20
- exports.useWidgetHeight = useWidgetHeight;
21
- //# sourceMappingURL=useWidgetHeight.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWidgetHeight.js","sourceRoot":"","sources":["../../src/hooks/useWidgetHeight.ts"],"names":[],"mappings":";;;AAAA,iCAA8C;AAcvC,MAAM,eAAe,GAAG,CAAC,EAC9B,OAAO,EACP,aAAa,GAAG,GAAG,EACE,EAAyB,EAAE;IAChD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAS,aAAa,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC;IAE3D,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,OAAQ,CAAC,MAAO,CAAC,CAAC,CAAC,aAAa,CAAC;IAEjE,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,SAAiB,EAAE,EAAE;QACpB,IAAI,CAAC,cAAc,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACrC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,OAAO;QACL,MAAM;QACN,aAAa,EAAE,cAAc;QAC7B,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,eAAe,mBAuB1B"}
@@ -1,15 +0,0 @@
1
- import type { WidgetData, WidgetOptions, WidgetType, WidgetSamplerLog } from '../interfaces';
2
- export declare const useWidgetState: (data: WidgetData, options?: WidgetOptions, type?: WidgetType) => {
3
- savedData: WidgetSamplerLog | null;
4
- widgetHeight: number;
5
- isWidgetVisible: boolean;
6
- setIsWidgetVisible: import("react").Dispatch<import("react").SetStateAction<boolean>>;
7
- loadSavedData: () => Promise<void>;
8
- saveData: (data: WidgetSamplerLog) => Promise<void>;
9
- open: () => Promise<void>;
10
- close: () => void;
11
- resize: (value: string) => void;
12
- userId: string;
13
- screenHeight: number;
14
- };
15
- //# sourceMappingURL=useWidgetState.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWidgetState.d.ts","sourceRoot":"","sources":["../../src/hooks/useWidgetState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAYvB,eAAO,MAAM,cAAc,GACzB,MAAM,UAAU,EAChB,UAAU,aAAa,EACvB,OAAO,UAAU;;;;;;qBAwBF,gBAAgB;;;oBA6BrB,MAAM;;;CAyBjB,CAAC"}
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useWidgetState = void 0;
4
- const react_1 = require("react");
5
- const react_native_1 = require("react-native");
6
- const storage_1 = require("../services/storage");
7
- function getUserId(widgetData) {
8
- return (widgetData?.customer_id ??
9
- widgetData?.document ??
10
- widgetData?.email ??
11
- 'default_user');
12
- }
13
- const useWidgetState = (data, options, type) => {
14
- const [savedData, setSavedData] = (0, react_1.useState)(null);
15
- const [isWidgetVisible, setIsWidgetVisible] = (0, react_1.useState)(false);
16
- const userId = getUserId(data);
17
- const storageService = (0, react_1.useMemo)(() => new storage_1.StorageService(userId), [userId]);
18
- const screenHeight = react_native_1.Dimensions.get('screen').height;
19
- const height = options?.height ? Number(options.height) : undefined;
20
- const [widgetHeight, setWidgetHeight] = (0, react_1.useState)(height ?? 300);
21
- const loadSavedData = (0, react_1.useCallback)(async () => {
22
- try {
23
- const jsonValue = await storageService.read();
24
- setSavedData(jsonValue);
25
- }
26
- catch (error) {
27
- console.error('Error loading storage data:', error);
28
- }
29
- }, [storageService]);
30
- const saveData = (0, react_1.useCallback)(async (data) => {
31
- try {
32
- await storageService.write(data);
33
- setSavedData(data);
34
- }
35
- catch (error) {
36
- console.error('Error saving storage data:', error);
37
- }
38
- }, [storageService]);
39
- const open = (0, react_1.useCallback)(async () => {
40
- const userLogs = await storageService.read();
41
- userLogs.attempts = (userLogs.attempts || 0) + 1;
42
- userLogs.lastAttempt = Date.now();
43
- try {
44
- await storageService.write(userLogs);
45
- setSavedData(userLogs);
46
- }
47
- catch (error) {
48
- console.error('Error saving storage data:', error);
49
- }
50
- setIsWidgetVisible(true);
51
- }, [storageService]);
52
- const close = (0, react_1.useCallback)(() => {
53
- setIsWidgetVisible(false);
54
- }, []);
55
- const resize = (0, react_1.useCallback)((value) => {
56
- const receivedHeight = Number(value);
57
- if (height !== undefined) {
58
- setWidgetHeight(height);
59
- }
60
- else if (receivedHeight > 0) {
61
- setWidgetHeight(receivedHeight);
62
- }
63
- }, [height]);
64
- return {
65
- savedData,
66
- widgetHeight,
67
- isWidgetVisible,
68
- setIsWidgetVisible,
69
- loadSavedData,
70
- saveData,
71
- open,
72
- close,
73
- resize,
74
- userId,
75
- screenHeight
76
- };
77
- };
78
- exports.useWidgetState = useWidgetState;
79
- //# sourceMappingURL=useWidgetState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useWidgetState.js","sourceRoot":"","sources":["../../src/hooks/useWidgetState.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WidgetCallbacks.d.ts","sourceRoot":"","sources":["../../src/interfaces/WidgetCallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAElE,MAAM,WAAW,eAAe;IAC5B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WidgetCallbacks.js","sourceRoot":"","sources":["../../src/interfaces/WidgetCallbacks.ts"],"names":[],"mappings":""}