@cossistant/react 0.0.1

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 (372) hide show
  1. package/_virtual/rolldown_runtime.js +13 -0
  2. package/conversation.d.ts +312 -0
  3. package/conversation.d.ts.map +1 -0
  4. package/hooks/index.d.ts +23 -0
  5. package/hooks/index.js +24 -0
  6. package/hooks/private/store/use-conversations-store.d.ts +13 -0
  7. package/hooks/private/store/use-conversations-store.d.ts.map +1 -0
  8. package/hooks/private/store/use-conversations-store.js +34 -0
  9. package/hooks/private/store/use-conversations-store.js.map +1 -0
  10. package/hooks/private/store/use-store-selector.d.ts +10 -0
  11. package/hooks/private/store/use-store-selector.d.ts.map +1 -0
  12. package/hooks/private/store/use-store-selector.js +17 -0
  13. package/hooks/private/store/use-store-selector.js.map +1 -0
  14. package/hooks/private/store/use-website-store.d.ts +18 -0
  15. package/hooks/private/store/use-website-store.d.ts.map +1 -0
  16. package/hooks/private/store/use-website-store.js +39 -0
  17. package/hooks/private/store/use-website-store.js.map +1 -0
  18. package/hooks/private/use-client-query.d.ts +25 -0
  19. package/hooks/private/use-client-query.d.ts.map +1 -0
  20. package/hooks/private/use-client-query.js +122 -0
  21. package/hooks/private/use-client-query.js.map +1 -0
  22. package/hooks/private/use-default-messages.d.ts +18 -0
  23. package/hooks/private/use-default-messages.d.ts.map +1 -0
  24. package/hooks/private/use-default-messages.js +45 -0
  25. package/hooks/private/use-default-messages.js.map +1 -0
  26. package/hooks/private/use-grouped-messages.d.ts +54 -0
  27. package/hooks/private/use-grouped-messages.d.ts.map +1 -0
  28. package/hooks/private/use-grouped-messages.js +157 -0
  29. package/hooks/private/use-grouped-messages.js.map +1 -0
  30. package/hooks/private/use-multimodal-input.d.ts +40 -0
  31. package/hooks/private/use-multimodal-input.d.ts.map +1 -0
  32. package/hooks/private/use-multimodal-input.js +129 -0
  33. package/hooks/private/use-multimodal-input.js.map +1 -0
  34. package/hooks/private/use-rest-client.d.ts +17 -0
  35. package/hooks/private/use-rest-client.d.ts.map +1 -0
  36. package/hooks/private/use-rest-client.js +41 -0
  37. package/hooks/private/use-rest-client.js.map +1 -0
  38. package/hooks/private/use-visitor-typing-reporter.d.ts +19 -0
  39. package/hooks/private/use-visitor-typing-reporter.d.ts.map +1 -0
  40. package/hooks/private/use-visitor-typing-reporter.js +140 -0
  41. package/hooks/private/use-visitor-typing-reporter.js.map +1 -0
  42. package/hooks/use-composer-refocus.d.ts +20 -0
  43. package/hooks/use-composer-refocus.d.ts.map +1 -0
  44. package/hooks/use-composer-refocus.js +32 -0
  45. package/hooks/use-composer-refocus.js.map +1 -0
  46. package/hooks/use-conversation-auto-seen.d.ts +54 -0
  47. package/hooks/use-conversation-auto-seen.d.ts.map +1 -0
  48. package/hooks/use-conversation-auto-seen.js +106 -0
  49. package/hooks/use-conversation-auto-seen.js.map +1 -0
  50. package/hooks/use-conversation-history-page.d.ts +86 -0
  51. package/hooks/use-conversation-history-page.d.ts.map +1 -0
  52. package/hooks/use-conversation-history-page.js +97 -0
  53. package/hooks/use-conversation-history-page.js.map +1 -0
  54. package/hooks/use-conversation-lifecycle.d.ts +80 -0
  55. package/hooks/use-conversation-lifecycle.d.ts.map +1 -0
  56. package/hooks/use-conversation-lifecycle.js +54 -0
  57. package/hooks/use-conversation-lifecycle.js.map +1 -0
  58. package/hooks/use-conversation-page.d.ts +82 -0
  59. package/hooks/use-conversation-page.d.ts.map +1 -0
  60. package/hooks/use-conversation-page.js +138 -0
  61. package/hooks/use-conversation-page.js.map +1 -0
  62. package/hooks/use-conversation-seen.d.ts +17 -0
  63. package/hooks/use-conversation-seen.d.ts.map +1 -0
  64. package/hooks/use-conversation-seen.js +58 -0
  65. package/hooks/use-conversation-seen.js.map +1 -0
  66. package/hooks/use-conversation-timeline-items.d.ts +21 -0
  67. package/hooks/use-conversation-timeline-items.d.ts.map +1 -0
  68. package/hooks/use-conversation-timeline-items.js +87 -0
  69. package/hooks/use-conversation-timeline-items.js.map +1 -0
  70. package/hooks/use-conversation-typing.d.ts +13 -0
  71. package/hooks/use-conversation-typing.d.ts.map +1 -0
  72. package/hooks/use-conversation-typing.js +34 -0
  73. package/hooks/use-conversation-typing.js.map +1 -0
  74. package/hooks/use-conversation.d.ts +18 -0
  75. package/hooks/use-conversation.d.ts.map +1 -0
  76. package/hooks/use-conversation.js +44 -0
  77. package/hooks/use-conversation.js.map +1 -0
  78. package/hooks/use-conversations.d.ts +20 -0
  79. package/hooks/use-conversations.d.ts.map +1 -0
  80. package/hooks/use-conversations.js +68 -0
  81. package/hooks/use-conversations.js.map +1 -0
  82. package/hooks/use-create-conversation.d.ts +30 -0
  83. package/hooks/use-create-conversation.d.ts.map +1 -0
  84. package/hooks/use-create-conversation.js +67 -0
  85. package/hooks/use-create-conversation.js.map +1 -0
  86. package/hooks/use-home-page.d.ts +82 -0
  87. package/hooks/use-home-page.d.ts.map +1 -0
  88. package/hooks/use-home-page.js +89 -0
  89. package/hooks/use-home-page.js.map +1 -0
  90. package/hooks/use-message-composer.d.ts +88 -0
  91. package/hooks/use-message-composer.d.ts.map +1 -0
  92. package/hooks/use-message-composer.js +94 -0
  93. package/hooks/use-message-composer.js.map +1 -0
  94. package/hooks/use-realtime-support.d.ts +25 -0
  95. package/hooks/use-realtime-support.d.ts.map +1 -0
  96. package/hooks/use-realtime-support.js +29 -0
  97. package/hooks/use-realtime-support.js.map +1 -0
  98. package/hooks/use-send-message.d.ts +34 -0
  99. package/hooks/use-send-message.d.ts.map +1 -0
  100. package/hooks/use-send-message.js +118 -0
  101. package/hooks/use-send-message.js.map +1 -0
  102. package/hooks/use-visitor.d.ts +28 -0
  103. package/hooks/use-visitor.d.ts.map +1 -0
  104. package/hooks/use-visitor.js +59 -0
  105. package/hooks/use-visitor.js.map +1 -0
  106. package/hooks/use-window-visibility-focus.d.ts +9 -0
  107. package/hooks/use-window-visibility-focus.d.ts.map +1 -0
  108. package/hooks/use-window-visibility-focus.js +53 -0
  109. package/hooks/use-window-visibility-focus.js.map +1 -0
  110. package/identify-visitor.d.ts +18 -0
  111. package/identify-visitor.d.ts.map +1 -0
  112. package/identify-visitor.js +26 -0
  113. package/identify-visitor.js.map +1 -0
  114. package/index.d.ts +38 -0
  115. package/index.js +38 -0
  116. package/package.json +121 -0
  117. package/primitives/avatar/avatar.d.ts +31 -0
  118. package/primitives/avatar/avatar.d.ts.map +1 -0
  119. package/primitives/avatar/avatar.js +49 -0
  120. package/primitives/avatar/avatar.js.map +1 -0
  121. package/primitives/avatar/fallback.d.ts +24 -0
  122. package/primitives/avatar/fallback.d.ts.map +1 -0
  123. package/primitives/avatar/fallback.js +57 -0
  124. package/primitives/avatar/fallback.js.map +1 -0
  125. package/primitives/avatar/image.d.ts +27 -0
  126. package/primitives/avatar/image.d.ts.map +1 -0
  127. package/primitives/avatar/image.js +58 -0
  128. package/primitives/avatar/image.js.map +1 -0
  129. package/primitives/avatar/index.d.ts +4 -0
  130. package/primitives/avatar/index.js +5 -0
  131. package/primitives/avatar/index.parts.d.ts +4 -0
  132. package/primitives/avatar/index.parts.js +5 -0
  133. package/primitives/bubble.d.ts +28 -0
  134. package/primitives/bubble.d.ts.map +1 -0
  135. package/primitives/bubble.js +43 -0
  136. package/primitives/bubble.js.map +1 -0
  137. package/primitives/button.d.ts +19 -0
  138. package/primitives/button.d.ts.map +1 -0
  139. package/primitives/button.js +27 -0
  140. package/primitives/button.js.map +1 -0
  141. package/primitives/conversation-timeline.d.ts +86 -0
  142. package/primitives/conversation-timeline.d.ts.map +1 -0
  143. package/primitives/conversation-timeline.js +119 -0
  144. package/primitives/conversation-timeline.js.map +1 -0
  145. package/primitives/index.d.ts +20 -0
  146. package/primitives/index.d.ts.map +1 -0
  147. package/primitives/index.js +45 -0
  148. package/primitives/index.js.map +1 -0
  149. package/primitives/index.parts.d.ts +13 -0
  150. package/primitives/index.parts.js +14 -0
  151. package/primitives/multimodal-input.d.ts +53 -0
  152. package/primitives/multimodal-input.d.ts.map +1 -0
  153. package/primitives/multimodal-input.js +106 -0
  154. package/primitives/multimodal-input.js.map +1 -0
  155. package/primitives/timeline-item-group.d.ts +166 -0
  156. package/primitives/timeline-item-group.d.ts.map +1 -0
  157. package/primitives/timeline-item-group.js +204 -0
  158. package/primitives/timeline-item-group.js.map +1 -0
  159. package/primitives/timeline-item.d.ts +75 -0
  160. package/primitives/timeline-item.d.ts.map +1 -0
  161. package/primitives/timeline-item.js +145 -0
  162. package/primitives/timeline-item.js.map +1 -0
  163. package/primitives/window.d.ts +31 -0
  164. package/primitives/window.d.ts.map +1 -0
  165. package/primitives/window.js +58 -0
  166. package/primitives/window.js.map +1 -0
  167. package/provider.d.ts +95 -0
  168. package/provider.d.ts.map +1 -0
  169. package/provider.js +124 -0
  170. package/provider.js.map +1 -0
  171. package/realtime/event-filter.d.ts +8 -0
  172. package/realtime/event-filter.d.ts.map +1 -0
  173. package/realtime/event-filter.js +21 -0
  174. package/realtime/event-filter.js.map +1 -0
  175. package/realtime/index.d.ts +6 -0
  176. package/realtime/index.js +7 -0
  177. package/realtime/provider.d.ts +57 -0
  178. package/realtime/provider.d.ts.map +1 -0
  179. package/realtime/provider.js +351 -0
  180. package/realtime/provider.js.map +1 -0
  181. package/realtime/seen-store.d.ts +23 -0
  182. package/realtime/seen-store.d.ts.map +1 -0
  183. package/realtime/seen-store.js +34 -0
  184. package/realtime/seen-store.js.map +1 -0
  185. package/realtime/support-provider.d.ts +17 -0
  186. package/realtime/support-provider.d.ts.map +1 -0
  187. package/realtime/support-provider.js +54 -0
  188. package/realtime/support-provider.js.map +1 -0
  189. package/realtime/typing-store.d.ts +30 -0
  190. package/realtime/typing-store.d.ts.map +1 -0
  191. package/realtime/typing-store.js +34 -0
  192. package/realtime/typing-store.js.map +1 -0
  193. package/realtime/use-realtime.d.ts +29 -0
  194. package/realtime/use-realtime.d.ts.map +1 -0
  195. package/realtime/use-realtime.js +47 -0
  196. package/realtime/use-realtime.js.map +1 -0
  197. package/realtime-events.d.ts +344 -0
  198. package/realtime-events.d.ts.map +1 -0
  199. package/schemas.d.ts +90 -0
  200. package/schemas.d.ts.map +1 -0
  201. package/support/components/avatar-stack.d.ts +45 -0
  202. package/support/components/avatar-stack.d.ts.map +1 -0
  203. package/support/components/avatar-stack.js +72 -0
  204. package/support/components/avatar-stack.js.map +1 -0
  205. package/support/components/avatar.d.ts +15 -0
  206. package/support/components/avatar.d.ts.map +1 -0
  207. package/support/components/avatar.js +23 -0
  208. package/support/components/avatar.js.map +1 -0
  209. package/support/components/bubble.d.ts +10 -0
  210. package/support/components/bubble.d.ts.map +1 -0
  211. package/support/components/bubble.js +95 -0
  212. package/support/components/bubble.js.map +1 -0
  213. package/support/components/button.d.ts +20 -0
  214. package/support/components/button.d.ts.map +1 -0
  215. package/support/components/button.js +41 -0
  216. package/support/components/button.js.map +1 -0
  217. package/support/components/container.d.ts +14 -0
  218. package/support/components/container.d.ts.map +1 -0
  219. package/support/components/container.js +115 -0
  220. package/support/components/container.js.map +1 -0
  221. package/support/components/conversation-button-link.d.ts +34 -0
  222. package/support/components/conversation-button-link.d.ts.map +1 -0
  223. package/support/components/conversation-button-link.js +195 -0
  224. package/support/components/conversation-button-link.js.map +1 -0
  225. package/support/components/conversation-event.d.ts +14 -0
  226. package/support/components/conversation-event.d.ts.map +1 -0
  227. package/support/components/conversation-event.js +76 -0
  228. package/support/components/conversation-event.js.map +1 -0
  229. package/support/components/conversation-timeline.d.ts +17 -0
  230. package/support/components/conversation-timeline.d.ts.map +1 -0
  231. package/support/components/conversation-timeline.js +95 -0
  232. package/support/components/conversation-timeline.js.map +1 -0
  233. package/support/components/cossistant-branding.d.ts +12 -0
  234. package/support/components/cossistant-branding.d.ts.map +1 -0
  235. package/support/components/cossistant-branding.js +22 -0
  236. package/support/components/cossistant-branding.js.map +1 -0
  237. package/support/components/header.d.ts +11 -0
  238. package/support/components/header.d.ts.map +1 -0
  239. package/support/components/header.js +43 -0
  240. package/support/components/header.js.map +1 -0
  241. package/support/components/icons.d.ts +21 -0
  242. package/support/components/icons.d.ts.map +1 -0
  243. package/support/components/icons.js +131 -0
  244. package/support/components/icons.js.map +1 -0
  245. package/support/components/index.d.ts +11 -0
  246. package/support/components/index.js +12 -0
  247. package/support/components/multimodal-input.d.ts +28 -0
  248. package/support/components/multimodal-input.d.ts.map +1 -0
  249. package/support/components/multimodal-input.js +138 -0
  250. package/support/components/multimodal-input.js.map +1 -0
  251. package/support/components/navigation-tab.d.ts +7 -0
  252. package/support/components/navigation-tab.d.ts.map +1 -0
  253. package/support/components/navigation-tab.js +40 -0
  254. package/support/components/navigation-tab.js.map +1 -0
  255. package/support/components/support-content.d.ts +22 -0
  256. package/support/components/support-content.d.ts.map +1 -0
  257. package/support/components/support-content.js +50 -0
  258. package/support/components/support-content.js.map +1 -0
  259. package/support/components/text-effect.d.ts +49 -0
  260. package/support/components/text-effect.d.ts.map +1 -0
  261. package/support/components/text-effect.js +221 -0
  262. package/support/components/text-effect.js.map +1 -0
  263. package/support/components/timeline-message-group.d.ts +16 -0
  264. package/support/components/timeline-message-group.d.ts.map +1 -0
  265. package/support/components/timeline-message-group.js +117 -0
  266. package/support/components/timeline-message-group.js.map +1 -0
  267. package/support/components/timeline-message-item.d.ts +17 -0
  268. package/support/components/timeline-message-item.d.ts.map +1 -0
  269. package/support/components/timeline-message-item.js +42 -0
  270. package/support/components/timeline-message-item.js.map +1 -0
  271. package/support/components/typing-indicator.d.ts +26 -0
  272. package/support/components/typing-indicator.d.ts.map +1 -0
  273. package/support/components/typing-indicator.js +37 -0
  274. package/support/components/typing-indicator.js.map +1 -0
  275. package/support/components/watermark.d.ts +8 -0
  276. package/support/components/watermark.d.ts.map +1 -0
  277. package/support/components/watermark.js +34 -0
  278. package/support/components/watermark.js.map +1 -0
  279. package/support/context/config.d.ts +32 -0
  280. package/support/context/config.d.ts.map +1 -0
  281. package/support/context/config.js +27 -0
  282. package/support/context/config.js.map +1 -0
  283. package/support/context/websocket.d.ts +22 -0
  284. package/support/context/websocket.d.ts.map +1 -0
  285. package/support/context/websocket.js +113 -0
  286. package/support/context/websocket.js.map +1 -0
  287. package/support/index.d.ts +39 -0
  288. package/support/index.d.ts.map +1 -0
  289. package/support/index.js +43 -0
  290. package/support/index.js.map +1 -0
  291. package/support/pages/articles.d.ts +7 -0
  292. package/support/pages/articles.d.ts.map +1 -0
  293. package/support/pages/articles.js +39 -0
  294. package/support/pages/articles.js.map +1 -0
  295. package/support/pages/conversation-history.d.ts +18 -0
  296. package/support/pages/conversation-history.d.ts.map +1 -0
  297. package/support/pages/conversation-history.js +120 -0
  298. package/support/pages/conversation-history.js.map +1 -0
  299. package/support/pages/conversation.d.ts +32 -0
  300. package/support/pages/conversation.d.ts.map +1 -0
  301. package/support/pages/conversation.js +92 -0
  302. package/support/pages/conversation.js.map +1 -0
  303. package/support/pages/home.d.ts +20 -0
  304. package/support/pages/home.d.ts.map +1 -0
  305. package/support/pages/home.js +184 -0
  306. package/support/pages/home.js.map +1 -0
  307. package/support/router.d.ts +14 -0
  308. package/support/router.d.ts.map +1 -0
  309. package/support/router.js +31 -0
  310. package/support/router.js.map +1 -0
  311. package/support/store/index.d.ts +2 -0
  312. package/support/store/index.js +3 -0
  313. package/support/store/support-store.d.ts +42 -0
  314. package/support/store/support-store.d.ts.map +1 -0
  315. package/support/store/support-store.js +66 -0
  316. package/support/store/support-store.js.map +1 -0
  317. package/support/support-CMoDLQoC.css +408 -0
  318. package/support/support-CMoDLQoC.css.map +1 -0
  319. package/support/support.js +1 -0
  320. package/support/text/index.d.ts +35 -0
  321. package/support/text/index.d.ts.map +1 -0
  322. package/support/text/index.js +71 -0
  323. package/support/text/index.js.map +1 -0
  324. package/support/text/locales/en.d.ts +7 -0
  325. package/support/text/locales/en.d.ts.map +1 -0
  326. package/support/text/locales/en.js +65 -0
  327. package/support/text/locales/en.js.map +1 -0
  328. package/support/text/locales/es.d.ts +7 -0
  329. package/support/text/locales/es.d.ts.map +1 -0
  330. package/support/text/locales/es.js +64 -0
  331. package/support/text/locales/es.js.map +1 -0
  332. package/support/text/locales/fr.d.ts +7 -0
  333. package/support/text/locales/fr.d.ts.map +1 -0
  334. package/support/text/locales/fr.js +64 -0
  335. package/support/text/locales/fr.js.map +1 -0
  336. package/support/text/locales/keys.d.ts +216 -0
  337. package/support/text/locales/keys.d.ts.map +1 -0
  338. package/support/text/locales/keys.js +54 -0
  339. package/support/text/locales/keys.js.map +1 -0
  340. package/support/text/runtime.d.ts +17 -0
  341. package/support/text/runtime.d.ts.map +1 -0
  342. package/support/text/runtime.js +156 -0
  343. package/support/text/runtime.js.map +1 -0
  344. package/support/utils/index.d.ts +7 -0
  345. package/support/utils/index.d.ts.map +1 -0
  346. package/support/utils/index.js +11 -0
  347. package/support/utils/index.js.map +1 -0
  348. package/support/utils/time.d.ts +5 -0
  349. package/support/utils/time.d.ts.map +1 -0
  350. package/support/utils/time.js +28 -0
  351. package/support/utils/time.js.map +1 -0
  352. package/support-config.d.ts +20 -0
  353. package/support-config.d.ts.map +1 -0
  354. package/support-config.js +25 -0
  355. package/support-config.js.map +1 -0
  356. package/support.css +2 -0
  357. package/timeline-item.d.ts +133 -0
  358. package/timeline-item.d.ts.map +1 -0
  359. package/utils/id.d.ts +6 -0
  360. package/utils/id.d.ts.map +1 -0
  361. package/utils/id.js +13 -0
  362. package/utils/id.js.map +1 -0
  363. package/utils/index.d.ts +3 -0
  364. package/utils/index.js +4 -0
  365. package/utils/text.d.ts +5 -0
  366. package/utils/text.d.ts.map +1 -0
  367. package/utils/text.js +9 -0
  368. package/utils/text.js.map +1 -0
  369. package/utils/use-render-element.d.ts +22 -0
  370. package/utils/use-render-element.d.ts.map +1 -0
  371. package/utils/use-render-element.js +35 -0
  372. package/utils/use-render-element.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","names":[],"sources":["../../../src/support/pages/conversation.tsx"],"sourcesContent":["import type { TimelineItem } from \"@cossistant/types/api/timeline-item\";\nimport { useConversationPage } from \"../../hooks/use-conversation-page\";\nimport { useSupport } from \"../../provider\";\nimport { AvatarStack } from \"../components/avatar-stack\";\nimport { ConversationTimelineList } from \"../components/conversation-timeline\";\nimport { Header } from \"../components/header\";\nimport { MultimodalInput } from \"../components/multimodal-input\";\nimport { useSupportNavigation } from \"../store\";\nimport { Text, useSupportText } from \"../text\";\n\ntype ConversationPageProps = {\n\t/**\n\t * The conversation ID to display (can be PENDING_CONVERSATION_ID or a real ID).\n\t */\n\tconversationId: string;\n\n\t/**\n\t * Optional initial message to send when opening the conversation.\n\t */\n\tinitialMessage?: string;\n\n\t/**\n\t * Optional timeline items to display (for optimistic updates or initial state).\n\t */\n\titems?: TimelineItem[];\n};\n\n/**\n * Main conversation page component.\n *\n * All conversation logic is handled by the useConversationPage hook,\n * making this component focused purely on rendering and user interaction.\n */\nexport const ConversationPage = ({\n\tconversationId: initialConversationId,\n\tinitialMessage,\n\titems: passedItems = [],\n}: ConversationPageProps) => {\n\tconst { website, availableAIAgents, availableHumanAgents, visitor } =\n\t\tuseSupport();\n\tconst { navigate, replace, goBack, canGoBack } = useSupportNavigation();\n\tconst text = useSupportText();\n\n\t// Main conversation hook - handles all logic\n\tconst conversation = useConversationPage({\n\t\tconversationId: initialConversationId,\n\t\titems: passedItems,\n\t\tinitialMessage,\n\t\tonConversationIdChange: (newConversationId) => {\n\t\t\t// Update navigation when conversation is created\n\t\t\treplace({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: { conversationId: newConversationId },\n\t\t\t});\n\t\t},\n\t});\n\n\tconst handleGoBack = () => {\n\t\tif (canGoBack) {\n\t\t\tgoBack();\n\t\t} else {\n\t\t\tnavigate({ page: \"HOME\" });\n\t\t}\n\t};\n\n\treturn (\n\t\t<div className=\"flex h-full flex-col gap-0 overflow-hidden\">\n\t\t\t<Header onGoBack={handleGoBack}>\n\t\t\t\t<div className=\"flex w-full items-center justify-between gap-2 py-3\">\n\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t<p className=\"font-medium text-sm\">{website?.name}</p>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"p\"\n\t\t\t\t\t\t\tclassName=\"text-muted-foreground text-sm\"\n\t\t\t\t\t\t\ttextKey=\"common.labels.supportOnline\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AvatarStack\n\t\t\t\t\t\taiAgents={availableAIAgents}\n\t\t\t\t\t\tgapWidth={2}\n\t\t\t\t\t\thumanAgents={availableHumanAgents}\n\t\t\t\t\t\tsize={32}\n\t\t\t\t\t\tspacing={28}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</Header>\n\n\t\t\t<ConversationTimelineList\n\t\t\t\tavailableAIAgents={availableAIAgents}\n\t\t\t\tavailableHumanAgents={availableHumanAgents}\n\t\t\t\tclassName=\"min-h-0 flex-1 px-4\"\n\t\t\t\tconversationId={conversation.conversationId}\n\t\t\t\tcurrentVisitorId={visitor?.id}\n\t\t\t\titems={conversation.items}\n\t\t\t/>\n\n\t\t\t<div className=\"flex-shrink-0 p-1\">\n\t\t\t\t<MultimodalInput\n\t\t\t\t\tdisabled={conversation.composer.isSubmitting}\n\t\t\t\t\terror={conversation.error}\n\t\t\t\t\tfiles={conversation.composer.files}\n\t\t\t\t\tisSubmitting={conversation.composer.isSubmitting}\n\t\t\t\t\tonChange={conversation.composer.setMessage}\n\t\t\t\t\tonFileSelect={conversation.composer.addFiles}\n\t\t\t\t\tonRemoveFile={conversation.composer.removeFile}\n\t\t\t\t\tonSubmit={conversation.composer.submit}\n\t\t\t\t\tplaceholder={text(\"component.multimodalInput.placeholder\")}\n\t\t\t\t\tvalue={conversation.composer.message}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAiCA,MAAa,oBAAoB,EAChC,gBAAgB,uBAChB,gBACA,OAAO,cAAc,EAAE,OACK;CAC5B,MAAM,EAAE,SAAS,mBAAmB,sBAAsB,YACzD,YAAY;CACb,MAAM,EAAE,UAAU,SAAS,QAAQ,cAAc,sBAAsB;CACvE,MAAM,OAAO,gBAAgB;CAG7B,MAAM,eAAe,oBAAoB;EACxC,gBAAgB;EAChB,OAAO;EACP;EACA,yBAAyB,sBAAsB;AAE9C,WAAQ;IACP,MAAM;IACN,QAAQ,EAAE,gBAAgB,mBAAmB;IAC7C,CAAC;;EAEH,CAAC;CAEF,MAAM,qBAAqB;AAC1B,MAAI,UACH,SAAQ;MAER,UAAS,EAAE,MAAM,QAAQ,CAAC;;AAI5B,QACC,qBAAC;EAAI,WAAU;;GACd,oBAAC;IAAO,UAAU;cACjB,qBAAC;KAAI,WAAU;gBACd,qBAAC;MAAI,WAAU;iBACd,oBAAC;OAAE,WAAU;iBAAuB,SAAS;QAAS,EACtD,oBAAC;OACA,IAAG;OACH,WAAU;OACV,SAAQ;QACP;OACG,EACN,oBAAC;MACA,UAAU;MACV,UAAU;MACV,aAAa;MACb,MAAM;MACN,SAAS;OACR;MACG;KACE;GAET,oBAAC;IACmB;IACG;IACtB,WAAU;IACV,gBAAgB,aAAa;IAC7B,kBAAkB,SAAS;IAC3B,OAAO,aAAa;KACnB;GAEF,oBAAC;IAAI,WAAU;cACd,oBAAC;KACA,UAAU,aAAa,SAAS;KAChC,OAAO,aAAa;KACpB,OAAO,aAAa,SAAS;KAC7B,cAAc,aAAa,SAAS;KACpC,UAAU,aAAa,SAAS;KAChC,cAAc,aAAa,SAAS;KACpC,cAAc,aAAa,SAAS;KACpC,UAAU,aAAa,SAAS;KAChC,aAAa,KAAK,wCAAwC;KAC1D,OAAO,aAAa,SAAS;MAC5B;KACG;;GACD"}
