@repzo/widget-react-native 1.0.0

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 (448) hide show
  1. package/README.md +482 -0
  2. package/lib/commonjs/agent-ui-blocks.js +159 -0
  3. package/lib/commonjs/agent-ui-blocks.js.map +1 -0
  4. package/lib/commonjs/api/client.js +267 -0
  5. package/lib/commonjs/api/client.js.map +1 -0
  6. package/lib/commonjs/api/realtime.js +193 -0
  7. package/lib/commonjs/api/realtime.js.map +1 -0
  8. package/lib/commonjs/api/sse-parser.js +58 -0
  9. package/lib/commonjs/api/sse-parser.js.map +1 -0
  10. package/lib/commonjs/controller.js +23 -0
  11. package/lib/commonjs/controller.js.map +1 -0
  12. package/lib/commonjs/device-id.js +75 -0
  13. package/lib/commonjs/device-id.js.map +1 -0
  14. package/lib/commonjs/events.js +49 -0
  15. package/lib/commonjs/events.js.map +1 -0
  16. package/lib/commonjs/i18n.js +106 -0
  17. package/lib/commonjs/i18n.js.map +1 -0
  18. package/lib/commonjs/index.js +98 -0
  19. package/lib/commonjs/index.js.map +1 -0
  20. package/lib/commonjs/locales.js +85 -0
  21. package/lib/commonjs/locales.js.map +1 -0
  22. package/lib/commonjs/package.json +1 -0
  23. package/lib/commonjs/push/push-notifications.js +208 -0
  24. package/lib/commonjs/push/push-notifications.js.map +1 -0
  25. package/lib/commonjs/state/use-widget-state.js +23 -0
  26. package/lib/commonjs/state/use-widget-state.js.map +1 -0
  27. package/lib/commonjs/state/widget-store.js +1682 -0
  28. package/lib/commonjs/state/widget-store.js.map +1 -0
  29. package/lib/commonjs/storage.js +147 -0
  30. package/lib/commonjs/storage.js.map +1 -0
  31. package/lib/commonjs/types.js +44 -0
  32. package/lib/commonjs/types.js.map +1 -0
  33. package/lib/commonjs/ui/WidgetProvider.js +404 -0
  34. package/lib/commonjs/ui/WidgetProvider.js.map +1 -0
  35. package/lib/commonjs/ui/components/AgentUiBlocks.js +864 -0
  36. package/lib/commonjs/ui/components/AgentUiBlocks.js.map +1 -0
  37. package/lib/commonjs/ui/components/Avatar.js +76 -0
  38. package/lib/commonjs/ui/components/Avatar.js.map +1 -0
  39. package/lib/commonjs/ui/components/ConversationRow.js +155 -0
  40. package/lib/commonjs/ui/components/ConversationRow.js.map +1 -0
  41. package/lib/commonjs/ui/components/ErrorBoundary.js +44 -0
  42. package/lib/commonjs/ui/components/ErrorBoundary.js.map +1 -0
  43. package/lib/commonjs/ui/components/Gradient.js +168 -0
  44. package/lib/commonjs/ui/components/Gradient.js.map +1 -0
  45. package/lib/commonjs/ui/components/Launcher.js +125 -0
  46. package/lib/commonjs/ui/components/Launcher.js.map +1 -0
  47. package/lib/commonjs/ui/components/Markdown.js +257 -0
  48. package/lib/commonjs/ui/components/Markdown.js.map +1 -0
  49. package/lib/commonjs/ui/components/OutboundMessageCard.js +157 -0
  50. package/lib/commonjs/ui/components/OutboundMessageCard.js.map +1 -0
  51. package/lib/commonjs/ui/components/WidgetPanel.js +131 -0
  52. package/lib/commonjs/ui/components/WidgetPanel.js.map +1 -0
  53. package/lib/commonjs/ui/components/icons.js +383 -0
  54. package/lib/commonjs/ui/components/icons.js.map +1 -0
  55. package/lib/commonjs/ui/hooks/use-keyboard-overlap.js +113 -0
  56. package/lib/commonjs/ui/hooks/use-keyboard-overlap.js.map +1 -0
  57. package/lib/commonjs/ui/hooks/use-reduce-motion.js +38 -0
  58. package/lib/commonjs/ui/hooks/use-reduce-motion.js.map +1 -0
  59. package/lib/commonjs/ui/hooks/use-widget-insets.js +41 -0
  60. package/lib/commonjs/ui/hooks/use-widget-insets.js.map +1 -0
  61. package/lib/commonjs/ui/screens/chat/ChatView.js +590 -0
  62. package/lib/commonjs/ui/screens/chat/ChatView.js.map +1 -0
  63. package/lib/commonjs/ui/screens/chat/ChatView.styles.js +362 -0
  64. package/lib/commonjs/ui/screens/chat/ChatView.styles.js.map +1 -0
  65. package/lib/commonjs/ui/screens/chat/ChatView.types.js +6 -0
  66. package/lib/commonjs/ui/screens/chat/ChatView.types.js.map +1 -0
  67. package/lib/commonjs/ui/screens/conversations/ConversationsList.js +150 -0
  68. package/lib/commonjs/ui/screens/conversations/ConversationsList.js.map +1 -0
  69. package/lib/commonjs/ui/screens/conversations/ConversationsList.styles.js +118 -0
  70. package/lib/commonjs/ui/screens/conversations/ConversationsList.styles.js.map +1 -0
  71. package/lib/commonjs/ui/screens/conversations/ConversationsList.types.js +6 -0
  72. package/lib/commonjs/ui/screens/conversations/ConversationsList.types.js.map +1 -0
  73. package/lib/commonjs/ui/screens/home/HomeView.js +336 -0
  74. package/lib/commonjs/ui/screens/home/HomeView.js.map +1 -0
  75. package/lib/commonjs/ui/screens/home/HomeView.styles.js +245 -0
  76. package/lib/commonjs/ui/screens/home/HomeView.styles.js.map +1 -0
  77. package/lib/commonjs/ui/screens/home/HomeView.types.js +6 -0
  78. package/lib/commonjs/ui/screens/home/HomeView.types.js.map +1 -0
  79. package/lib/commonjs/ui/screens/home/greeting.js +49 -0
  80. package/lib/commonjs/ui/screens/home/greeting.js.map +1 -0
  81. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.js +229 -0
  82. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.js.map +1 -0
  83. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.styles.js +125 -0
  84. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.styles.js.map +1 -0
  85. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.types.js +6 -0
  86. package/lib/commonjs/ui/screens/pre-chat/PreChatForm.types.js.map +1 -0
  87. package/lib/commonjs/ui/styles/global.js +55 -0
  88. package/lib/commonjs/ui/styles/global.js.map +1 -0
  89. package/lib/commonjs/ui/styles/theme.js +148 -0
  90. package/lib/commonjs/ui/styles/theme.js.map +1 -0
  91. package/lib/commonjs/ui/utils/conversations.js +125 -0
  92. package/lib/commonjs/ui/utils/conversations.js.map +1 -0
  93. package/lib/commonjs/ui/utils/html.js +44 -0
  94. package/lib/commonjs/ui/utils/html.js.map +1 -0
  95. package/lib/commonjs/ui/utils/native-gradient.js +65 -0
  96. package/lib/commonjs/ui/utils/native-gradient.js.map +1 -0
  97. package/lib/commonjs/ui/utils/rtl.js +56 -0
  98. package/lib/commonjs/ui/utils/rtl.js.map +1 -0
  99. package/lib/commonjs/ui/utils/safe-url.js +67 -0
  100. package/lib/commonjs/ui/utils/safe-url.js.map +1 -0
  101. package/lib/module/agent-ui-blocks.js +152 -0
  102. package/lib/module/agent-ui-blocks.js.map +1 -0
  103. package/lib/module/api/client.js +261 -0
  104. package/lib/module/api/client.js.map +1 -0
  105. package/lib/module/api/realtime.js +189 -0
  106. package/lib/module/api/realtime.js.map +1 -0
  107. package/lib/module/api/sse-parser.js +53 -0
  108. package/lib/module/api/sse-parser.js.map +1 -0
  109. package/lib/module/controller.js +19 -0
  110. package/lib/module/controller.js.map +1 -0
  111. package/lib/module/device-id.js +69 -0
  112. package/lib/module/device-id.js.map +1 -0
  113. package/lib/module/events.js +44 -0
  114. package/lib/module/events.js.map +1 -0
  115. package/lib/module/i18n.js +99 -0
  116. package/lib/module/i18n.js.map +1 -0
  117. package/lib/module/index.js +55 -0
  118. package/lib/module/index.js.map +1 -0
  119. package/lib/module/locales.js +80 -0
  120. package/lib/module/locales.js.map +1 -0
  121. package/lib/module/package.json +1 -0
  122. package/lib/module/push/push-notifications.js +204 -0
  123. package/lib/module/push/push-notifications.js.map +1 -0
  124. package/lib/module/state/use-widget-state.js +18 -0
  125. package/lib/module/state/use-widget-state.js.map +1 -0
  126. package/lib/module/state/widget-store.js +1677 -0
  127. package/lib/module/state/widget-store.js.map +1 -0
  128. package/lib/module/storage.js +141 -0
  129. package/lib/module/storage.js.map +1 -0
  130. package/lib/module/types.js +40 -0
  131. package/lib/module/types.js.map +1 -0
  132. package/lib/module/ui/WidgetProvider.js +400 -0
  133. package/lib/module/ui/WidgetProvider.js.map +1 -0
  134. package/lib/module/ui/components/AgentUiBlocks.js +857 -0
  135. package/lib/module/ui/components/AgentUiBlocks.js.map +1 -0
  136. package/lib/module/ui/components/Avatar.js +71 -0
  137. package/lib/module/ui/components/Avatar.js.map +1 -0
  138. package/lib/module/ui/components/ConversationRow.js +150 -0
  139. package/lib/module/ui/components/ConversationRow.js.map +1 -0
  140. package/lib/module/ui/components/ErrorBoundary.js +39 -0
  141. package/lib/module/ui/components/ErrorBoundary.js.map +1 -0
  142. package/lib/module/ui/components/Gradient.js +165 -0
  143. package/lib/module/ui/components/Gradient.js.map +1 -0
  144. package/lib/module/ui/components/Launcher.js +121 -0
  145. package/lib/module/ui/components/Launcher.js.map +1 -0
  146. package/lib/module/ui/components/Markdown.js +253 -0
  147. package/lib/module/ui/components/Markdown.js.map +1 -0
  148. package/lib/module/ui/components/OutboundMessageCard.js +153 -0
  149. package/lib/module/ui/components/OutboundMessageCard.js.map +1 -0
  150. package/lib/module/ui/components/WidgetPanel.js +127 -0
  151. package/lib/module/ui/components/WidgetPanel.js.map +1 -0
  152. package/lib/module/ui/components/icons.js +370 -0
  153. package/lib/module/ui/components/icons.js.map +1 -0
  154. package/lib/module/ui/hooks/use-keyboard-overlap.js +109 -0
  155. package/lib/module/ui/hooks/use-keyboard-overlap.js.map +1 -0
  156. package/lib/module/ui/hooks/use-reduce-motion.js +34 -0
  157. package/lib/module/ui/hooks/use-reduce-motion.js.map +1 -0
  158. package/lib/module/ui/hooks/use-widget-insets.js +37 -0
  159. package/lib/module/ui/hooks/use-widget-insets.js.map +1 -0
  160. package/lib/module/ui/screens/chat/ChatView.js +586 -0
  161. package/lib/module/ui/screens/chat/ChatView.js.map +1 -0
  162. package/lib/module/ui/screens/chat/ChatView.styles.js +358 -0
  163. package/lib/module/ui/screens/chat/ChatView.styles.js.map +1 -0
  164. package/lib/module/ui/screens/chat/ChatView.types.js +4 -0
  165. package/lib/module/ui/screens/chat/ChatView.types.js.map +1 -0
  166. package/lib/module/ui/screens/conversations/ConversationsList.js +146 -0
  167. package/lib/module/ui/screens/conversations/ConversationsList.js.map +1 -0
  168. package/lib/module/ui/screens/conversations/ConversationsList.styles.js +114 -0
  169. package/lib/module/ui/screens/conversations/ConversationsList.styles.js.map +1 -0
  170. package/lib/module/ui/screens/conversations/ConversationsList.types.js +4 -0
  171. package/lib/module/ui/screens/conversations/ConversationsList.types.js.map +1 -0
  172. package/lib/module/ui/screens/home/HomeView.js +332 -0
  173. package/lib/module/ui/screens/home/HomeView.js.map +1 -0
  174. package/lib/module/ui/screens/home/HomeView.styles.js +242 -0
  175. package/lib/module/ui/screens/home/HomeView.styles.js.map +1 -0
  176. package/lib/module/ui/screens/home/HomeView.types.js +4 -0
  177. package/lib/module/ui/screens/home/HomeView.types.js.map +1 -0
  178. package/lib/module/ui/screens/home/greeting.js +44 -0
  179. package/lib/module/ui/screens/home/greeting.js.map +1 -0
  180. package/lib/module/ui/screens/pre-chat/PreChatForm.js +225 -0
  181. package/lib/module/ui/screens/pre-chat/PreChatForm.js.map +1 -0
  182. package/lib/module/ui/screens/pre-chat/PreChatForm.styles.js +121 -0
  183. package/lib/module/ui/screens/pre-chat/PreChatForm.styles.js.map +1 -0
  184. package/lib/module/ui/screens/pre-chat/PreChatForm.types.js +4 -0
  185. package/lib/module/ui/screens/pre-chat/PreChatForm.types.js.map +1 -0
  186. package/lib/module/ui/styles/global.js +51 -0
  187. package/lib/module/ui/styles/global.js.map +1 -0
  188. package/lib/module/ui/styles/theme.js +137 -0
  189. package/lib/module/ui/styles/theme.js.map +1 -0
  190. package/lib/module/ui/utils/conversations.js +115 -0
  191. package/lib/module/ui/utils/conversations.js.map +1 -0
  192. package/lib/module/ui/utils/html.js +39 -0
  193. package/lib/module/ui/utils/html.js.map +1 -0
  194. package/lib/module/ui/utils/native-gradient.js +60 -0
  195. package/lib/module/ui/utils/native-gradient.js.map +1 -0
  196. package/lib/module/ui/utils/rtl.js +49 -0
  197. package/lib/module/ui/utils/rtl.js.map +1 -0
  198. package/lib/module/ui/utils/safe-url.js +59 -0
  199. package/lib/module/ui/utils/safe-url.js.map +1 -0
  200. package/lib/typescript/commonjs/agent-ui-blocks.d.ts +20 -0
  201. package/lib/typescript/commonjs/agent-ui-blocks.d.ts.map +1 -0
  202. package/lib/typescript/commonjs/api/client.d.ts +115 -0
  203. package/lib/typescript/commonjs/api/client.d.ts.map +1 -0
  204. package/lib/typescript/commonjs/api/realtime.d.ts +39 -0
  205. package/lib/typescript/commonjs/api/realtime.d.ts.map +1 -0
  206. package/lib/typescript/commonjs/api/sse-parser.d.ts +13 -0
  207. package/lib/typescript/commonjs/api/sse-parser.d.ts.map +1 -0
  208. package/lib/typescript/commonjs/controller.d.ts +15 -0
  209. package/lib/typescript/commonjs/controller.d.ts.map +1 -0
  210. package/lib/typescript/commonjs/device-id.d.ts +15 -0
  211. package/lib/typescript/commonjs/device-id.d.ts.map +1 -0
  212. package/lib/typescript/commonjs/events.d.ts +41 -0
  213. package/lib/typescript/commonjs/events.d.ts.map +1 -0
  214. package/lib/typescript/commonjs/i18n.d.ts +78 -0
  215. package/lib/typescript/commonjs/i18n.d.ts.map +1 -0
  216. package/lib/typescript/commonjs/index.d.ts +103 -0
  217. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  218. package/lib/typescript/commonjs/locales.d.ts +18 -0
  219. package/lib/typescript/commonjs/locales.d.ts.map +1 -0
  220. package/lib/typescript/commonjs/package.json +1 -0
  221. package/lib/typescript/commonjs/push/push-notifications.d.ts +71 -0
  222. package/lib/typescript/commonjs/push/push-notifications.d.ts.map +1 -0
  223. package/lib/typescript/commonjs/state/use-widget-state.d.ts +10 -0
  224. package/lib/typescript/commonjs/state/use-widget-state.d.ts.map +1 -0
  225. package/lib/typescript/commonjs/state/widget-store.d.ts +227 -0
  226. package/lib/typescript/commonjs/state/widget-store.d.ts.map +1 -0
  227. package/lib/typescript/commonjs/storage.d.ts +42 -0
  228. package/lib/typescript/commonjs/storage.d.ts.map +1 -0
  229. package/lib/typescript/commonjs/types.d.ts +391 -0
  230. package/lib/typescript/commonjs/types.d.ts.map +1 -0
  231. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts +15 -0
  232. package/lib/typescript/commonjs/ui/WidgetProvider.d.ts.map +1 -0
  233. package/lib/typescript/commonjs/ui/components/AgentUiBlocks.d.ts +27 -0
  234. package/lib/typescript/commonjs/ui/components/AgentUiBlocks.d.ts.map +1 -0
  235. package/lib/typescript/commonjs/ui/components/Avatar.d.ts +19 -0
  236. package/lib/typescript/commonjs/ui/components/Avatar.d.ts.map +1 -0
  237. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts +26 -0
  238. package/lib/typescript/commonjs/ui/components/ConversationRow.d.ts.map +1 -0
  239. package/lib/typescript/commonjs/ui/components/ErrorBoundary.d.ts +27 -0
  240. package/lib/typescript/commonjs/ui/components/ErrorBoundary.d.ts.map +1 -0
  241. package/lib/typescript/commonjs/ui/components/Gradient.d.ts +33 -0
  242. package/lib/typescript/commonjs/ui/components/Gradient.d.ts.map +1 -0
  243. package/lib/typescript/commonjs/ui/components/Launcher.d.ts +18 -0
  244. package/lib/typescript/commonjs/ui/components/Launcher.d.ts.map +1 -0
  245. package/lib/typescript/commonjs/ui/components/Markdown.d.ts +19 -0
  246. package/lib/typescript/commonjs/ui/components/Markdown.d.ts.map +1 -0
  247. package/lib/typescript/commonjs/ui/components/OutboundMessageCard.d.ts +20 -0
  248. package/lib/typescript/commonjs/ui/components/OutboundMessageCard.d.ts.map +1 -0
  249. package/lib/typescript/commonjs/ui/components/WidgetPanel.d.ts +26 -0
  250. package/lib/typescript/commonjs/ui/components/WidgetPanel.d.ts.map +1 -0
  251. package/lib/typescript/commonjs/ui/components/icons.d.ts +38 -0
  252. package/lib/typescript/commonjs/ui/components/icons.d.ts.map +1 -0
  253. package/lib/typescript/commonjs/ui/hooks/use-keyboard-overlap.d.ts +33 -0
  254. package/lib/typescript/commonjs/ui/hooks/use-keyboard-overlap.d.ts.map +1 -0
  255. package/lib/typescript/commonjs/ui/hooks/use-reduce-motion.d.ts +11 -0
  256. package/lib/typescript/commonjs/ui/hooks/use-reduce-motion.d.ts.map +1 -0
  257. package/lib/typescript/commonjs/ui/hooks/use-widget-insets.d.ts +16 -0
  258. package/lib/typescript/commonjs/ui/hooks/use-widget-insets.d.ts.map +1 -0
  259. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts +11 -0
  260. package/lib/typescript/commonjs/ui/screens/chat/ChatView.d.ts.map +1 -0
  261. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts +349 -0
  262. package/lib/typescript/commonjs/ui/screens/chat/ChatView.styles.d.ts.map +1 -0
  263. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts +48 -0
  264. package/lib/typescript/commonjs/ui/screens/chat/ChatView.types.d.ts.map +1 -0
  265. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.d.ts +10 -0
  266. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.d.ts.map +1 -0
  267. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.styles.d.ts +113 -0
  268. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.styles.d.ts.map +1 -0
  269. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts +31 -0
  270. package/lib/typescript/commonjs/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -0
  271. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts +17 -0
  272. package/lib/typescript/commonjs/ui/screens/home/HomeView.d.ts.map +1 -0
  273. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts +227 -0
  274. package/lib/typescript/commonjs/ui/screens/home/HomeView.styles.d.ts.map +1 -0
  275. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts +40 -0
  276. package/lib/typescript/commonjs/ui/screens/home/HomeView.types.d.ts.map +1 -0
  277. package/lib/typescript/commonjs/ui/screens/home/greeting.d.ts +19 -0
  278. package/lib/typescript/commonjs/ui/screens/home/greeting.d.ts.map +1 -0
  279. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.d.ts +7 -0
  280. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.d.ts.map +1 -0
  281. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.styles.d.ts +115 -0
  282. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.styles.d.ts.map +1 -0
  283. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.types.d.ts +20 -0
  284. package/lib/typescript/commonjs/ui/screens/pre-chat/PreChatForm.types.d.ts.map +1 -0
  285. package/lib/typescript/commonjs/ui/styles/global.d.ts +46 -0
  286. package/lib/typescript/commonjs/ui/styles/global.d.ts.map +1 -0
  287. package/lib/typescript/commonjs/ui/styles/theme.d.ts +103 -0
  288. package/lib/typescript/commonjs/ui/styles/theme.d.ts.map +1 -0
  289. package/lib/typescript/commonjs/ui/utils/conversations.d.ts +41 -0
  290. package/lib/typescript/commonjs/ui/utils/conversations.d.ts.map +1 -0
  291. package/lib/typescript/commonjs/ui/utils/html.d.ts +10 -0
  292. package/lib/typescript/commonjs/ui/utils/html.d.ts.map +1 -0
  293. package/lib/typescript/commonjs/ui/utils/native-gradient.d.ts +61 -0
  294. package/lib/typescript/commonjs/ui/utils/native-gradient.d.ts.map +1 -0
  295. package/lib/typescript/commonjs/ui/utils/rtl.d.ts +33 -0
  296. package/lib/typescript/commonjs/ui/utils/rtl.d.ts.map +1 -0
  297. package/lib/typescript/commonjs/ui/utils/safe-url.d.ts +21 -0
  298. package/lib/typescript/commonjs/ui/utils/safe-url.d.ts.map +1 -0
  299. package/lib/typescript/module/agent-ui-blocks.d.ts +20 -0
  300. package/lib/typescript/module/agent-ui-blocks.d.ts.map +1 -0
  301. package/lib/typescript/module/api/client.d.ts +115 -0
  302. package/lib/typescript/module/api/client.d.ts.map +1 -0
  303. package/lib/typescript/module/api/realtime.d.ts +39 -0
  304. package/lib/typescript/module/api/realtime.d.ts.map +1 -0
  305. package/lib/typescript/module/api/sse-parser.d.ts +13 -0
  306. package/lib/typescript/module/api/sse-parser.d.ts.map +1 -0
  307. package/lib/typescript/module/controller.d.ts +15 -0
  308. package/lib/typescript/module/controller.d.ts.map +1 -0
  309. package/lib/typescript/module/device-id.d.ts +15 -0
  310. package/lib/typescript/module/device-id.d.ts.map +1 -0
  311. package/lib/typescript/module/events.d.ts +41 -0
  312. package/lib/typescript/module/events.d.ts.map +1 -0
  313. package/lib/typescript/module/i18n.d.ts +78 -0
  314. package/lib/typescript/module/i18n.d.ts.map +1 -0
  315. package/lib/typescript/module/index.d.ts +103 -0
  316. package/lib/typescript/module/index.d.ts.map +1 -0
  317. package/lib/typescript/module/locales.d.ts +18 -0
  318. package/lib/typescript/module/locales.d.ts.map +1 -0
  319. package/lib/typescript/module/package.json +1 -0
  320. package/lib/typescript/module/push/push-notifications.d.ts +71 -0
  321. package/lib/typescript/module/push/push-notifications.d.ts.map +1 -0
  322. package/lib/typescript/module/state/use-widget-state.d.ts +10 -0
  323. package/lib/typescript/module/state/use-widget-state.d.ts.map +1 -0
  324. package/lib/typescript/module/state/widget-store.d.ts +227 -0
  325. package/lib/typescript/module/state/widget-store.d.ts.map +1 -0
  326. package/lib/typescript/module/storage.d.ts +42 -0
  327. package/lib/typescript/module/storage.d.ts.map +1 -0
  328. package/lib/typescript/module/types.d.ts +391 -0
  329. package/lib/typescript/module/types.d.ts.map +1 -0
  330. package/lib/typescript/module/ui/WidgetProvider.d.ts +15 -0
  331. package/lib/typescript/module/ui/WidgetProvider.d.ts.map +1 -0
  332. package/lib/typescript/module/ui/components/AgentUiBlocks.d.ts +27 -0
  333. package/lib/typescript/module/ui/components/AgentUiBlocks.d.ts.map +1 -0
  334. package/lib/typescript/module/ui/components/Avatar.d.ts +19 -0
  335. package/lib/typescript/module/ui/components/Avatar.d.ts.map +1 -0
  336. package/lib/typescript/module/ui/components/ConversationRow.d.ts +26 -0
  337. package/lib/typescript/module/ui/components/ConversationRow.d.ts.map +1 -0
  338. package/lib/typescript/module/ui/components/ErrorBoundary.d.ts +27 -0
  339. package/lib/typescript/module/ui/components/ErrorBoundary.d.ts.map +1 -0
  340. package/lib/typescript/module/ui/components/Gradient.d.ts +33 -0
  341. package/lib/typescript/module/ui/components/Gradient.d.ts.map +1 -0
  342. package/lib/typescript/module/ui/components/Launcher.d.ts +18 -0
  343. package/lib/typescript/module/ui/components/Launcher.d.ts.map +1 -0
  344. package/lib/typescript/module/ui/components/Markdown.d.ts +19 -0
  345. package/lib/typescript/module/ui/components/Markdown.d.ts.map +1 -0
  346. package/lib/typescript/module/ui/components/OutboundMessageCard.d.ts +20 -0
  347. package/lib/typescript/module/ui/components/OutboundMessageCard.d.ts.map +1 -0
  348. package/lib/typescript/module/ui/components/WidgetPanel.d.ts +26 -0
  349. package/lib/typescript/module/ui/components/WidgetPanel.d.ts.map +1 -0
  350. package/lib/typescript/module/ui/components/icons.d.ts +38 -0
  351. package/lib/typescript/module/ui/components/icons.d.ts.map +1 -0
  352. package/lib/typescript/module/ui/hooks/use-keyboard-overlap.d.ts +33 -0
  353. package/lib/typescript/module/ui/hooks/use-keyboard-overlap.d.ts.map +1 -0
  354. package/lib/typescript/module/ui/hooks/use-reduce-motion.d.ts +11 -0
  355. package/lib/typescript/module/ui/hooks/use-reduce-motion.d.ts.map +1 -0
  356. package/lib/typescript/module/ui/hooks/use-widget-insets.d.ts +16 -0
  357. package/lib/typescript/module/ui/hooks/use-widget-insets.d.ts.map +1 -0
  358. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts +11 -0
  359. package/lib/typescript/module/ui/screens/chat/ChatView.d.ts.map +1 -0
  360. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts +349 -0
  361. package/lib/typescript/module/ui/screens/chat/ChatView.styles.d.ts.map +1 -0
  362. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts +48 -0
  363. package/lib/typescript/module/ui/screens/chat/ChatView.types.d.ts.map +1 -0
  364. package/lib/typescript/module/ui/screens/conversations/ConversationsList.d.ts +10 -0
  365. package/lib/typescript/module/ui/screens/conversations/ConversationsList.d.ts.map +1 -0
  366. package/lib/typescript/module/ui/screens/conversations/ConversationsList.styles.d.ts +113 -0
  367. package/lib/typescript/module/ui/screens/conversations/ConversationsList.styles.d.ts.map +1 -0
  368. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts +31 -0
  369. package/lib/typescript/module/ui/screens/conversations/ConversationsList.types.d.ts.map +1 -0
  370. package/lib/typescript/module/ui/screens/home/HomeView.d.ts +17 -0
  371. package/lib/typescript/module/ui/screens/home/HomeView.d.ts.map +1 -0
  372. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts +227 -0
  373. package/lib/typescript/module/ui/screens/home/HomeView.styles.d.ts.map +1 -0
  374. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts +40 -0
  375. package/lib/typescript/module/ui/screens/home/HomeView.types.d.ts.map +1 -0
  376. package/lib/typescript/module/ui/screens/home/greeting.d.ts +19 -0
  377. package/lib/typescript/module/ui/screens/home/greeting.d.ts.map +1 -0
  378. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.d.ts +7 -0
  379. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.d.ts.map +1 -0
  380. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.styles.d.ts +115 -0
  381. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.styles.d.ts.map +1 -0
  382. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.types.d.ts +20 -0
  383. package/lib/typescript/module/ui/screens/pre-chat/PreChatForm.types.d.ts.map +1 -0
  384. package/lib/typescript/module/ui/styles/global.d.ts +46 -0
  385. package/lib/typescript/module/ui/styles/global.d.ts.map +1 -0
  386. package/lib/typescript/module/ui/styles/theme.d.ts +103 -0
  387. package/lib/typescript/module/ui/styles/theme.d.ts.map +1 -0
  388. package/lib/typescript/module/ui/utils/conversations.d.ts +41 -0
  389. package/lib/typescript/module/ui/utils/conversations.d.ts.map +1 -0
  390. package/lib/typescript/module/ui/utils/html.d.ts +10 -0
  391. package/lib/typescript/module/ui/utils/html.d.ts.map +1 -0
  392. package/lib/typescript/module/ui/utils/native-gradient.d.ts +61 -0
  393. package/lib/typescript/module/ui/utils/native-gradient.d.ts.map +1 -0
  394. package/lib/typescript/module/ui/utils/rtl.d.ts +33 -0
  395. package/lib/typescript/module/ui/utils/rtl.d.ts.map +1 -0
  396. package/lib/typescript/module/ui/utils/safe-url.d.ts +21 -0
  397. package/lib/typescript/module/ui/utils/safe-url.d.ts.map +1 -0
  398. package/metro.js +40 -0
  399. package/package.json +116 -0
  400. package/src/agent-ui-blocks.ts +302 -0
  401. package/src/api/client.ts +332 -0
  402. package/src/api/realtime.ts +225 -0
  403. package/src/api/sse-parser.ts +51 -0
  404. package/src/controller.ts +20 -0
  405. package/src/device-id.ts +71 -0
  406. package/src/events.ts +74 -0
  407. package/src/i18n.ts +114 -0
  408. package/src/index.tsx +199 -0
  409. package/src/locales.ts +80 -0
  410. package/src/push/push-notifications.ts +254 -0
  411. package/src/state/use-widget-state.ts +20 -0
  412. package/src/state/widget-store.ts +1815 -0
  413. package/src/storage.ts +153 -0
  414. package/src/types.ts +445 -0
  415. package/src/ui/WidgetProvider.tsx +434 -0
  416. package/src/ui/components/AgentUiBlocks.tsx +912 -0
  417. package/src/ui/components/Avatar.tsx +86 -0
  418. package/src/ui/components/ConversationRow.tsx +163 -0
  419. package/src/ui/components/ErrorBoundary.tsx +49 -0
  420. package/src/ui/components/Gradient.tsx +165 -0
  421. package/src/ui/components/Launcher.tsx +128 -0
  422. package/src/ui/components/Markdown.tsx +291 -0
  423. package/src/ui/components/OutboundMessageCard.tsx +154 -0
  424. package/src/ui/components/WidgetPanel.tsx +133 -0
  425. package/src/ui/components/icons.tsx +315 -0
  426. package/src/ui/hooks/use-keyboard-overlap.ts +134 -0
  427. package/src/ui/hooks/use-reduce-motion.ts +39 -0
  428. package/src/ui/hooks/use-widget-insets.ts +44 -0
  429. package/src/ui/screens/chat/ChatView.styles.ts +357 -0
  430. package/src/ui/screens/chat/ChatView.tsx +690 -0
  431. package/src/ui/screens/chat/ChatView.types.ts +46 -0
  432. package/src/ui/screens/conversations/ConversationsList.styles.ts +111 -0
  433. package/src/ui/screens/conversations/ConversationsList.tsx +144 -0
  434. package/src/ui/screens/conversations/ConversationsList.types.ts +33 -0
  435. package/src/ui/screens/home/HomeView.styles.ts +246 -0
  436. package/src/ui/screens/home/HomeView.tsx +336 -0
  437. package/src/ui/screens/home/HomeView.types.ts +42 -0
  438. package/src/ui/screens/home/greeting.ts +50 -0
  439. package/src/ui/screens/pre-chat/PreChatForm.styles.ts +120 -0
  440. package/src/ui/screens/pre-chat/PreChatForm.tsx +221 -0
  441. package/src/ui/screens/pre-chat/PreChatForm.types.ts +22 -0
  442. package/src/ui/styles/global.ts +50 -0
  443. package/src/ui/styles/theme.ts +155 -0
  444. package/src/ui/utils/conversations.ts +122 -0
  445. package/src/ui/utils/html.ts +58 -0
  446. package/src/ui/utils/native-gradient.ts +60 -0
  447. package/src/ui/utils/rtl.ts +43 -0
  448. package/src/ui/utils/safe-url.ts +63 -0
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Home space — branded greeting header, the "start a conversation" card, a
5
+ * preview of recent threads and a team/availability strip.
6
+ * Port of `client/src/widget/components/HomeView.tsx`.
7
+ *
8
+ * The header meets the white body on a straight seam, the same as the web
9
+ * widget. Whether that seam is a hard edge or the background washing out into
10
+ * white is the dashboard's `homeBackgroundFade` toggle, and the start card sits
11
+ * astride it either way: top over the brand background, bottom over white.
12
+ *
13
+ * Everything on this screen comes from the widget config or the conversations
14
+ * the visitor already has; nothing here assumes a field the backend does not
15
+ * send today.
16
+ */
17
+
18
+ import { Fragment, useEffect, useRef } from 'react';
19
+ import { Animated, Easing, Image, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
20
+ import { Avatar } from "../../components/Avatar.js";
21
+ import { ConversationRow } from "../../components/ConversationRow.js";
22
+ import { FadeOverlay, GradientBackground } from "../../components/Gradient.js";
23
+ import { AlertIcon, ArrowRightIcon, ChatIcon, ChatOutlineIcon, CloseIcon } from "../../components/icons.js";
24
+ import { useReduceMotion } from "../../hooks/use-reduce-motion.js";
25
+ import { globalStyles } from "../../styles/global.js";
26
+ import { contrastingTextColor, palette, spacing, withAlpha } from "../../styles/theme.js";
27
+ import { flipForRTL } from "../../utils/rtl.js";
28
+ import { personalizeGreeting } from "./greeting.js";
29
+ import { CLOSE_ICON_SIZE, HEADER_BOTTOM_PADDING, HEADER_FADE_HEIGHT, START_CARD_LIFT, styles } from "./HomeView.styles.js";
30
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
31
+ /**
32
+ * The admin's explicit black/white toggle always wins. Older configs can omit
33
+ * it, and defaulting to dark text over a dark brand header is unreadable, so
34
+ * derive something legible from the background instead.
35
+ */
36
+ function resolveHeaderTextColor(config, fallbackColor) {
37
+ if (config?.homeHeaderTextColor === 'white') return palette.white;
38
+ if (config?.homeHeaderTextColor === 'black') return palette.ink;
39
+ if (config?.homeBackgroundType === 'image') return palette.white;
40
+ if (config?.homeBackgroundType === 'gradient') {
41
+ return contrastingTextColor(config.homeBackgroundGradientStart || fallbackColor);
42
+ }
43
+ return contrastingTextColor(config?.homeBackgroundColor || fallbackColor);
44
+ }
45
+ export function HomeView({
46
+ config,
47
+ color,
48
+ visitorName,
49
+ conversationCount,
50
+ recentConversations,
51
+ unreadByConversation,
52
+ teamAgents,
53
+ isOnline,
54
+ offlineMessage,
55
+ startConversationLabel,
56
+ replyTimeLabel,
57
+ allowNewConversations,
58
+ showPreviousConversations,
59
+ labels,
60
+ onClose,
61
+ onStartConversation,
62
+ onViewConversations,
63
+ onOpenConversation
64
+ }) {
65
+ const heading = personalizeGreeting(config?.welcomeHeading, visitorName, 'Hi there');
66
+ // Both lines render exactly as the dashboard sent them, so the admin sees the
67
+ // same header in the preview and on the phone, even when the subheading
68
+ // repeats the reply time printed on the start card below.
69
+ const subheading = config?.welcomeSubheading || 'How can we help?';
70
+ const textColor = resolveHeaderTextColor(config, color);
71
+ const secondaryTextColor = textColor === palette.white ? withAlpha(palette.white, 0.8) : 'rgba(26,26,26,0.58)';
72
+ // A pale brand color would otherwise put a white glyph on a near-white disc.
73
+ const startIconColor = contrastingTextColor(color);
74
+ const backgroundType = config?.homeBackgroundType ?? 'solid';
75
+ const gradientColors = [config?.homeBackgroundGradientStart || '#f2f2f2', config?.homeBackgroundGradientMiddle || '', config?.homeBackgroundGradientEnd || '#bfbfbf'].filter(Boolean);
76
+ // Off, the background stops dead at the seam. On, it washes out into the body
77
+ // colour over the bottom of the header, so the start card lands on near-white.
78
+ const fade = config?.homeBackgroundFade ? /*#__PURE__*/_jsx(FadeOverlay, {
79
+ height: HEADER_FADE_HEIGHT
80
+ }) : null;
81
+ const showRecent = showPreviousConversations && recentConversations.length > 0;
82
+ const showViewAll = conversationCount > recentConversations.length;
83
+ const showEmptyHint = showPreviousConversations && conversationCount === 0 && allowNewConversations;
84
+ // One agent already has their face in the row above; repeating it reads as a bug.
85
+ const showAvatarStack = teamAgents.length >= 2;
86
+
87
+ // The start card is pulled up over the seam by a fixed amount, so the header
88
+ // pads its bottom by that same amount and the greeting never slides under it.
89
+ const headerStyle = [styles.header, allowNewConversations ? {
90
+ paddingBottom: HEADER_BOTTOM_PADDING + START_CARD_LIFT
91
+ } : null];
92
+ const headerContent = /*#__PURE__*/_jsxs(_Fragment, {
93
+ children: [/*#__PURE__*/_jsxs(View, {
94
+ style: styles.headerTop,
95
+ children: [config?.homeLogoUrl ? /*#__PURE__*/_jsx(Image, {
96
+ source: {
97
+ uri: config.homeLogoUrl
98
+ },
99
+ style: styles.logo,
100
+ resizeMode: "contain",
101
+ accessibilityIgnoresInvertColors: true
102
+ }) : /*#__PURE__*/_jsx(View, {}), /*#__PURE__*/_jsx(Pressable, {
103
+ onPress: onClose,
104
+ accessibilityRole: "button",
105
+ accessibilityLabel: labels.close,
106
+ hitSlop: 12,
107
+ style: styles.closeButton,
108
+ children: /*#__PURE__*/_jsx(CloseIcon, {
109
+ size: CLOSE_ICON_SIZE,
110
+ color: textColor
111
+ })
112
+ })]
113
+ }), /*#__PURE__*/_jsx(View, {
114
+ style: styles.headerSpacer
115
+ }), /*#__PURE__*/_jsxs(FadeSlideIn, {
116
+ children: [/*#__PURE__*/_jsx(Text, {
117
+ style: [styles.heading, {
118
+ color: textColor
119
+ }],
120
+ children: heading
121
+ }), /*#__PURE__*/_jsx(Text, {
122
+ style: [styles.subheading, {
123
+ color: secondaryTextColor
124
+ }],
125
+ children: subheading
126
+ })]
127
+ })]
128
+ });
129
+ return /*#__PURE__*/_jsxs(ScrollView, {
130
+ style: globalStyles.screen,
131
+ contentContainerStyle: styles.contentContainer,
132
+ keyboardShouldPersistTaps: "handled",
133
+ children: [backgroundType === 'image' && config?.homeBackgroundImageUrl ? /*#__PURE__*/_jsxs(View, {
134
+ style: headerStyle,
135
+ children: [/*#__PURE__*/_jsx(Image, {
136
+ source: {
137
+ uri: config.homeBackgroundImageUrl
138
+ },
139
+ style: StyleSheet.absoluteFill,
140
+ resizeMode: "cover",
141
+ accessibilityIgnoresInvertColors: true
142
+ }), /*#__PURE__*/_jsx(View, {
143
+ style: styles.imageScrim
144
+ }), headerContent, fade]
145
+ }) : backgroundType === 'gradient' ? /*#__PURE__*/_jsxs(GradientBackground, {
146
+ colors: gradientColors,
147
+ style: headerStyle,
148
+ children: [headerContent, fade]
149
+ }) : /*#__PURE__*/_jsxs(View, {
150
+ style: [headerStyle, {
151
+ backgroundColor: config?.homeBackgroundColor || '#f2f2f2'
152
+ }],
153
+ children: [headerContent, fade]
154
+ }), /*#__PURE__*/_jsxs(View, {
155
+ style: styles.body,
156
+ children: [allowNewConversations ? /*#__PURE__*/_jsx(View, {
157
+ style: styles.startCardSlot,
158
+ children: /*#__PURE__*/_jsx(FadeSlideIn, {
159
+ delay: 40,
160
+ children: /*#__PURE__*/_jsxs(Pressable, {
161
+ onPress: onStartConversation,
162
+ accessibilityRole: "button",
163
+ android_ripple: {
164
+ color: palette.borderSoft
165
+ },
166
+ style: ({
167
+ pressed
168
+ }) => [styles.startCard, pressed && styles.startCardPressed],
169
+ children: [/*#__PURE__*/_jsx(View, {
170
+ style: [styles.startIcon, {
171
+ backgroundColor: color
172
+ }],
173
+ children: /*#__PURE__*/_jsx(ChatIcon, {
174
+ size: 18,
175
+ color: startIconColor
176
+ })
177
+ }), /*#__PURE__*/_jsxs(View, {
178
+ style: styles.startCopy,
179
+ children: [/*#__PURE__*/_jsx(Text, {
180
+ style: styles.startTitle,
181
+ children: startConversationLabel
182
+ }), /*#__PURE__*/_jsx(Text, {
183
+ style: styles.startSubtitle,
184
+ children: replyTimeLabel
185
+ })]
186
+ }), /*#__PURE__*/_jsx(ArrowRightIcon, {
187
+ size: 18,
188
+ color: color,
189
+ style: flipForRTL()
190
+ })]
191
+ })
192
+ })
193
+ }) : null, /*#__PURE__*/_jsxs(View, {
194
+ style: styles.bodyContent,
195
+ children: [offlineMessage ? /*#__PURE__*/_jsx(FadeSlideIn, {
196
+ delay: 70,
197
+ children: /*#__PURE__*/_jsxs(View, {
198
+ style: styles.offlineNotice,
199
+ children: [/*#__PURE__*/_jsx(AlertIcon, {
200
+ size: 18
201
+ }), /*#__PURE__*/_jsx(Text, {
202
+ style: styles.offlineText,
203
+ children: offlineMessage
204
+ })]
205
+ })
206
+ }) : null, showRecent ? /*#__PURE__*/_jsxs(FadeSlideIn, {
207
+ delay: 140,
208
+ children: [/*#__PURE__*/_jsxs(View, {
209
+ style: styles.recentHeader,
210
+ children: [/*#__PURE__*/_jsx(Text, {
211
+ style: styles.recentTitle,
212
+ children: labels.recentTitle
213
+ }), showViewAll ? /*#__PURE__*/_jsx(Pressable, {
214
+ onPress: onViewConversations,
215
+ accessibilityRole: "button",
216
+ accessibilityLabel: labels.viewPrevious,
217
+ hitSlop: 10,
218
+ style: ({
219
+ pressed
220
+ }) => [styles.viewAllButton, pressed && globalStyles.pressed],
221
+ children: /*#__PURE__*/_jsx(Text, {
222
+ style: [styles.viewAllLabel, {
223
+ color
224
+ }],
225
+ children: labels.viewAll
226
+ })
227
+ }) : null]
228
+ }), /*#__PURE__*/_jsx(View, {
229
+ style: [globalStyles.card, styles.recentCard],
230
+ children: recentConversations.map((conversation, index) => /*#__PURE__*/_jsxs(Fragment, {
231
+ children: [index > 0 ? /*#__PURE__*/_jsx(View, {
232
+ style: [globalStyles.divider, styles.recentDivider]
233
+ }) : null, /*#__PURE__*/_jsx(ConversationRow, {
234
+ conversation: conversation,
235
+ color: color,
236
+ fallbackName: labels.team,
237
+ timeLabels: labels.time,
238
+ unreadCount: unreadByConversation[conversation.id] ?? 0,
239
+ unreadLabel: labels.unread,
240
+ horizontalPadding: spacing.lg,
241
+ onPress: () => onOpenConversation(conversation.id)
242
+ })]
243
+ }, conversation.id))
244
+ })]
245
+ }) : null, /*#__PURE__*/_jsx(View, {
246
+ style: styles.spacer,
247
+ children: showEmptyHint ? /*#__PURE__*/_jsx(FadeSlideIn, {
248
+ delay: 140,
249
+ children: /*#__PURE__*/_jsxs(View, {
250
+ style: styles.emptyHint,
251
+ children: [/*#__PURE__*/_jsx(ChatOutlineIcon, {
252
+ size: 30,
253
+ color: palette.disabled
254
+ }), /*#__PURE__*/_jsx(Text, {
255
+ style: styles.emptyHintText,
256
+ children: labels.noConversations
257
+ })]
258
+ })
259
+ }) : null
260
+ }), /*#__PURE__*/_jsx(FadeSlideIn, {
261
+ delay: 200,
262
+ children: /*#__PURE__*/_jsxs(View, {
263
+ style: styles.statusStrip,
264
+ children: [showAvatarStack ? /*#__PURE__*/_jsx(View, {
265
+ style: styles.avatarStack,
266
+ children: teamAgents.map((agent, index) => /*#__PURE__*/_jsx(Avatar, {
267
+ avatar: agent.avatar,
268
+ name: agent.name,
269
+ size: 26,
270
+ color: color,
271
+ style: [styles.avatarStackItem, index > 0 ? styles.avatarStackOverlap : null]
272
+ }, `${agent.name ?? 'agent'}-${index}`))
273
+ }) : null, /*#__PURE__*/_jsx(View, {
274
+ style: [styles.statusDot, {
275
+ backgroundColor: isOnline ? palette.online : palette.textSubtle
276
+ }]
277
+ }), /*#__PURE__*/_jsx(Text, {
278
+ style: styles.statusText,
279
+ numberOfLines: 1,
280
+ children: isOnline ? labels.statusOnline : labels.statusAway
281
+ })]
282
+ })
283
+ })]
284
+ })]
285
+ })]
286
+ });
287
+ }
288
+
289
+ /**
290
+ * Staggered entrance for the body sections. Opacity and translate only, so the
291
+ * whole thing runs on the native driver and never touches layout.
292
+ */
293
+ function FadeSlideIn({
294
+ delay = 0,
295
+ children
296
+ }) {
297
+ const reduceMotion = useReduceMotion();
298
+ const progress = useRef(new Animated.Value(0)).current;
299
+ useEffect(() => {
300
+ // `null` means the reduce-motion answer has not landed yet; hold at 0
301
+ // rather than animating and snapping back.
302
+ if (reduceMotion === null) return undefined;
303
+ if (reduceMotion) {
304
+ progress.setValue(1);
305
+ return undefined;
306
+ }
307
+ Animated.timing(progress, {
308
+ toValue: 1,
309
+ duration: 260,
310
+ delay,
311
+ easing: Easing.out(Easing.quad),
312
+ useNativeDriver: true
313
+ }).start();
314
+ return () => {
315
+ progress.stopAnimation();
316
+ };
317
+ }, [delay, progress, reduceMotion]);
318
+ const translateY = progress.interpolate({
319
+ inputRange: [0, 1],
320
+ outputRange: [12, 0]
321
+ });
322
+ return /*#__PURE__*/_jsx(Animated.View, {
323
+ style: {
324
+ opacity: progress,
325
+ transform: [{
326
+ translateY
327
+ }]
328
+ },
329
+ children: children
330
+ });
331
+ }
332
+ //# sourceMappingURL=HomeView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Fragment","useEffect","useRef","Animated","Easing","Image","Pressable","ScrollView","StyleSheet","Text","View","Avatar","ConversationRow","FadeOverlay","GradientBackground","AlertIcon","ArrowRightIcon","ChatIcon","ChatOutlineIcon","CloseIcon","useReduceMotion","globalStyles","contrastingTextColor","palette","spacing","withAlpha","flipForRTL","personalizeGreeting","CLOSE_ICON_SIZE","HEADER_BOTTOM_PADDING","HEADER_FADE_HEIGHT","START_CARD_LIFT","styles","jsx","_jsx","jsxs","_jsxs","_Fragment","resolveHeaderTextColor","config","fallbackColor","homeHeaderTextColor","white","ink","homeBackgroundType","homeBackgroundGradientStart","homeBackgroundColor","HomeView","color","visitorName","conversationCount","recentConversations","unreadByConversation","teamAgents","isOnline","offlineMessage","startConversationLabel","replyTimeLabel","allowNewConversations","showPreviousConversations","labels","onClose","onStartConversation","onViewConversations","onOpenConversation","heading","welcomeHeading","subheading","welcomeSubheading","textColor","secondaryTextColor","startIconColor","backgroundType","gradientColors","homeBackgroundGradientMiddle","homeBackgroundGradientEnd","filter","Boolean","fade","homeBackgroundFade","height","showRecent","length","showViewAll","showEmptyHint","showAvatarStack","headerStyle","header","paddingBottom","headerContent","children","style","headerTop","homeLogoUrl","source","uri","logo","resizeMode","accessibilityIgnoresInvertColors","onPress","accessibilityRole","accessibilityLabel","close","hitSlop","closeButton","size","headerSpacer","FadeSlideIn","screen","contentContainerStyle","contentContainer","keyboardShouldPersistTaps","homeBackgroundImageUrl","absoluteFill","imageScrim","colors","backgroundColor","body","startCardSlot","delay","android_ripple","borderSoft","pressed","startCard","startCardPressed","startIcon","startCopy","startTitle","startSubtitle","bodyContent","offlineNotice","offlineText","recentHeader","recentTitle","viewPrevious","viewAllButton","viewAllLabel","viewAll","card","recentCard","map","conversation","index","divider","recentDivider","fallbackName","team","timeLabels","time","unreadCount","id","unreadLabel","unread","horizontalPadding","lg","spacer","emptyHint","disabled","emptyHintText","noConversations","statusStrip","avatarStack","agent","avatar","name","avatarStackItem","avatarStackOverlap","statusDot","online","textSubtle","statusText","numberOfLines","statusOnline","statusAway","reduceMotion","progress","Value","current","undefined","setValue","timing","toValue","duration","easing","out","quad","useNativeDriver","start","stopAnimation","translateY","interpolate","inputRange","outputRange","opacity","transform"],"sourceRoot":"../../../../../src","sources":["ui/screens/home/HomeView.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Styles and layout constants for the Home space. The constants live next to
5
+ * the sheet so the component and the styles can never disagree about them.
6
+ */
7
+
8
+ import { I18nManager, StyleSheet } from 'react-native';
9
+ import { rowDividerInset } from "../../components/ConversationRow.js";
10
+ import { fontSize, palette, radius, shadows, spacing } from "../../styles/theme.js";
11
+ import { START_ALIGN } from "../../utils/rtl.js";
12
+
13
+ /**
14
+ * Header geometry in dp, measured off the web widget so the two surfaces line
15
+ * up: a tall header with the greeting pinned low, a start card that overhangs
16
+ * the seam by a fixed amount rather than half its height, and a fade that is a
17
+ * straight white ramp over the bottom of the header, starting just under the
18
+ * heading.
19
+ */
20
+ export const HEADER_MIN_HEIGHT = 228;
21
+ /** Between the greeting and whatever comes next: the seam, or the start card. */
22
+ export const HEADER_BOTTOM_PADDING = 36;
23
+ export const START_CARD_LIFT = 28;
24
+ export const START_CARD_MIN_HEIGHT = 76;
25
+ export const HEADER_FADE_HEIGHT = 90;
26
+ export const CLOSE_BUTTON_SIZE = 28;
27
+ export const CLOSE_ICON_SIZE = 14;
28
+ export const styles = StyleSheet.create({
29
+ contentContainer: {
30
+ flexGrow: 1
31
+ },
32
+ // Tall on purpose, with the greeting pinned to the bottom by `headerSpacer`:
33
+ // the close row stays at the top and the heading sits just above the seam.
34
+ header: {
35
+ minHeight: HEADER_MIN_HEIGHT,
36
+ paddingHorizontal: spacing.xl,
37
+ paddingTop: spacing.xl,
38
+ // When the start card is shown the component grows this to clear the card.
39
+ paddingBottom: HEADER_BOTTOM_PADDING,
40
+ overflow: 'hidden'
41
+ },
42
+ imageScrim: {
43
+ ...StyleSheet.absoluteFillObject,
44
+ backgroundColor: 'rgba(0,0,0,0.16)'
45
+ },
46
+ // Always as tall as the logo slot, so the greeting lands in the same place
47
+ // whether or not the workspace uploaded a logo.
48
+ headerTop: {
49
+ flexDirection: 'row',
50
+ alignItems: 'flex-start',
51
+ justifyContent: 'space-between',
52
+ minHeight: 40
53
+ },
54
+ // Soaks up the header's spare height so the greeting hugs the seam, and
55
+ // never shrinks below the gap the web widget keeps under the close row.
56
+ headerSpacer: {
57
+ flex: 1,
58
+ minHeight: 40
59
+ },
60
+ logo: {
61
+ width: 132,
62
+ height: 40
63
+ },
64
+ closeButton: {
65
+ marginStart: 'auto',
66
+ padding: (CLOSE_BUTTON_SIZE - CLOSE_ICON_SIZE) / 2,
67
+ borderRadius: radius.pill,
68
+ backgroundColor: 'rgba(255,255,255,0.18)'
69
+ },
70
+ heading: {
71
+ textAlign: START_ALIGN,
72
+ fontSize: fontSize.display,
73
+ lineHeight: fontSize.display * 1.15,
74
+ fontWeight: '600',
75
+ marginBottom: spacing.md
76
+ },
77
+ subheading: {
78
+ textAlign: START_ALIGN,
79
+ fontSize: fontSize.body,
80
+ lineHeight: fontSize.body * 1.4
81
+ },
82
+ // Meets the header on a straight seam. No top padding here: the start card
83
+ // is pulled up past this edge, and the rest of the content takes its spacing
84
+ // from `bodyContent`.
85
+ body: {
86
+ flex: 1,
87
+ backgroundColor: palette.white,
88
+ paddingHorizontal: spacing.xl,
89
+ paddingBottom: spacing.xxl
90
+ },
91
+ bodyContent: {
92
+ flex: 1,
93
+ paddingTop: spacing.xl
94
+ },
95
+ offlineNotice: {
96
+ flexDirection: 'row',
97
+ alignItems: 'flex-start',
98
+ gap: spacing.sm + 2,
99
+ padding: spacing.md,
100
+ borderRadius: radius.md,
101
+ backgroundColor: palette.warningBg,
102
+ borderWidth: StyleSheet.hairlineWidth,
103
+ borderColor: palette.warningBorder,
104
+ marginBottom: spacing.lg
105
+ },
106
+ offlineText: {
107
+ textAlign: START_ALIGN,
108
+ flex: 1,
109
+ fontSize: fontSize.meta,
110
+ lineHeight: fontSize.meta * 1.4,
111
+ color: palette.warningText
112
+ },
113
+ startCardSlot: {
114
+ marginTop: -START_CARD_LIFT
115
+ },
116
+ // Neutral and opaque, like the web card: it spans two backgrounds, and a
117
+ // translucent or brand-tinted fill would let the header bleed through its
118
+ // top or stain the seam. Shadowed because without it the half over the
119
+ // header reads as a flat cut-out.
120
+ startCard: {
121
+ flexDirection: 'row',
122
+ alignItems: 'center',
123
+ gap: spacing.md,
124
+ minHeight: START_CARD_MIN_HEIGHT,
125
+ paddingHorizontal: spacing.xl,
126
+ paddingVertical: spacing.lg + 2,
127
+ borderRadius: radius.lg,
128
+ borderWidth: StyleSheet.hairlineWidth,
129
+ borderColor: palette.border,
130
+ backgroundColor: palette.surface,
131
+ ...shadows.card
132
+ },
133
+ startCardPressed: {
134
+ opacity: 0.85
135
+ },
136
+ startIcon: {
137
+ width: 40,
138
+ height: 40,
139
+ borderRadius: 20,
140
+ alignItems: 'center',
141
+ justifyContent: 'center'
142
+ },
143
+ startCopy: {
144
+ flex: 1,
145
+ minWidth: 0
146
+ },
147
+ startTitle: {
148
+ textAlign: START_ALIGN,
149
+ fontSize: fontSize.title,
150
+ fontWeight: '600',
151
+ color: palette.ink
152
+ },
153
+ startSubtitle: {
154
+ textAlign: START_ALIGN,
155
+ fontSize: fontSize.meta,
156
+ color: palette.textSubtle,
157
+ marginTop: 2
158
+ },
159
+ recentHeader: {
160
+ flexDirection: 'row',
161
+ alignItems: 'center',
162
+ justifyContent: 'space-between',
163
+ minHeight: 28,
164
+ marginBottom: spacing.sm
165
+ },
166
+ recentTitle: {
167
+ textAlign: START_ALIGN,
168
+ fontSize: fontSize.caption,
169
+ fontWeight: '700',
170
+ color: palette.textMuted,
171
+ letterSpacing: I18nManager.isRTL ? 0 : 0.6,
172
+ textTransform: 'uppercase'
173
+ },
174
+ viewAllButton: {
175
+ minHeight: 32,
176
+ paddingHorizontal: spacing.xs,
177
+ justifyContent: 'center'
178
+ },
179
+ viewAllLabel: {
180
+ textAlign: START_ALIGN,
181
+ fontSize: fontSize.meta,
182
+ fontWeight: '600'
183
+ },
184
+ // Border rather than a shadow: `overflow: hidden` keeps the rows' ripple
185
+ // inside the rounded corners, and would clip a shadow on iOS anyway.
186
+ recentCard: {
187
+ overflow: 'hidden'
188
+ },
189
+ recentDivider: {
190
+ marginStart: rowDividerInset(spacing.lg)
191
+ },
192
+ // Absorbs the slack so the status strip stays pinned to the bottom, and
193
+ // centers the empty hint when there is nothing else to show.
194
+ spacer: {
195
+ flex: 1,
196
+ minHeight: spacing.lg,
197
+ justifyContent: 'center'
198
+ },
199
+ emptyHint: {
200
+ alignItems: 'center',
201
+ gap: spacing.sm,
202
+ paddingVertical: spacing.xl
203
+ },
204
+ emptyHintText: {
205
+ fontSize: fontSize.meta,
206
+ color: palette.textSubtle,
207
+ textAlign: 'center'
208
+ },
209
+ statusStrip: {
210
+ flexDirection: 'row',
211
+ alignItems: 'center',
212
+ gap: spacing.sm + 2,
213
+ minHeight: 56,
214
+ paddingTop: spacing.lg,
215
+ marginTop: spacing.lg,
216
+ borderTopWidth: StyleSheet.hairlineWidth,
217
+ borderTopColor: palette.borderSoft
218
+ },
219
+ avatarStack: {
220
+ flexDirection: 'row',
221
+ alignItems: 'center'
222
+ },
223
+ avatarStackItem: {
224
+ borderWidth: 2,
225
+ borderColor: palette.white
226
+ },
227
+ avatarStackOverlap: {
228
+ marginStart: -10
229
+ },
230
+ statusDot: {
231
+ width: 8,
232
+ height: 8,
233
+ borderRadius: 4
234
+ },
235
+ statusText: {
236
+ textAlign: START_ALIGN,
237
+ flex: 1,
238
+ fontSize: fontSize.meta,
239
+ color: palette.textMuted
240
+ }
241
+ });
242
+ //# sourceMappingURL=HomeView.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["I18nManager","StyleSheet","rowDividerInset","fontSize","palette","radius","shadows","spacing","START_ALIGN","HEADER_MIN_HEIGHT","HEADER_BOTTOM_PADDING","START_CARD_LIFT","START_CARD_MIN_HEIGHT","HEADER_FADE_HEIGHT","CLOSE_BUTTON_SIZE","CLOSE_ICON_SIZE","styles","create","contentContainer","flexGrow","header","minHeight","paddingHorizontal","xl","paddingTop","paddingBottom","overflow","imageScrim","absoluteFillObject","backgroundColor","headerTop","flexDirection","alignItems","justifyContent","headerSpacer","flex","logo","width","height","closeButton","marginStart","padding","borderRadius","pill","heading","textAlign","display","lineHeight","fontWeight","marginBottom","md","subheading","body","white","xxl","bodyContent","offlineNotice","gap","sm","warningBg","borderWidth","hairlineWidth","borderColor","warningBorder","lg","offlineText","meta","color","warningText","startCardSlot","marginTop","startCard","paddingVertical","border","surface","card","startCardPressed","opacity","startIcon","startCopy","minWidth","startTitle","title","ink","startSubtitle","textSubtle","recentHeader","recentTitle","caption","textMuted","letterSpacing","isRTL","textTransform","viewAllButton","xs","viewAllLabel","recentCard","recentDivider","spacer","emptyHint","emptyHintText","statusStrip","borderTopWidth","borderTopColor","borderSoft","avatarStack","avatarStackItem","avatarStackOverlap","statusDot","statusText"],"sourceRoot":"../../../../../src","sources":["ui/screens/home/HomeView.styles.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=HomeView.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["ui/screens/home/HomeView.types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Greeting helpers for the Home space. The admin's heading renders exactly as
5
+ * the dashboard sent it, with one exception: an explicit name token, which is
6
+ * the admin asking for the visitor's first name to be filled in.
7
+ * Deliberately free of React and React Native so they stay trivial to test.
8
+ */
9
+
10
+ /** `{{name}}`, `{name}`, `{{first_name}}` all stand in for the visitor's first name. */
11
+ const NAME_TOKEN = /\{\{?\s*(?:name|first_?name)\s*\}?\}/gi;
12
+ const EMAIL_LIKE = /@/;
13
+ const PHONE_LIKE = /^[\d\s+()\-.]+$/;
14
+
15
+ /**
16
+ * First name suitable for greeting someone by. Hosts sometimes put an email or
17
+ * a phone number in the name field, and greeting "Hi rep@acme.com" is worse
18
+ * than not personalizing at all.
19
+ */
20
+ export function firstName(fullName) {
21
+ const trimmed = (fullName ?? '').trim();
22
+ if (!trimmed || EMAIL_LIKE.test(trimmed) || PHONE_LIKE.test(trimmed)) return null;
23
+ const candidate = (trimmed.split(/\s+/)[0] ?? '').replace(/[,;:.]+$/, '');
24
+ // Under 2 rejects a bare initial; over 24 means a sentence landed in the field.
25
+ if (candidate.length < 2 || candidate.length > 24) return null;
26
+ return candidate;
27
+ }
28
+
29
+ /** Repair the spacing and punctuation left behind when a token resolves to nothing. */
30
+ function tidy(value) {
31
+ return value.replace(/\s+/g, ' ').replace(/\s+([,!?.:;])/g, '$1').replace(/^[\s,]+/, '').trim();
32
+ }
33
+
34
+ /**
35
+ * Resolve the admin's heading against the visitor's name. Only an explicit
36
+ * token is substituted: a generic "Hi there" stays "Hi there", because that is
37
+ * what the dashboard preview shows the admin and the phone has to match it.
38
+ */
39
+ export function personalizeGreeting(template, visitorName, fallback) {
40
+ const base = (template ?? '').trim() || fallback;
41
+ const tokenized = base.replace(NAME_TOKEN, firstName(visitorName) ?? '');
42
+ return tokenized === base ? base : tidy(tokenized);
43
+ }
44
+ //# sourceMappingURL=greeting.js.map