@@ -0,0 +1,20 @@
1
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
2
+
3
+ //#region src/support/pages/home.d.ts
4
+
5
+ /**
6
+ * Home page component for the support widget.
7
+ *
8
+ * Displays:
9
+ * - Welcome message with available agents
10
+ * - Quick action buttons
11
+ * - Last open conversation (if any)
12
+ * - Button to start new conversation
13
+ * - Link to conversation history
14
+ *
15
+ * All logic is handled by the useHomePage hook.
16
+ */
17
+ declare const HomePage: () => react_jsx_runtime5.JSX.Element;
18
+ //#endregion
19
+ export { HomePage };
20
+ //# sourceMappingURL=home.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.d.ts","names":[],"sources":["../../../src/support/pages/home.tsx"],"sourcesContent":[],"mappings":";;;;;;;AA0BA;;;;;;;;;cAAa,gBAAQ,kBAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,184 @@
1
+ import { AvatarStack } from "../components/avatar-stack.js";
2
+ import { useSupportNavigation } from "../store/support-store.js";
3
+ import { Button } from "../components/button.js";
4
+ import icons_default from "../components/icons.js";
5
+ import { Header } from "../components/header.js";
6
+ import { Text, useSupportText } from "../text/index.js";
7
+ import { PENDING_CONVERSATION_ID } from "../../utils/id.js";
8
+ import { Watermark } from "../components/watermark.js";
9
+ import { ConversationButtonLink } from "../components/conversation-button-link.js";
10
+ import { TextEffect } from "../components/text-effect.js";
11
+ import { useHomePage } from "../../hooks/use-home-page.js";
12
+ import { useSupport } from "../../provider.js";
13
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
14
+ import { motion } from "motion/react";
15
+
16
+ //#region src/support/pages/home.tsx
17
+ /**
18
+ * Home page component for the support widget.
19
+ *
20
+ * Displays:
21
+ * - Welcome message with available agents
22
+ * - Quick action buttons
23
+ * - Last open conversation (if any)
24
+ * - Button to start new conversation
25
+ * - Link to conversation history
26
+ *
27
+ * All logic is handled by the useHomePage hook.
28
+ */
29
+ const HomePage = () => {
30
+ const { website, availableHumanAgents, visitor, quickOptions } = useSupport();
31
+ const { navigate } = useSupportNavigation();
32
+ const text = useSupportText();
33
+ const home = useHomePage({
34
+ onStartConversation: (initialMessage) => {
35
+ navigate({
36
+ page: "CONVERSATION",
37
+ params: {
38
+ conversationId: PENDING_CONVERSATION_ID,
39
+ initialMessage
40
+ }
41
+ });
42
+ },
43
+ onOpenConversation: (conversationId) => {
44
+ navigate({
45
+ page: "CONVERSATION",
46
+ params: { conversationId }
47
+ });
48
+ },
49
+ onOpenConversationHistory: () => {
50
+ navigate({ page: "CONVERSATION_HISTORY" });
51
+ }
52
+ });
53
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
54
+ /* @__PURE__ */ jsx(Header, {}),
55
+ /* @__PURE__ */ jsx("div", {
56
+ className: "sticky top-4 flex flex-1 items-center justify-center",
57
+ children: /* @__PURE__ */ jsxs("div", {
58
+ className: "flex flex-col items-center gap-2",
59
+ children: [
60
+ /* @__PURE__ */ jsxs(motion.div, {
61
+ animate: "visible",
62
+ className: "flex flex-col items-center justify-center gap-2",
63
+ exit: "exit",
64
+ initial: "hidden",
65
+ transition: { delay: .1 },
66
+ variants: {
67
+ hidden: {
68
+ opacity: 0,
69
+ y: 20,
70
+ filter: "blur(12px)"
71
+ },
72
+ visible: {
73
+ opacity: 1,
74
+ y: 0,
75
+ filter: "blur(0px)"
76
+ },
77
+ exit: {
78
+ opacity: 0,
79
+ y: 20,
80
+ filter: "blur(12px)"
81
+ }
82
+ },
83
+ children: [/* @__PURE__ */ jsx(AvatarStack, {
84
+ aiAgents: website?.availableAIAgents || [],
85
+ humanAgents: availableHumanAgents,
86
+ size: 44,
87
+ spacing: 32
88
+ }), /* @__PURE__ */ jsx(Text, {
89
+ as: "p",
90
+ className: "mb-4 text-co-primary/80 text-sm",
91
+ textKey: "page.home.tagline",
92
+ variables: { websiteName: website?.name ?? null }
93
+ })]
94
+ }),
95
+ /* @__PURE__ */ jsx(TextEffect, {
96
+ as: "h2",
97
+ className: "max-w-xs text-balance text-center font-co-sans text-2xl leading-normal",
98
+ delay: .5,
99
+ preset: "fade-in-blur",
100
+ children: text("page.home.greeting", { visitorName: visitor?.contact?.name ?? void 0 })
101
+ }),
102
+ quickOptions.length > 0 && /* @__PURE__ */ jsx(motion.div, {
103
+ animate: "visible",
104
+ className: "mt-6 inline-flex gap-2",
105
+ exit: "exit",
106
+ initial: "hidden",
107
+ transition: { delay: 1.3 },
108
+ variants: {
109
+ hidden: {
110
+ opacity: 0,
111
+ y: 20,
112
+ filter: "blur(12px)"
113
+ },
114
+ visible: {
115
+ opacity: 1,
116
+ y: 0,
117
+ filter: "blur(0px)"
118
+ },
119
+ exit: {
120
+ opacity: 0,
121
+ y: 20,
122
+ filter: "blur(12px)"
123
+ }
124
+ },
125
+ children: quickOptions?.map((option) => /* @__PURE__ */ jsx(Button, {
126
+ className: "rounded-full border-dashed",
127
+ onClick: () => home.startConversation(option),
128
+ size: "default",
129
+ variant: "outline",
130
+ children: option
131
+ }, option))
132
+ })
133
+ ]
134
+ })
135
+ }),
136
+ /* @__PURE__ */ jsxs("div", {
137
+ className: "flex flex-shrink-0 flex-col items-center justify-center gap-2 px-6 pb-4",
138
+ children: [
139
+ home.availableConversationsCount > 0 && /* @__PURE__ */ jsx(Button, {
140
+ className: "relative w-full text-co-primary/40 text-xs hover:text-co-primary",
141
+ onClick: home.openConversationHistory,
142
+ variant: "ghost",
143
+ children: /* @__PURE__ */ jsx(Text, {
144
+ as: "span",
145
+ textKey: "page.home.history.more",
146
+ variables: { count: home.availableConversationsCount }
147
+ })
148
+ }),
149
+ home.lastOpenConversation && /* @__PURE__ */ jsx("div", {
150
+ className: "flex w-full flex-col overflow-clip rounded-md border border-co-border/80",
151
+ children: /* @__PURE__ */ jsx(ConversationButtonLink, {
152
+ className: "rounded-none",
153
+ conversation: home.lastOpenConversation,
154
+ onClick: () => {
155
+ if (home.lastOpenConversation) home.openConversation(home.lastOpenConversation.id);
156
+ }
157
+ }, home.lastOpenConversation.id)
158
+ }),
159
+ /* @__PURE__ */ jsxs("div", {
160
+ className: "sticky bottom-4 z-10 flex w-full flex-col items-center gap-2",
161
+ children: [/* @__PURE__ */ jsxs(Button, {
162
+ className: "relative w-full justify-between",
163
+ onClick: () => home.startConversation(),
164
+ size: "large",
165
+ variant: "secondary",
166
+ children: [/* @__PURE__ */ jsx(icons_default, {
167
+ className: "-translate-y-1/2 absolute top-1/2 right-4 size-3 text-co-primary/60 transition-transform duration-200 group-hover/btn:translate-x-0.5 group-hover/btn:text-co-primary",
168
+ name: "arrow-right",
169
+ variant: "default"
170
+ }), /* @__PURE__ */ jsx(Text, {
171
+ as: "span",
172
+ textKey: "common.actions.askQuestion"
173
+ })]
174
+ }), /* @__PURE__ */ jsx(Watermark, { className: "mt-4 mb-2" })]
175
+ }),
176
+ /* @__PURE__ */ jsx("div", {})
177
+ ]
178
+ })
179
+ ] });
180
+ };
181
+
182
+ //#endregion
183
+ export { HomePage };
184
+ //# sourceMappingURL=home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.js","names":["Icon"],"sources":["../../../src/support/pages/home.tsx"],"sourcesContent":["import { motion } from \"motion/react\";\nimport { useHomePage } from \"../../hooks/use-home-page\";\nimport { useSupport } from \"../../provider\";\nimport { PENDING_CONVERSATION_ID } from \"../../utils/id\";\nimport { AvatarStack } from \"../components/avatar-stack\";\nimport { Button } from \"../components/button\";\nimport { ConversationButtonLink } from \"../components/conversation-button-link\";\nimport { Header } from \"../components/header\";\nimport Icon from \"../components/icons\";\nimport { TextEffect } from \"../components/text-effect\";\nimport { Watermark } from \"../components/watermark\";\nimport { useSupportNavigation } from \"../store/support-store\";\nimport { Text, useSupportText } from \"../text\";\n\n/**\n * Home page component for the support widget.\n *\n * Displays:\n * - Welcome message with available agents\n * - Quick action buttons\n * - Last open conversation (if any)\n * - Button to start new conversation\n * - Link to conversation history\n *\n * All logic is handled by the useHomePage hook.\n */\nexport const HomePage = () => {\n\tconst { website, availableHumanAgents, visitor, quickOptions } = useSupport();\n\tconst { navigate } = useSupportNavigation();\n\tconst text = useSupportText();\n\n\t// Main home page hook - handles all logic\n\tconst home = useHomePage({\n\t\tonStartConversation: (initialMessage) => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: {\n\t\t\t\t\tconversationId: PENDING_CONVERSATION_ID,\n\t\t\t\t\tinitialMessage,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonOpenConversation: (conversationId) => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION\",\n\t\t\t\tparams: {\n\t\t\t\t\tconversationId,\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tonOpenConversationHistory: () => {\n\t\t\tnavigate({\n\t\t\t\tpage: \"CONVERSATION_HISTORY\",\n\t\t\t});\n\t\t},\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t<Header>{/* <NavigationTab /> */}</Header>\n\t\t\t<div className=\"sticky top-4 flex flex-1 items-center justify-center\">\n\t\t\t\t<div className=\"flex flex-col items-center gap-2\">\n\t\t\t\t\t<motion.div\n\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\tclassName=\"flex flex-col items-center justify-center gap-2\"\n\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tdelay: 0.1,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tvariants={{\n\t\t\t\t\t\t\thidden: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\tvisible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n\t\t\t\t\t\t\texit: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AvatarStack\n\t\t\t\t\t\t\taiAgents={website?.availableAIAgents || []}\n\t\t\t\t\t\t\thumanAgents={availableHumanAgents}\n\t\t\t\t\t\t\tsize={44}\n\t\t\t\t\t\t\tspacing={32}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"p\"\n\t\t\t\t\t\t\tclassName=\"mb-4 text-co-primary/80 text-sm\"\n\t\t\t\t\t\t\ttextKey=\"page.home.tagline\"\n\t\t\t\t\t\t\tvariables={{ websiteName: website?.name ?? null }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</motion.div>\n\n\t\t\t\t\t<TextEffect\n\t\t\t\t\t\tas=\"h2\"\n\t\t\t\t\t\tclassName=\"max-w-xs text-balance text-center font-co-sans text-2xl leading-normal\"\n\t\t\t\t\t\tdelay={0.5}\n\t\t\t\t\t\tpreset=\"fade-in-blur\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{text(\"page.home.greeting\", {\n\t\t\t\t\t\t\tvisitorName: visitor?.contact?.name ?? undefined,\n\t\t\t\t\t\t})}\n\t\t\t\t\t</TextEffect>\n\n\t\t\t\t\t{quickOptions.length > 0 && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\tclassName=\"mt-6 inline-flex gap-2\"\n\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\tdelay: 1.3,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tvariants={{\n\t\t\t\t\t\t\t\thidden: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\t\tvisible: { opacity: 1, y: 0, filter: \"blur(0px)\" },\n\t\t\t\t\t\t\t\texit: { opacity: 0, y: 20, filter: \"blur(12px)\" },\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{quickOptions?.map((option) => (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-full border-dashed\"\n\t\t\t\t\t\t\t\t\tkey={option}\n\t\t\t\t\t\t\t\t\tonClick={() => home.startConversation(option)}\n\t\t\t\t\t\t\t\t\tsize=\"default\"\n\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-shrink-0 flex-col items-center justify-center gap-2 px-6 pb-4\">\n\t\t\t\t{home.availableConversationsCount > 0 && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"relative w-full text-co-primary/40 text-xs hover:text-co-primary\"\n\t\t\t\t\t\tonClick={home.openConversationHistory}\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\ttextKey=\"page.home.history.more\"\n\t\t\t\t\t\t\tvariables={{ count: home.availableConversationsCount }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\n\t\t\t\t{home.lastOpenConversation && (\n\t\t\t\t\t<div className=\"flex w-full flex-col overflow-clip rounded-md border border-co-border/80\">\n\t\t\t\t\t\t<ConversationButtonLink\n\t\t\t\t\t\t\tclassName=\"rounded-none\"\n\t\t\t\t\t\t\tconversation={home.lastOpenConversation}\n\t\t\t\t\t\t\tkey={home.lastOpenConversation.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (home.lastOpenConversation) {\n\t\t\t\t\t\t\t\t\thome.openConversation(home.lastOpenConversation.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"sticky bottom-4 z-10 flex w-full flex-col items-center gap-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tclassName=\"relative w-full justify-between\"\n\t\t\t\t\t\tonClick={() => home.startConversation()}\n\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 right-4 size-3 text-co-primary/60 transition-transform duration-200 group-hover/btn:translate-x-0.5 group-hover/btn:text-co-primary\"\n\t\t\t\t\t\t\tname=\"arrow-right\"\n\t\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text as=\"span\" textKey=\"common.actions.askQuestion\" />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Watermark className=\"mt-4 mb-2\" />\n\t\t\t\t</div>\n\t\t\t\t<div />\n\t\t\t</div>\n\t\t</>\n\t);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,iBAAiB;CAC7B,MAAM,EAAE,SAAS,sBAAsB,SAAS,iBAAiB,YAAY;CAC7E,MAAM,EAAE,aAAa,sBAAsB;CAC3C,MAAM,OAAO,gBAAgB;CAG7B,MAAM,OAAO,YAAY;EACxB,sBAAsB,mBAAmB;AACxC,YAAS;IACR,MAAM;IACN,QAAQ;KACP,gBAAgB;KAChB;KACA;IACD,CAAC;;EAEH,qBAAqB,mBAAmB;AACvC,YAAS;IACR,MAAM;IACN,QAAQ,EACP,gBACA;IACD,CAAC;;EAEH,iCAAiC;AAChC,YAAS,EACR,MAAM,wBACN,CAAC;;EAEH,CAAC;AAEF,QACC;EACC,oBAAC,WAAyC;EAC1C,oBAAC;GAAI,WAAU;aACd,qBAAC;IAAI,WAAU;;KACd,qBAAC,OAAO;MACP,SAAQ;MACR,WAAU;MACV,MAAK;MACL,SAAQ;MACR,YAAY,EACX,OAAO,IACP;MACD,UAAU;OACT,QAAQ;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACnD,SAAS;QAAE,SAAS;QAAG,GAAG;QAAG,QAAQ;QAAa;OAClD,MAAM;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACjD;iBAED,oBAAC;OACA,UAAU,SAAS,qBAAqB,EAAE;OAC1C,aAAa;OACb,MAAM;OACN,SAAS;QACR,EACF,oBAAC;OACA,IAAG;OACH,WAAU;OACV,SAAQ;OACR,WAAW,EAAE,aAAa,SAAS,QAAQ,MAAM;QAChD;OACU;KAEb,oBAAC;MACA,IAAG;MACH,WAAU;MACV,OAAO;MACP,QAAO;gBAEN,KAAK,sBAAsB,EAC3B,aAAa,SAAS,SAAS,QAAQ,QACvC,CAAC;OACU;KAEZ,aAAa,SAAS,KACtB,oBAAC,OAAO;MACP,SAAQ;MACR,WAAU;MACV,MAAK;MACL,SAAQ;MACR,YAAY,EACX,OAAO,KACP;MACD,UAAU;OACT,QAAQ;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACnD,SAAS;QAAE,SAAS;QAAG,GAAG;QAAG,QAAQ;QAAa;OAClD,MAAM;QAAE,SAAS;QAAG,GAAG;QAAI,QAAQ;QAAc;OACjD;gBAEA,cAAc,KAAK,WACnB,oBAAC;OACA,WAAU;OAEV,eAAe,KAAK,kBAAkB,OAAO;OAC7C,MAAK;OACL,SAAQ;iBAEP;SALI,OAMG,CACR;OACU;;KAET;IACD;EACN,qBAAC;GAAI,WAAU;;IACb,KAAK,8BAA8B,KACnC,oBAAC;KACA,WAAU;KACV,SAAS,KAAK;KACd,SAAQ;eAER,oBAAC;MACA,IAAG;MACH,SAAQ;MACR,WAAW,EAAE,OAAO,KAAK,6BAA6B;OACrD;MACM;IAGT,KAAK,wBACL,oBAAC;KAAI,WAAU;eACd,oBAAC;MACA,WAAU;MACV,cAAc,KAAK;MAEnB,eAAe;AACd,WAAI,KAAK,qBACR,MAAK,iBAAiB,KAAK,qBAAqB,GAAG;;QAHhD,KAAK,qBAAqB,GAM9B;MACG;IAGP,qBAAC;KAAI,WAAU;gBACd,qBAAC;MACA,WAAU;MACV,eAAe,KAAK,mBAAmB;MACvC,MAAK;MACL,SAAQ;iBAER,oBAACA;OACA,WAAU;OACV,MAAK;OACL,SAAQ;QACP,EACF,oBAAC;OAAK,IAAG;OAAO,SAAQ;QAA+B;OAC/C,EACT,oBAAC,aAAU,WAAU,cAAc;MAC9B;IACN,oBAAC,UAAM;;IACF;KACJ"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+
3
+ //#region src/support/router.d.ts
4
+
5
+ /**
6
+ * Routes between different support widget pages based on navigation state.
7
+ *
8
+ * Each page manages its own state internally via dedicated hooks,
9
+ * so the router simply maps navigation state to the appropriate page component.
10
+ */
11
+ declare const SupportRouter: React.FC;
12
+ //#endregion
13
+ export { SupportRouter };
14
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","names":[],"sources":["../../src/support/router.tsx"],"sourcesContent":[],"mappings":";;;;;;AAaA;;;;cAAa,eAAe,KAAA,CAAM"}
@@ -0,0 +1,31 @@
1
+ import { useSupportNavigation } from "./store/support-store.js";
2
+ import { ArticlesPage } from "./pages/articles.js";
3
+ import { ConversationPage } from "./pages/conversation.js";
4
+ import { ConversationHistoryPage } from "./pages/conversation-history.js";
5
+ import { HomePage } from "./pages/home.js";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/support/router.tsx
9
+ /**
10
+ * Routes between different support widget pages based on navigation state.
11
+ *
12
+ * Each page manages its own state internally via dedicated hooks,
13
+ * so the router simply maps navigation state to the appropriate page component.
14
+ */
15
+ const SupportRouter = () => {
16
+ const { current } = useSupportNavigation();
17
+ switch (current.page) {
18
+ case "HOME": return /* @__PURE__ */ jsx(HomePage, {});
19
+ case "ARTICLES": return /* @__PURE__ */ jsx(ArticlesPage, {});
20
+ case "CONVERSATION": return /* @__PURE__ */ jsx(ConversationPage, {
21
+ conversationId: current.params.conversationId,
22
+ initialMessage: current.params.initialMessage
23
+ });
24
+ case "CONVERSATION_HISTORY": return /* @__PURE__ */ jsx(ConversationHistoryPage, {});
25
+ default: return /* @__PURE__ */ jsx(HomePage, {});
26
+ }
27
+ };
28
+
29
+ //#endregion
30
+ export { SupportRouter };
31
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","names":["SupportRouter: React.FC"],"sources":["../../src/support/router.tsx"],"sourcesContent":["import type React from \"react\";\nimport { ArticlesPage } from \"./pages/articles\";\nimport { ConversationPage } from \"./pages/conversation\";\nimport { ConversationHistoryPage } from \"./pages/conversation-history\";\nimport { HomePage } from \"./pages/home\";\nimport { useSupportNavigation } from \"./store/support-store\";\n\n/**\n * Routes between different support widget pages based on navigation state.\n *\n * Each page manages its own state internally via dedicated hooks,\n * so the router simply maps navigation state to the appropriate page component.\n */\nexport const SupportRouter: React.FC = () => {\n\tconst { current } = useSupportNavigation();\n\n\tswitch (current.page) {\n\t\tcase \"HOME\":\n\t\t\treturn <HomePage />;\n\n\t\tcase \"ARTICLES\":\n\t\t\treturn <ArticlesPage />;\n\n\t\tcase \"CONVERSATION\":\n\t\t\treturn (\n\t\t\t\t<ConversationPage\n\t\t\t\t\tconversationId={current.params.conversationId}\n\t\t\t\t\tinitialMessage={current.params.initialMessage}\n\t\t\t\t/>\n\t\t\t);\n\n\t\tcase \"CONVERSATION_HISTORY\":\n\t\t\treturn <ConversationHistoryPage />;\n\n\t\tdefault: {\n\t\t\treturn <HomePage />;\n\t\t}\n\t}\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAaA,sBAAgC;CAC5C,MAAM,EAAE,YAAY,sBAAsB;AAE1C,SAAQ,QAAQ,MAAhB;EACC,KAAK,OACJ,QAAO,oBAAC,aAAW;EAEpB,KAAK,WACJ,QAAO,oBAAC,iBAAe;EAExB,KAAK,eACJ,QACC,oBAAC;GACA,gBAAgB,QAAQ,OAAO;GAC/B,gBAAgB,QAAQ,OAAO;IAC9B;EAGJ,KAAK,uBACJ,QAAO,oBAAC,4BAA0B;EAEnC,QACC,QAAO,oBAAC,aAAW"}
@@ -0,0 +1,2 @@
1
+ import { UseSupportStoreResult, initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore } from "./support-store.js";
2
+ export { UseSupportStoreResult, initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
@@ -0,0 +1,3 @@
1
+ import { initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore } from "./support-store.js";
2
+
3
+ export { initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
@@ -0,0 +1,42 @@
1
+ import * as _cossistant_core0 from "@cossistant/core";
2
+ import { SupportConfig, SupportStore, SupportStoreState } from "@cossistant/core";
3
+
4
+ //#region src/support/store/support-store.d.ts
5
+ type UseSupportStoreResult = SupportStoreState & Pick<SupportStore, "navigate" | "replace" | "goBack" | "open" | "close" | "toggle" | "updateConfig" | "reset">;
6
+ declare function useSupportStore(): UseSupportStoreResult;
7
+ declare const useSupportConfig: () => {
8
+ open: () => void;
9
+ close: () => void;
10
+ toggle: () => void;
11
+ mode: "floating" | "responsive";
12
+ size: "normal" | "larger";
13
+ isOpen: boolean;
14
+ content: {
15
+ home?: {
16
+ header?: string;
17
+ subheader?: string;
18
+ ctaLabel?: string;
19
+ };
20
+ };
21
+ };
22
+ declare const useSupportNavigation: () => {
23
+ current: _cossistant_core0.NavigationState;
24
+ page: "HOME" | "ARTICLES" | "CONVERSATION" | "CONVERSATION_HISTORY";
25
+ params: {
26
+ conversationId: string;
27
+ initialMessage?: string;
28
+ } | undefined;
29
+ previousPages: _cossistant_core0.NavigationState[];
30
+ navigate: (state: _cossistant_core0.NavigationState) => void;
31
+ replace: (state: _cossistant_core0.NavigationState) => void;
32
+ goBack: () => void;
33
+ canGoBack: boolean;
34
+ };
35
+ declare const initializeSupportStore: (props: {
36
+ mode?: SupportConfig["mode"];
37
+ size?: SupportConfig["size"];
38
+ defaultOpen?: boolean;
39
+ }) => void;
40
+ //#endregion
41
+ export { UseSupportStoreResult, initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
42
+ //# sourceMappingURL=support-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-store.d.ts","names":[],"sources":["../../../src/support/store/support-store.ts"],"sourcesContent":[],"mappings":";;;;KA8CY,qBAAA,GAAwB,oBACnC,KACC;iBAWc,eAAA,CAAA,GAAmB;cAmBtB;EAhCD,IAAA,EAAA,GAAA,GAAA,IAAA;EAAqB,KAAA,EAAA,GAAA,GAAA,IAAA;QAAG,EAAA,GAAA,GAAA,IAAA;MAElC,EAAA,UAAA,GAAA,YAAA;MADD,EAAA,QAAA,GAAA,QAAA;EAAI,MAAA,EAAA,OAAA;EAYW,OAAA,EAAA;IAmBH,IAAA,CAAA,EAAA;MAcA,MAAA,CAAA,EAAA,MAiBZ;MAAA,SAAA,CAAA,EAAA,MAAA;MAAA,QAAA,CAAA,EAAA,MAAA;;;;cAjBY;EAmBA,OAAA,EAFZ,iBAAA,CAAA,eAwBA;EAAA,IAAA,EAAA,MAAA,GAAA,UAAA,GAAA,cAAA,GAAA,sBAAA;QArBO,EAAA;IACA,cAAA,EAAA,MAAA;IAAa,cAAA,CAAA,EAAA,MAAA;;;;;;;;cAFR;SACL;SACA"}
@@ -0,0 +1,66 @@
1
+ "use client";
2
+
3
+
4
+ import { useMemo, useRef, useSyncExternalStore } from "react";
5
+ import { createSupportStore } from "@cossistant/core";
6
+
7
+ //#region src/support/store/support-store.ts
8
+ const storage = typeof window !== "undefined" ? window.localStorage : void 0;
9
+ const store = createSupportStore({ storage });
10
+ function useSelector(selector, isEqual = Object.is) {
11
+ const selectionRef = useRef(void 0);
12
+ const subscribe = (onStoreChange) => store.subscribe(() => {
13
+ onStoreChange();
14
+ });
15
+ const snapshot = useSyncExternalStore(subscribe, store.getState, store.getState);
16
+ const selected = selector(snapshot);
17
+ if (selectionRef.current === void 0 || !isEqual(selectionRef.current, selected)) selectionRef.current = selected;
18
+ return selectionRef.current;
19
+ }
20
+ function useSupportStore() {
21
+ const state = useSelector((current) => current);
22
+ return useMemo(() => ({
23
+ ...state,
24
+ navigate: store.navigate,
25
+ replace: store.replace,
26
+ goBack: store.goBack,
27
+ open: store.open,
28
+ close: store.close,
29
+ toggle: store.toggle,
30
+ updateConfig: store.updateConfig,
31
+ reset: store.reset
32
+ }), [state]);
33
+ }
34
+ const useSupportConfig = () => {
35
+ const config = useSelector((state) => state.config);
36
+ return useMemo(() => ({
37
+ ...config,
38
+ open: store.open,
39
+ close: store.close,
40
+ toggle: store.toggle
41
+ }), [config]);
42
+ };
43
+ const useSupportNavigation = () => {
44
+ const { current, previousPages } = useSelector((state) => state.navigation);
45
+ return useMemo(() => ({
46
+ current,
47
+ page: current.page,
48
+ params: current.params,
49
+ previousPages,
50
+ navigate: store.navigate,
51
+ replace: store.replace,
52
+ goBack: store.goBack,
53
+ canGoBack: previousPages.length > 0
54
+ }), [current, previousPages]);
55
+ };
56
+ const initializeSupportStore = (props) => {
57
+ const patch = {};
58
+ if (props.mode !== void 0) patch.mode = props.mode;
59
+ if (props.size !== void 0) patch.size = props.size;
60
+ if (props.defaultOpen !== void 0) patch.isOpen = props.defaultOpen;
61
+ if (Object.keys(patch).length > 0) store.updateConfig(patch);
62
+ };
63
+
64
+ //#endregion
65
+ export { initializeSupportStore, useSupportConfig, useSupportNavigation, useSupportStore };
66
+ //# sourceMappingURL=support-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"support-store.js","names":["patch: Partial<SupportConfig>"],"sources":["../../../src/support/store/support-store.ts"],"sourcesContent":["\"use client\";\n\nimport {\n\tcreateSupportStore,\n\ttype SupportConfig,\n\ttype SupportStore,\n\ttype SupportStoreState,\n} from \"@cossistant/core\";\nimport { useMemo, useRef, useSyncExternalStore } from \"react\";\n\nconst storage = typeof window !== \"undefined\" ? window.localStorage : undefined;\nconst store = createSupportStore({ storage });\n\ntype Selector<T> = (state: SupportStoreState) => T;\n\ntype EqualityChecker<T> = (previous: T, next: T) => boolean;\n\nfunction useSelector<TSelected>(\n\tselector: Selector<TSelected>,\n\tisEqual: EqualityChecker<TSelected> = Object.is\n): TSelected {\n\tconst selectionRef = useRef<TSelected>(undefined);\n\n\tconst subscribe = (onStoreChange: () => void) =>\n\t\tstore.subscribe(() => {\n\t\t\tonStoreChange();\n\t\t});\n\n\tconst snapshot = useSyncExternalStore(\n\t\tsubscribe,\n\t\tstore.getState,\n\t\tstore.getState\n\t);\n\n\tconst selected = selector(snapshot);\n\n\tif (\n\t\tselectionRef.current === undefined ||\n\t\t!isEqual(selectionRef.current, selected)\n\t) {\n\t\tselectionRef.current = selected;\n\t}\n\n\treturn selectionRef.current as TSelected;\n}\n\nexport type UseSupportStoreResult = SupportStoreState &\n\tPick<\n\t\tSupportStore,\n\t\t| \"navigate\"\n\t\t| \"replace\"\n\t\t| \"goBack\"\n\t\t| \"open\"\n\t\t| \"close\"\n\t\t| \"toggle\"\n\t\t| \"updateConfig\"\n\t\t| \"reset\"\n\t>;\n\nexport function useSupportStore(): UseSupportStoreResult {\n\tconst state = useSelector((current) => current);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\t...state,\n\t\t\tnavigate: store.navigate,\n\t\t\treplace: store.replace,\n\t\t\tgoBack: store.goBack,\n\t\t\topen: store.open,\n\t\t\tclose: store.close,\n\t\t\ttoggle: store.toggle,\n\t\t\tupdateConfig: store.updateConfig,\n\t\t\treset: store.reset,\n\t\t}),\n\t\t[state]\n\t);\n}\n\nexport const useSupportConfig = () => {\n\tconst config = useSelector((state) => state.config);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\t...config,\n\t\t\topen: store.open,\n\t\t\tclose: store.close,\n\t\t\ttoggle: store.toggle,\n\t\t}),\n\t\t[config]\n\t);\n};\n\nexport const useSupportNavigation = () => {\n\tconst navigation = useSelector((state) => state.navigation);\n\tconst { current, previousPages } = navigation;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tcurrent,\n\t\t\tpage: current.page,\n\t\t\tparams: current.params,\n\t\t\tpreviousPages,\n\t\t\tnavigate: store.navigate,\n\t\t\treplace: store.replace,\n\t\t\tgoBack: store.goBack,\n\t\t\tcanGoBack: previousPages.length > 0,\n\t\t}),\n\t\t[current, previousPages]\n\t);\n};\n\nexport const initializeSupportStore = (props: {\n\tmode?: SupportConfig[\"mode\"];\n\tsize?: SupportConfig[\"size\"];\n\tdefaultOpen?: boolean;\n}) => {\n\tconst patch: Partial<SupportConfig> = {};\n\n\tif (props.mode !== undefined) {\n\t\tpatch.mode = props.mode;\n\t}\n\n\tif (props.size !== undefined) {\n\t\tpatch.size = props.size;\n\t}\n\n\tif (props.defaultOpen !== undefined) {\n\t\tpatch.isOpen = props.defaultOpen;\n\t}\n\n\tif (Object.keys(patch).length > 0) {\n\t\tstore.updateConfig(patch);\n\t}\n};\n"],"mappings":";;;;;;;AAUA,MAAM,UAAU,OAAO,WAAW,cAAc,OAAO,eAAe;AACtE,MAAM,QAAQ,mBAAmB,EAAE,SAAS,CAAC;AAM7C,SAAS,YACR,UACA,UAAsC,OAAO,IACjC;CACZ,MAAM,eAAe,OAAkB,OAAU;CAEjD,MAAM,aAAa,kBAClB,MAAM,gBAAgB;AACrB,iBAAe;GACd;CAEH,MAAM,WAAW,qBAChB,WACA,MAAM,UACN,MAAM,SACN;CAED,MAAM,WAAW,SAAS,SAAS;AAEnC,KACC,aAAa,YAAY,UACzB,CAAC,QAAQ,aAAa,SAAS,SAAS,CAExC,cAAa,UAAU;AAGxB,QAAO,aAAa;;AAgBrB,SAAgB,kBAAyC;CACxD,MAAM,QAAQ,aAAa,YAAY,QAAQ;AAE/C,QAAO,eACC;EACN,GAAG;EACH,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,cAAc,MAAM;EACpB,OAAO,MAAM;EACb,GACD,CAAC,MAAM,CACP;;AAGF,MAAa,yBAAyB;CACrC,MAAM,SAAS,aAAa,UAAU,MAAM,OAAO;AAEnD,QAAO,eACC;EACN,GAAG;EACH,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,GACD,CAAC,OAAO,CACR;;AAGF,MAAa,6BAA6B;CAEzC,MAAM,EAAE,SAAS,kBADE,aAAa,UAAU,MAAM,WAAW;AAG3D,QAAO,eACC;EACN;EACA,MAAM,QAAQ;EACd,QAAQ,QAAQ;EAChB;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,cAAc,SAAS;EAClC,GACD,CAAC,SAAS,cAAc,CACxB;;AAGF,MAAa,0BAA0B,UAIjC;CACL,MAAMA,QAAgC,EAAE;AAExC,KAAI,MAAM,SAAS,OAClB,OAAM,OAAO,MAAM;AAGpB,KAAI,MAAM,SAAS,OAClB,OAAM,OAAO,MAAM;AAGpB,KAAI,MAAM,gBAAgB,OACzB,OAAM,SAAS,MAAM;AAGtB,KAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAC/B,OAAM,aAAa,MAAM"}