@messenger-box/tailwind-ui-inbox 10.0.3-alpha.100

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 (373) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/LICENSE +21 -0
  3. package/jest.config.js +9 -0
  4. package/lib/cdm-locales/en/translations.json +31 -0
  5. package/lib/cdm-locales/es/translations.json +31 -0
  6. package/lib/components/AIAgent/AIAgent.d.ts +21 -0
  7. package/lib/components/AIAgent/AIAgent.d.ts.map +1 -0
  8. package/lib/components/AIAgent/AIAgent.js +904 -0
  9. package/lib/components/AIAgent/AIAgent.js.map +1 -0
  10. package/lib/components/AIAgent/index.d.ts +2 -0
  11. package/lib/components/AIAgent/index.d.ts.map +1 -0
  12. package/lib/components/InboxMessage/CommonMessage.d.ts +8 -0
  13. package/lib/components/InboxMessage/CommonMessage.d.ts.map +1 -0
  14. package/lib/components/InboxMessage/CommonMessage.js +35 -0
  15. package/lib/components/InboxMessage/CommonMessage.js.map +1 -0
  16. package/lib/components/InboxMessage/ConversationItem.d.ts +14 -0
  17. package/lib/components/InboxMessage/ConversationItem.d.ts.map +1 -0
  18. package/lib/components/InboxMessage/ConversationItem.js +200 -0
  19. package/lib/components/InboxMessage/ConversationItem.js.map +1 -0
  20. package/lib/components/InboxMessage/InputComponent.d.ts +12 -0
  21. package/lib/components/InboxMessage/InputComponent.d.ts.map +1 -0
  22. package/lib/components/InboxMessage/InputComponent.js +359 -0
  23. package/lib/components/InboxMessage/InputComponent.js.map +1 -0
  24. package/lib/components/InboxMessage/LeftSidebar.d.ts +20 -0
  25. package/lib/components/InboxMessage/LeftSidebar.d.ts.map +1 -0
  26. package/lib/components/InboxMessage/LeftSidebar.js +102 -0
  27. package/lib/components/InboxMessage/LeftSidebar.js.map +1 -0
  28. package/lib/components/InboxMessage/MessageInput.d.ts +9 -0
  29. package/lib/components/InboxMessage/MessageInput.d.ts.map +1 -0
  30. package/lib/components/InboxMessage/MessageInput.js +154 -0
  31. package/lib/components/InboxMessage/MessageInput.js.map +1 -0
  32. package/lib/components/InboxMessage/MessageInputComponent.d.ts +9 -0
  33. package/lib/components/InboxMessage/MessageInputComponent.d.ts.map +1 -0
  34. package/lib/components/InboxMessage/Messages.d.ts +17 -0
  35. package/lib/components/InboxMessage/Messages.d.ts.map +1 -0
  36. package/lib/components/InboxMessage/Messages.js +99 -0
  37. package/lib/components/InboxMessage/Messages.js.map +1 -0
  38. package/lib/components/InboxMessage/MessagesBuilderUi.d.ts +17 -0
  39. package/lib/components/InboxMessage/MessagesBuilderUi.d.ts.map +1 -0
  40. package/lib/components/InboxMessage/Popover.d.ts +3 -0
  41. package/lib/components/InboxMessage/Popover.d.ts.map +1 -0
  42. package/lib/components/InboxMessage/Popover.js +31 -0
  43. package/lib/components/InboxMessage/Popover.js.map +1 -0
  44. package/lib/components/InboxMessage/RightSidebar.d.ts +9 -0
  45. package/lib/components/InboxMessage/RightSidebar.d.ts.map +1 -0
  46. package/lib/components/InboxMessage/RightSidebar.js +9 -0
  47. package/lib/components/InboxMessage/RightSidebar.js.map +1 -0
  48. package/lib/components/InboxMessage/RightSidebarAi.d.ts +23 -0
  49. package/lib/components/InboxMessage/RightSidebarAi.d.ts.map +1 -0
  50. package/lib/components/InboxMessage/RightSidebarAi.js +9 -0
  51. package/lib/components/InboxMessage/RightSidebarAi.js.map +1 -0
  52. package/lib/components/InboxMessage/ServiceConversationItem.d.ts +12 -0
  53. package/lib/components/InboxMessage/ServiceConversationItem.d.ts.map +1 -0
  54. package/lib/components/InboxMessage/ServiceConversationItem.js +185 -0
  55. package/lib/components/InboxMessage/ServiceConversationItem.js.map +1 -0
  56. package/lib/components/InboxMessage/ServiceInboxItem.d.ts +12 -0
  57. package/lib/components/InboxMessage/ServiceInboxItem.d.ts.map +1 -0
  58. package/lib/components/InboxMessage/ServiceInboxItem.js +182 -0
  59. package/lib/components/InboxMessage/ServiceInboxItem.js.map +1 -0
  60. package/lib/components/InboxMessage/SubscriptionHandler.d.ts +19 -0
  61. package/lib/components/InboxMessage/SubscriptionHandler.d.ts.map +1 -0
  62. package/lib/components/InboxMessage/SubscriptionHandler.js +41 -0
  63. package/lib/components/InboxMessage/SubscriptionHandler.js.map +1 -0
  64. package/lib/components/InboxMessage/UploadImageButton.d.ts +7 -0
  65. package/lib/components/InboxMessage/UploadImageButton.d.ts.map +1 -0
  66. package/lib/components/InboxMessage/UploadImageButton.js +34 -0
  67. package/lib/components/InboxMessage/UploadImageButton.js.map +1 -0
  68. package/lib/components/InboxMessage/UserModalContent.d.ts +3 -0
  69. package/lib/components/InboxMessage/UserModalContent.d.ts.map +1 -0
  70. package/lib/components/InboxMessage/UserModalContent.js +60 -0
  71. package/lib/components/InboxMessage/UserModalContent.js.map +1 -0
  72. package/lib/components/InboxMessage/index.d.ts +17 -0
  73. package/lib/components/InboxMessage/index.d.ts.map +1 -0
  74. package/lib/components/InboxMessage/message-widgets/CommonMessage.d.ts +11 -0
  75. package/lib/components/InboxMessage/message-widgets/CommonMessage.d.ts.map +1 -0
  76. package/lib/components/InboxMessage/message-widgets/CommonMessage.js +44 -0
  77. package/lib/components/InboxMessage/message-widgets/CommonMessage.js.map +1 -0
  78. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.d.ts +11 -0
  79. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.d.ts.map +1 -0
  80. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.js +194 -0
  81. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.js.map +1 -0
  82. package/lib/components/InboxMessage/message-widgets/MessageCard.d.ts +8 -0
  83. package/lib/components/InboxMessage/message-widgets/MessageCard.d.ts.map +1 -0
  84. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.d.ts +12 -0
  85. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.d.ts.map +1 -0
  86. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.js +37 -0
  87. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.js.map +1 -0
  88. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.d.ts +18 -0
  89. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.d.ts.map +1 -0
  90. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.js +1082 -0
  91. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.js.map +1 -0
  92. package/lib/components/InboxMessage/message-widgets/PlainMessage.d.ts +8 -0
  93. package/lib/components/InboxMessage/message-widgets/PlainMessage.d.ts.map +1 -0
  94. package/lib/components/InboxMessage/message-widgets/PlainMessage.js +14 -0
  95. package/lib/components/InboxMessage/message-widgets/PlainMessage.js.map +1 -0
  96. package/lib/components/InboxMessage/message-widgets/PropertyMessageWidget.d.ts +9 -0
  97. package/lib/components/InboxMessage/message-widgets/PropertyMessageWidget.d.ts.map +1 -0
  98. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts +14 -0
  99. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts.map +1 -0
  100. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js +333 -0
  101. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js.map +1 -0
  102. package/lib/components/InboxMessage/message-widgets/index.d.ts +4 -0
  103. package/lib/components/InboxMessage/message-widgets/index.d.ts.map +1 -0
  104. package/lib/components/ModelConfigPanel.d.ts +37 -0
  105. package/lib/components/ModelConfigPanel.d.ts.map +1 -0
  106. package/lib/components/ModelConfigPanel.js +317 -0
  107. package/lib/components/ModelConfigPanel.js.map +1 -0
  108. package/lib/components/filler-components/RightSiderBar.d.ts +24 -0
  109. package/lib/components/filler-components/RightSiderBar.d.ts.map +1 -0
  110. package/lib/components/filler-components/RightSiderBar.js +335 -0
  111. package/lib/components/filler-components/RightSiderBar.js.map +1 -0
  112. package/lib/components/inbox/FilesList.d.ts +20 -0
  113. package/lib/components/inbox/FilesList.d.ts.map +1 -0
  114. package/lib/components/inbox/FilesList.js +68 -0
  115. package/lib/components/inbox/FilesList.js.map +1 -0
  116. package/lib/components/inbox/MessageItem.d.ts +17 -0
  117. package/lib/components/inbox/MessageItem.d.ts.map +1 -0
  118. package/lib/components/inbox/MessageItem.js +50 -0
  119. package/lib/components/inbox/MessageItem.js.map +1 -0
  120. package/lib/components/inbox/ThreadItem.d.ts +11 -0
  121. package/lib/components/inbox/ThreadItem.d.ts.map +1 -0
  122. package/lib/components/inbox/ThreadItem.js +147 -0
  123. package/lib/components/inbox/ThreadItem.js.map +1 -0
  124. package/lib/components/inbox/index.d.ts +4 -0
  125. package/lib/components/inbox/index.d.ts.map +1 -0
  126. package/lib/components/index.d.ts +7 -0
  127. package/lib/components/index.d.ts.map +1 -0
  128. package/lib/components/live-code-editor/hybrid-live-editor.d.ts +20 -0
  129. package/lib/components/live-code-editor/hybrid-live-editor.d.ts.map +1 -0
  130. package/lib/components/live-code-editor/hybrid-live-editor.js +68 -0
  131. package/lib/components/live-code-editor/hybrid-live-editor.js.map +1 -0
  132. package/lib/components/live-code-editor/index.d.ts +4 -0
  133. package/lib/components/live-code-editor/index.d.ts.map +1 -0
  134. package/lib/components/live-code-editor/live-code-editor.d.ts +14 -0
  135. package/lib/components/live-code-editor/live-code-editor.d.ts.map +1 -0
  136. package/lib/components/live-code-editor/live-code-editor.js +207 -0
  137. package/lib/components/live-code-editor/live-code-editor.js.map +1 -0
  138. package/lib/components/slot-fill/chat-message-filler.d.ts +4 -0
  139. package/lib/components/slot-fill/chat-message-filler.d.ts.map +1 -0
  140. package/lib/components/slot-fill/chat-message-filler.js +5 -0
  141. package/lib/components/slot-fill/chat-message-filler.js.map +1 -0
  142. package/lib/components/slot-fill/chat-message-slot.d.ts +11 -0
  143. package/lib/components/slot-fill/chat-message-slot.d.ts.map +1 -0
  144. package/lib/components/slot-fill/chat-message-slot.js +6 -0
  145. package/lib/components/slot-fill/chat-message-slot.js.map +1 -0
  146. package/lib/components/slot-fill/index.d.ts +4 -0
  147. package/lib/components/slot-fill/index.d.ts.map +1 -0
  148. package/lib/components/slot-fill/right-sidebar-filler.d.ts +4 -0
  149. package/lib/components/slot-fill/right-sidebar-filler.d.ts.map +1 -0
  150. package/lib/components/slot-fill/right-sidebar-filler.js +13 -0
  151. package/lib/components/slot-fill/right-sidebar-filler.js.map +1 -0
  152. package/lib/components/ui/button.d.ts +9 -0
  153. package/lib/components/ui/button.d.ts.map +1 -0
  154. package/lib/compute.d.ts +8 -0
  155. package/lib/compute.d.ts.map +1 -0
  156. package/lib/compute.js +137 -0
  157. package/lib/compute.js.map +1 -0
  158. package/lib/config/env-config.d.ts +13 -0
  159. package/lib/config/env-config.d.ts.map +1 -0
  160. package/lib/config/env-config.js +34 -0
  161. package/lib/config/env-config.js.map +1 -0
  162. package/lib/config/index.d.ts +2 -0
  163. package/lib/config/index.d.ts.map +1 -0
  164. package/lib/constants/breakpoints.d.ts +8 -0
  165. package/lib/constants/breakpoints.d.ts.map +1 -0
  166. package/lib/constants/index.d.ts +3 -0
  167. package/lib/constants/index.d.ts.map +1 -0
  168. package/lib/container/AiInbox.d.ts +15 -0
  169. package/lib/container/AiInbox.d.ts.map +1 -0
  170. package/lib/container/AiInboxWithLoader.d.ts +36 -0
  171. package/lib/container/AiInboxWithLoader.d.ts.map +1 -0
  172. package/lib/container/AiLandingInput.d.ts +4 -0
  173. package/lib/container/AiLandingInput.d.ts.map +1 -0
  174. package/lib/container/AiLandingInput.js +101 -0
  175. package/lib/container/AiLandingInput.js.map +1 -0
  176. package/lib/container/Inbox.d.ts +15 -0
  177. package/lib/container/Inbox.d.ts.map +1 -0
  178. package/lib/container/Inbox.js +955 -0
  179. package/lib/container/Inbox.js.map +1 -0
  180. package/lib/container/InboxAiMessagesLoader.d.ts +15 -0
  181. package/lib/container/InboxAiMessagesLoader.d.ts.map +1 -0
  182. package/lib/container/InboxAiMessagesLoader.js +30 -0
  183. package/lib/container/InboxAiMessagesLoader.js.map +1 -0
  184. package/lib/container/InboxContainer.d.ts +12 -0
  185. package/lib/container/InboxContainer.d.ts.map +1 -0
  186. package/lib/container/InboxContainer.js +31 -0
  187. package/lib/container/InboxContainer.js.map +1 -0
  188. package/lib/container/InboxTemplate1.d.ts +15 -0
  189. package/lib/container/InboxTemplate1.d.ts.map +1 -0
  190. package/lib/container/InboxTemplate1WithLoader.d.ts +36 -0
  191. package/lib/container/InboxTemplate1WithLoader.d.ts.map +1 -0
  192. package/lib/container/InboxTemplate2.d.ts +15 -0
  193. package/lib/container/InboxTemplate2.d.ts.map +1 -0
  194. package/lib/container/InboxWithAiLoader.d.ts +15 -0
  195. package/lib/container/InboxWithAiLoader.d.ts.map +1 -0
  196. package/lib/container/InboxWithAiLoader.js +56 -0
  197. package/lib/container/InboxWithAiLoader.js.map +1 -0
  198. package/lib/container/InboxWithLoader.d.ts +36 -0
  199. package/lib/container/InboxWithLoader.d.ts.map +1 -0
  200. package/lib/container/InboxWithLoader.js +277 -0
  201. package/lib/container/InboxWithLoader.js.map +1 -0
  202. package/lib/container/ServiceInbox.d.ts +9 -0
  203. package/lib/container/ServiceInbox.d.ts.map +1 -0
  204. package/lib/container/ServiceInbox.js +144 -0
  205. package/lib/container/ServiceInbox.js.map +1 -0
  206. package/lib/container/ThreadMessages.d.ts +13 -0
  207. package/lib/container/ThreadMessages.d.ts.map +1 -0
  208. package/lib/container/ThreadMessages.js +314 -0
  209. package/lib/container/ThreadMessages.js.map +1 -0
  210. package/lib/container/ThreadMessagesInbox.d.ts +14 -0
  211. package/lib/container/ThreadMessagesInbox.d.ts.map +1 -0
  212. package/lib/container/ThreadMessagesInbox.js +341 -0
  213. package/lib/container/ThreadMessagesInbox.js.map +1 -0
  214. package/lib/container/Threads.d.ts +8 -0
  215. package/lib/container/Threads.d.ts.map +1 -0
  216. package/lib/container/Threads.js +231 -0
  217. package/lib/container/Threads.js.map +1 -0
  218. package/lib/container/ThreadsInbox.d.ts +21 -0
  219. package/lib/container/ThreadsInbox.d.ts.map +1 -0
  220. package/lib/container/ThreadsInbox.js +244 -0
  221. package/lib/container/ThreadsInbox.js.map +1 -0
  222. package/lib/container/apply-footer-styles.d.ts +2 -0
  223. package/lib/container/apply-footer-styles.d.ts.map +1 -0
  224. package/lib/container/apply-footer-styles.js +16 -0
  225. package/lib/container/apply-footer-styles.js.map +1 -0
  226. package/lib/container/index.d.ts +13 -0
  227. package/lib/container/index.d.ts.map +1 -0
  228. package/lib/enums/index.d.ts +2 -0
  229. package/lib/enums/index.d.ts.map +1 -0
  230. package/lib/enums/messenger-slot-fill-name-enum.d.ts +5 -0
  231. package/lib/enums/messenger-slot-fill-name-enum.d.ts.map +1 -0
  232. package/lib/enums/messenger-slot-fill-name-enum.js +5 -0
  233. package/lib/enums/messenger-slot-fill-name-enum.js.map +1 -0
  234. package/lib/hooks/index.d.ts +3 -0
  235. package/lib/hooks/index.d.ts.map +1 -0
  236. package/lib/hooks/use-file-sync.d.ts +16 -0
  237. package/lib/hooks/use-file-sync.d.ts.map +1 -0
  238. package/lib/hooks/use-file-sync.js +63 -0
  239. package/lib/hooks/use-file-sync.js.map +1 -0
  240. package/lib/hooks/usePersistentModelConfig.d.ts +15 -0
  241. package/lib/hooks/usePersistentModelConfig.d.ts.map +1 -0
  242. package/lib/hooks/usePersistentModelConfig.js +46 -0
  243. package/lib/hooks/usePersistentModelConfig.js.map +1 -0
  244. package/lib/index.d.ts +10 -0
  245. package/lib/index.d.ts.map +1 -0
  246. package/lib/index.js +1 -0
  247. package/lib/index.js.map +1 -0
  248. package/lib/interfaces/index.d.ts +2 -0
  249. package/lib/interfaces/index.d.ts.map +1 -0
  250. package/lib/interfaces/message-widgets.interface.d.ts +21 -0
  251. package/lib/interfaces/message-widgets.interface.d.ts.map +1 -0
  252. package/lib/machines/aiAgentMachine.d.ts +3 -0
  253. package/lib/machines/aiAgentMachine.d.ts.map +1 -0
  254. package/lib/machines/aiAgentMachine.js +1083 -0
  255. package/lib/machines/aiAgentMachine.js.map +1 -0
  256. package/lib/machines/aiAgentMachine.simple.d.ts +3 -0
  257. package/lib/machines/aiAgentMachine.simple.d.ts.map +1 -0
  258. package/lib/machines/aiAgentMachine.simple.js +108 -0
  259. package/lib/machines/aiAgentMachine.simple.js.map +1 -0
  260. package/lib/machines/index.d.ts +3 -0
  261. package/lib/machines/index.d.ts.map +1 -0
  262. package/lib/machines/types.d.ts +77 -0
  263. package/lib/machines/types.d.ts.map +1 -0
  264. package/lib/module.d.ts +7 -0
  265. package/lib/module.d.ts.map +1 -0
  266. package/lib/module.js +26 -0
  267. package/lib/module.js.map +1 -0
  268. package/lib/routes.json +98 -0
  269. package/lib/styles/responsive.css +76 -0
  270. package/lib/templates/InboxWithAi.d.ts +15 -0
  271. package/lib/templates/InboxWithAi.d.ts.map +1 -0
  272. package/lib/templates/InboxWithAi.js +440 -0
  273. package/lib/templates/InboxWithAi.js.map +1 -0
  274. package/lib/templates/InboxWithAi.tsx +533 -0
  275. package/lib/templates/index.d.ts +2 -0
  276. package/lib/templates/index.d.ts.map +1 -0
  277. package/lib/templates/index.ts +1 -0
  278. package/lib/utils/utils.d.ts +2 -0
  279. package/lib/utils/utils.d.ts.map +1 -0
  280. package/lib/utils/utils.js +3 -0
  281. package/lib/utils/utils.js.map +1 -0
  282. package/package.json +62 -0
  283. package/rollup.config.mjs +35 -0
  284. package/src/cdm-locales/en/translations.json +31 -0
  285. package/src/cdm-locales/es/translations.json +31 -0
  286. package/src/components/AIAgent/AIAgent.tsx +1103 -0
  287. package/src/components/AIAgent/AIAgent.tsx.bk +1365 -0
  288. package/src/components/AIAgent/README.md +82 -0
  289. package/src/components/AIAgent/index.ts +1 -0
  290. package/src/components/InboxMessage/CommonMessage.tsx +40 -0
  291. package/src/components/InboxMessage/ConversationItem.tsx +255 -0
  292. package/src/components/InboxMessage/InputComponent.tsx +462 -0
  293. package/src/components/InboxMessage/LeftSidebar.tsx +140 -0
  294. package/src/components/InboxMessage/MessageInput.tsx +209 -0
  295. package/src/components/InboxMessage/MessageInputComponent.tsx +245 -0
  296. package/src/components/InboxMessage/Messages.tsx +137 -0
  297. package/src/components/InboxMessage/MessagesBuilderUi.tsx +205 -0
  298. package/src/components/InboxMessage/Popover.tsx +42 -0
  299. package/src/components/InboxMessage/RightSidebar.tsx +22 -0
  300. package/src/components/InboxMessage/RightSidebarAi.tsx +37 -0
  301. package/src/components/InboxMessage/ServiceConversationItem.tsx +234 -0
  302. package/src/components/InboxMessage/ServiceInboxItem.tsx +223 -0
  303. package/src/components/InboxMessage/SubscriptionHandler.tsx +55 -0
  304. package/src/components/InboxMessage/UploadImageButton.tsx +46 -0
  305. package/src/components/InboxMessage/UserModalContent.tsx +60 -0
  306. package/src/components/InboxMessage/index.ts +16 -0
  307. package/src/components/InboxMessage/message-widgets/CommonMessage.tsx +69 -0
  308. package/src/components/InboxMessage/message-widgets/ErrorFixCard.tsx +240 -0
  309. package/src/components/InboxMessage/message-widgets/MessageCard.tsx +127 -0
  310. package/src/components/InboxMessage/message-widgets/MessageSliceRenderer.tsx +40 -0
  311. package/src/components/InboxMessage/message-widgets/ModernMessageGroup.tsx +1295 -0
  312. package/src/components/InboxMessage/message-widgets/PlainMessage.tsx +18 -0
  313. package/src/components/InboxMessage/message-widgets/PropertyMessageWidget.tsx +29 -0
  314. package/src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx +492 -0
  315. package/src/components/InboxMessage/message-widgets/index.ts +3 -0
  316. package/src/components/ModelConfigPanel.tsx +345 -0
  317. package/src/components/filler-components/RightSiderBar.tsx +408 -0
  318. package/src/components/inbox/FilesList.tsx +89 -0
  319. package/src/components/inbox/MessageItem.tsx +50 -0
  320. package/src/components/inbox/ThreadItem.tsx +295 -0
  321. package/src/components/inbox/index.ts +3 -0
  322. package/src/components/index.ts +22 -0
  323. package/src/components/live-code-editor/hybrid-live-editor.tsx +105 -0
  324. package/src/components/live-code-editor/index.ts +3 -0
  325. package/src/components/live-code-editor/live-code-editor.tsx +257 -0
  326. package/src/components/slot-fill/chat-message-filler.tsx +18 -0
  327. package/src/components/slot-fill/chat-message-slot.tsx +18 -0
  328. package/src/components/slot-fill/index.ts +3 -0
  329. package/src/components/slot-fill/right-sidebar-filler.tsx +39 -0
  330. package/src/components/ui/button.tsx +32 -0
  331. package/src/compute.ts +134 -0
  332. package/src/config/env-config.ts +17 -0
  333. package/src/config/index.ts +1 -0
  334. package/src/constants/breakpoints.ts +7 -0
  335. package/src/constants/index.ts +5 -0
  336. package/src/container/AiInbox.tsx +1819 -0
  337. package/src/container/AiInboxWithLoader.tsx +356 -0
  338. package/src/container/AiLandingInput.tsx +221 -0
  339. package/src/container/Inbox.tsx +1092 -0
  340. package/src/container/InboxAiMessagesLoader.tsx +44 -0
  341. package/src/container/InboxContainer.tsx +35 -0
  342. package/src/container/InboxTemplate1.tsx +1542 -0
  343. package/src/container/InboxTemplate1WithLoader.tsx +338 -0
  344. package/src/container/InboxTemplate2.tsx +1606 -0
  345. package/src/container/InboxWithAiLoader.tsx +76 -0
  346. package/src/container/InboxWithLoader.tsx +341 -0
  347. package/src/container/ServiceInbox.tsx +190 -0
  348. package/src/container/ThreadMessages.tsx +371 -0
  349. package/src/container/ThreadMessagesInbox.tsx +450 -0
  350. package/src/container/Threads.tsx +270 -0
  351. package/src/container/ThreadsInbox.tsx +354 -0
  352. package/src/container/apply-footer-styles.ts +17 -0
  353. package/src/container/index.ts +31 -0
  354. package/src/enums/index.ts +1 -0
  355. package/src/enums/messenger-slot-fill-name-enum.ts +4 -0
  356. package/src/hooks/index.ts +2 -0
  357. package/src/hooks/use-file-sync.ts +91 -0
  358. package/src/hooks/usePersistentModelConfig.ts +63 -0
  359. package/src/index.ts +37 -0
  360. package/src/interfaces/index.ts +1 -0
  361. package/src/interfaces/message-widgets.interface.ts +21 -0
  362. package/src/machines/aiAgentMachine.simple.ts +89 -0
  363. package/src/machines/aiAgentMachine.ts +1296 -0
  364. package/src/machines/aiAgentMachine.ts.bk +1296 -0
  365. package/src/machines/index.ts +2 -0
  366. package/src/machines/types.ts +59 -0
  367. package/src/module.tsx +32 -0
  368. package/src/styles/responsive.css +76 -0
  369. package/src/templates/InboxWithAi.tsx +533 -0
  370. package/src/templates/index.ts +1 -0
  371. package/src/utils/utils.ts +3 -0
  372. package/tsconfig.json +14 -0
  373. package/webpack.config.js +92 -0
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+
3
+ interface IPlainMessageProps {
4
+ message: string; // may contain HTML
5
+ index: number;
6
+ }
7
+
8
+ export const PlainMessage = ({ message, index }: IPlainMessageProps) => {
9
+ return (
10
+ <div className="w-full flex justify-center mb-7" key={`msgList_${index}`}>
11
+ {/* <p className="text-sm font-bold">{message}</p> */}
12
+ <div
13
+ className="text-sm font-bold whitespace-pre-wrap prose prose-sm max-w-none"
14
+ dangerouslySetInnerHTML={{ __html: message }}
15
+ />
16
+ </div>
17
+ );
18
+ };
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import { IPost } from 'common';
3
+
4
+ interface IPropertyMessageWidgetProps {
5
+ message: IPost;
6
+ index: number;
7
+ }
8
+
9
+ export const PropertyMessageWidget = (props: IPropertyMessageWidgetProps) => {
10
+ const { message, index } = props;
11
+ return (
12
+ <div key={`${index}`} className="flex items-start p-4 bg-blue-50 border border-blue-200 rounded-md">
13
+ <div className="flex-shrink-0 mr-3">
14
+ <svg className="w-5 h-5 text-blue-500" fill="currentColor" viewBox="0 0 20 20">
15
+ <path
16
+ fillRule="evenodd"
17
+ d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z"
18
+ clipRule="evenodd"
19
+ />
20
+ </svg>
21
+ </div>
22
+ <div>
23
+ <div>
24
+ <p className="text-sm mt-1.5 mb-1.5 whitespace-pre-line text-gray-700">{message?.message}</p>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ );
29
+ };
@@ -0,0 +1,492 @@
1
+ import React from 'react';
2
+ import { format, formatDistanceToNow, differenceInMinutes } from 'date-fns';
3
+ import { IAuthUser, IPost } from 'common';
4
+ import { FilesList } from '../../inbox';
5
+
6
+ interface SlackLikeMessageGroupProps {
7
+ messages: IPost[];
8
+ currentUser: IAuthUser;
9
+ onOpen: (element?: any) => void;
10
+ onMessageClick: (msg: IPost) => void;
11
+ isDesktopView?: boolean;
12
+ isSmallScreen?: boolean;
13
+ }
14
+
15
+ interface MessageGroupProps {
16
+ author: any;
17
+ messages: IPost[];
18
+ currentUser: IAuthUser;
19
+ onOpen: (element?: any) => void;
20
+ onMessageClick: (msg: IPost) => void;
21
+ isDesktopView?: boolean;
22
+ isSmallScreen?: boolean;
23
+ }
24
+
25
+ // Utility function to group messages by user and time
26
+ export const groupMessagesByUserAndTime = (messages: IPost[], timeThresholdMinutes = 5): IPost[][] => {
27
+ if (!messages || messages.length === 0) return [];
28
+
29
+ const groups: IPost[][] = [];
30
+ let currentGroup: IPost[] = [];
31
+ let lastMessage: IPost | null = null;
32
+
33
+ for (const message of messages) {
34
+ if (typeof message === 'string') continue; // Skip date separators
35
+
36
+ const shouldStartNewGroup =
37
+ !lastMessage ||
38
+ lastMessage.author?.id !== message.author?.id ||
39
+ differenceInMinutes(new Date(message.createdAt), new Date(lastMessage.createdAt)) > timeThresholdMinutes;
40
+
41
+ if (shouldStartNewGroup) {
42
+ if (currentGroup.length > 0) {
43
+ groups.push(currentGroup);
44
+ }
45
+ currentGroup = [message];
46
+ } else {
47
+ currentGroup.push(message);
48
+ }
49
+
50
+ lastMessage = message;
51
+ }
52
+
53
+ if (currentGroup.length > 0) {
54
+ groups.push(currentGroup);
55
+ }
56
+
57
+ return groups;
58
+ };
59
+
60
+ // Detect if a string likely contains HTML
61
+ const isProbablyHTML = (value: string): boolean => {
62
+ if (!value) return false;
63
+ return /<\/?[a-z][\s\S]*>/i.test(value.trim());
64
+ };
65
+
66
+ // Minimal sanitizer without extra deps
67
+ const sanitizeHtml = (html: string): string => {
68
+ try {
69
+ if (typeof window === 'undefined' || typeof window.DOMParser === 'undefined') {
70
+ return html
71
+ .replace(/<script[\s\S]*?>[\s\S]*?<\/script>/gi, '')
72
+ .replace(/<style[\s\S]*?>[\s\S]*?<\/style>/gi, '')
73
+ .replace(/on\w+\s*=\s*"[^"]*"/gi, '')
74
+ .replace(/on\w+\s*=\s*'[^']*'/gi, '')
75
+ .replace(/on\w+\s*=\s*[^\s>]+/gi, '')
76
+ .replace(/javascript:/gi, '');
77
+ }
78
+
79
+ const parser = new window.DOMParser();
80
+ const doc = parser.parseFromString(html, 'text/html');
81
+
82
+ const dangerousTags = ['script', 'style', 'iframe', 'object', 'embed', 'link', 'meta'];
83
+ dangerousTags.forEach((tag) => {
84
+ doc.querySelectorAll(tag).forEach((el) => el.remove());
85
+ });
86
+
87
+ const walker = doc.createTreeWalker(doc.body, (NodeFilter as any).SHOW_ELEMENT);
88
+ let node = walker.nextNode() as Element | null;
89
+ while (node) {
90
+ Array.from(node.attributes).forEach((attr) => {
91
+ const name = attr.name.toLowerCase();
92
+ const value = (attr.value || '').toLowerCase();
93
+ if (name.startsWith('on') || value.startsWith('javascript:')) {
94
+ node?.removeAttribute(attr.name);
95
+ }
96
+ if ((name === 'src' || name === 'href') && !/^https?:|^\/.*/.test(attr.value)) {
97
+ node?.removeAttribute(attr.name);
98
+ }
99
+ });
100
+ node = walker.nextNode() as Element | null;
101
+ }
102
+
103
+ return doc.body.innerHTML;
104
+ } catch (e) {
105
+ return html.replace(/<script[\s\S]*?>[\s\S]*?<\/script>/gi, '');
106
+ }
107
+ };
108
+
109
+ // Render markdown-like content with fenced code blocks
110
+ const FormattedMessageContent: React.FC<{ content: string }> = ({ content }) => {
111
+ if (!content) return null;
112
+ // Normalize escaped fences (\``` -> ```)
113
+ // Unescape any backslash-escaped backticks so Markdown fences work
114
+ const normalized = content.replace(/\\`/g, '`');
115
+ const blocks = normalized.split('\n\n').filter((b) => b.trim());
116
+ return (
117
+ <div className="space-y-3">
118
+ {blocks.map((block, index) => {
119
+ const trimmed = block.trim();
120
+
121
+ // Fenced code anywhere in block
122
+ if (trimmed.includes('```')) {
123
+ const parts: React.ReactNode[] = [];
124
+ const pushText = (t: string, key: string) => {
125
+ const txt = (t || '').trim();
126
+ if (!txt) return;
127
+ if (txt.startsWith('# ')) {
128
+ parts.push(
129
+ <h1 key={key} className="text-xl font-semibold text-gray-900">
130
+ {txt.substring(2)}
131
+ </h1>,
132
+ );
133
+ return;
134
+ }
135
+ if (txt.startsWith('## ')) {
136
+ parts.push(
137
+ <h2 key={key} className="text-base font-semibold text-gray-800">
138
+ {txt.substring(3)}
139
+ </h2>,
140
+ );
141
+ return;
142
+ }
143
+ if (txt.startsWith('### ')) {
144
+ parts.push(
145
+ <h3 key={key} className="text-sm font-medium text-gray-700">
146
+ {txt.substring(4)}
147
+ </h3>,
148
+ );
149
+ return;
150
+ }
151
+ if (txt.startsWith('- ') || txt.startsWith('• ')) {
152
+ const items = txt.split('\n').filter((l) => l.trim());
153
+ parts.push(
154
+ <ul key={key} className="list-disc pl-5 space-y-1">
155
+ {items.map((it, i) => (
156
+ <li key={`${key}-li-${i}`} className="text-gray-700">
157
+ {it.replace(/^[\u2212\-•]\s*/, '')}
158
+ </li>
159
+ ))}
160
+ </ul>,
161
+ );
162
+ return;
163
+ }
164
+ if (txt.includes('**') || txt.includes('`')) {
165
+ const formatted = txt
166
+ .replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
167
+ .replace(/`([^`]+)`/g, '<code class="bg-gray-100 px-1 rounded">$1</code>');
168
+ parts.push(
169
+ <div
170
+ key={key}
171
+ className="text-gray-700"
172
+ dangerouslySetInnerHTML={{ __html: sanitizeHtml(formatted) }}
173
+ />,
174
+ );
175
+ return;
176
+ }
177
+ parts.push(
178
+ <p key={key} className="text-gray-700 whitespace-pre-wrap">
179
+ {txt}
180
+ </p>,
181
+ );
182
+ };
183
+
184
+ const codeRegex = /```([\w-]*)\n?([\s\S]*?)```/g;
185
+ let lastIndex = 0;
186
+ let m: RegExpExecArray | null;
187
+ while ((m = codeRegex.exec(trimmed)) !== null) {
188
+ const [full, lang, code] = m;
189
+ const before = trimmed.slice(lastIndex, m.index);
190
+ pushText(before, `${index}-before-${lastIndex}`);
191
+ const language = (lang || '').trim() || 'code';
192
+ parts.push(
193
+ <div
194
+ key={`${index}-code-${m.index}`}
195
+ className="border border-gray-200 rounded overflow-hidden"
196
+ >
197
+ <div className="px-3 py-1.5 text-[10px] font-semibold uppercase tracking-wide bg-gray-100 text-gray-600">
198
+ {language}
199
+ </div>
200
+ <div className="bg-gray-900 p-3 overflow-x-auto">
201
+ <pre className="text-xs text-gray-100 font-mono leading-relaxed not-prose">
202
+ <code>{code}</code>
203
+ </pre>
204
+ </div>
205
+ </div>,
206
+ );
207
+ lastIndex = m.index + full.length;
208
+ }
209
+ const after = trimmed.slice(lastIndex);
210
+ pushText(after, `${index}-after`);
211
+ return (
212
+ <div key={index} className="space-y-2">
213
+ {parts}
214
+ </div>
215
+ );
216
+ }
217
+
218
+ if (isProbablyHTML(trimmed)) {
219
+ return (
220
+ <div
221
+ key={index}
222
+ className="prose prose-sm max-w-none"
223
+ dangerouslySetInnerHTML={{ __html: sanitizeHtml(trimmed) }}
224
+ />
225
+ );
226
+ }
227
+
228
+ if (trimmed.startsWith('### '))
229
+ return (
230
+ <h3 key={index} className="text-sm font-medium text-gray-700">
231
+ {trimmed.substring(4)}
232
+ </h3>
233
+ );
234
+ if (trimmed.startsWith('## '))
235
+ return (
236
+ <h2 key={index} className="text-base font-semibold text-gray-800">
237
+ {trimmed.substring(3)}
238
+ </h2>
239
+ );
240
+ if (trimmed.startsWith('# '))
241
+ return (
242
+ <h1 key={index} className="text-xl font-semibold text-gray-900">
243
+ {trimmed.substring(2)}
244
+ </h1>
245
+ );
246
+
247
+ if (trimmed.startsWith('- ') || trimmed.startsWith('• ')) {
248
+ const items = trimmed.split('\n').filter((l) => l.trim());
249
+ return (
250
+ <ul key={index} className="list-disc pl-5 space-y-1">
251
+ {items.map((it, i) => (
252
+ <li key={`${index}-li-${i}`} className="text-gray-700">
253
+ {it.replace(/^[\u2212\-•]\s*/, '')}
254
+ </li>
255
+ ))}
256
+ </ul>
257
+ );
258
+ }
259
+
260
+ if (trimmed.includes('**') || trimmed.includes('`')) {
261
+ const formatted = trimmed
262
+ .replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
263
+ .replace(/`([^`]+)`/g, '<code class="bg-gray-100 px-1 rounded">$1</code>');
264
+ return (
265
+ <div
266
+ key={index}
267
+ className="text-gray-700"
268
+ dangerouslySetInnerHTML={{ __html: sanitizeHtml(formatted) }}
269
+ />
270
+ );
271
+ }
272
+
273
+ return (
274
+ <p key={index} className="text-gray-700 whitespace-pre-wrap">
275
+ {trimmed}
276
+ </p>
277
+ );
278
+ })}
279
+ </div>
280
+ );
281
+ };
282
+
283
+ const MessageGroup: React.FC<MessageGroupProps> = ({
284
+ author,
285
+ messages,
286
+ currentUser,
287
+ onOpen,
288
+ onMessageClick,
289
+ isDesktopView = false,
290
+ isSmallScreen = false,
291
+ }) => {
292
+ const isOwnMessage = author?.id === currentUser?.id;
293
+ const authorName =
294
+ author?.givenName && author?.familyName
295
+ ? `${author.givenName} ${author.familyName}`
296
+ : author?.username || 'Unknown User';
297
+
298
+ const firstMessage = messages[0];
299
+ const formatTime = (timestamp: string) => {
300
+ const date = new Date(timestamp);
301
+ return format(date, 'h:mm a');
302
+ };
303
+
304
+ // Determine if this is an AI/system message for special styling
305
+ const isSystemMessage =
306
+ author?.username?.toLowerCase().includes('ai') ||
307
+ author?.username?.toLowerCase().includes('assistant') ||
308
+ author?.username?.toLowerCase().includes('system');
309
+
310
+ return (
311
+ <div
312
+ className={`group hover:bg-white hover:bg-opacity-60 rounded transition-colors ${
313
+ isDesktopView ? 'mb-8 -mx-6 px-6 py-4' : isSmallScreen ? 'mb-4 -mx-2 px-2 py-2' : 'mb-6 -mx-4 px-4 py-3'
314
+ }`}
315
+ >
316
+ <div
317
+ className={`flex items-start ${
318
+ isDesktopView ? 'space-x-4' : isSmallScreen ? 'space-x-2' : 'space-x-3'
319
+ }`}
320
+ >
321
+ {/* Avatar - Only show for non-system messages */}
322
+ {!isSystemMessage && (
323
+ <div className="flex-shrink-0 mt-0.5">
324
+ <img
325
+ className={`rounded-lg cursor-pointer hover:opacity-80 transition-opacity ${
326
+ isDesktopView ? 'w-12 h-12' : isSmallScreen ? 'w-8 h-8' : 'w-10 h-10'
327
+ }`}
328
+ src={author?.picture || '/default-avatar.svg'}
329
+ alt={authorName}
330
+ onClick={() => onOpen(firstMessage)}
331
+ onError={(e) => {
332
+ e.currentTarget.src = '/default-avatar.svg';
333
+ }}
334
+ />
335
+ </div>
336
+ )}
337
+
338
+ <div className="flex-1 min-w-0 overflow-hidden">
339
+ {/* Author name and timestamp - Only show for non-system messages */}
340
+ {!isSystemMessage && (
341
+ <div className="flex items-center space-x-2 mb-1">
342
+ <span className="text-sm font-semibold text-gray-900 truncate">{authorName}</span>
343
+ <span className="text-xs text-gray-500 flex-shrink-0">
344
+ {formatTime(firstMessage.createdAt)}
345
+ </span>
346
+ {isOwnMessage && <span className="text-xs text-gray-400 italic flex-shrink-0">(you)</span>}
347
+ </div>
348
+ )}
349
+
350
+ {/* Messages in the group - single line for each message */}
351
+ <div className="space-y-0.5">
352
+ {messages.map((message, index) => (
353
+ <MessageBubble
354
+ key={message.id}
355
+ message={message}
356
+ isOwnMessage={isOwnMessage}
357
+ isSystemMessage={isSystemMessage}
358
+ isFirstInGroup={index === 0}
359
+ isLastInGroup={index === messages.length - 1}
360
+ showTimestamp={isOwnMessage && index === 0}
361
+ onMessageClick={onMessageClick}
362
+ totalInGroup={messages.length}
363
+ authorName={authorName}
364
+ formatTime={formatTime}
365
+ />
366
+ ))}
367
+ </div>
368
+ </div>
369
+ </div>
370
+ </div>
371
+ );
372
+ };
373
+
374
+ interface MessageBubbleProps {
375
+ message: IPost;
376
+ isOwnMessage: boolean;
377
+ isFirstInGroup: boolean;
378
+ isLastInGroup: boolean;
379
+ showTimestamp: boolean;
380
+ onMessageClick: (msg: IPost) => void;
381
+ totalInGroup: number;
382
+ authorName: string;
383
+ formatTime: (timestamp: string) => string;
384
+ isSystemMessage: boolean;
385
+ }
386
+
387
+ const MessageBubble: React.FC<MessageBubbleProps> = ({
388
+ message,
389
+ isOwnMessage,
390
+ isSystemMessage,
391
+ isFirstInGroup,
392
+ isLastInGroup,
393
+ showTimestamp,
394
+ onMessageClick,
395
+ totalInGroup,
396
+ authorName,
397
+ formatTime,
398
+ }) => {
399
+ const handleClick = () => {
400
+ if (!isSystemMessage) {
401
+ onMessageClick?.(message);
402
+ }
403
+ };
404
+
405
+ // All messages use the same format (Slack style - left aligned)
406
+ return (
407
+ <div
408
+ className={`py-1 hover:bg-gray-50 hover:bg-opacity-50 rounded px-1 sm:px-2 -mx-1 sm:-mx-2 group ${
409
+ isSystemMessage ? '' : 'cursor-pointer'
410
+ }`}
411
+ >
412
+ <div className="flex items-start justify-between gap-2">
413
+ <div
414
+ className={`text-sm hover:bg-gray-100 px-1 sm:px-2 py-1 rounded flex-1 ${
415
+ isSystemMessage ? 'text-gray-800' : 'text-gray-900 cursor-pointer'
416
+ }`}
417
+ onClick={handleClick}
418
+ >
419
+ {message.message && (
420
+ <div className="break-words leading-relaxed">
421
+ {message.message.includes('```') ? (
422
+ <FormattedMessageContent content={message.message} />
423
+ ) : isProbablyHTML(message.message) ? (
424
+ <div
425
+ className="prose prose-sm max-w-none"
426
+ dangerouslySetInnerHTML={{ __html: sanitizeHtml(message.message) }}
427
+ />
428
+ ) : (
429
+ <FormattedMessageContent content={message.message} />
430
+ )}
431
+ </div>
432
+ )}
433
+
434
+ {message.files?.totalCount > 0 && (
435
+ <div className="mt-2">
436
+ <FilesList uploaded files={message.files.data} />
437
+ </div>
438
+ )}
439
+ </div>
440
+
441
+ {/* Show timestamp to the right of message */}
442
+ <span className="text-xs text-gray-500 flex-shrink-0 mt-1">{formatTime(message.createdAt)}</span>
443
+ </div>
444
+
445
+ {/* Show delivery status for own messages */}
446
+ {/* {isOwnMessage && message.isDelivered !== undefined && (
447
+ <div className="text-xs text-gray-400 mt-1 clear-both">
448
+ {message.isDelivered
449
+ ? message.isRead
450
+ ? '✓✓ Read'
451
+ : '✓✓ Delivered'
452
+ : '✓ Sent'}
453
+ </div>
454
+ )} */}
455
+ </div>
456
+ );
457
+ };
458
+
459
+ export const SlackLikeMessageGroup: React.FC<SlackLikeMessageGroupProps> = ({
460
+ messages,
461
+ currentUser,
462
+ onOpen,
463
+ onMessageClick,
464
+ isDesktopView = false,
465
+ isSmallScreen = false,
466
+ }) => {
467
+ // Filter out non-message items (like date strings)
468
+ const actualMessages = messages.filter((msg) => typeof msg !== 'string') as IPost[];
469
+
470
+ // Group messages by user and time
471
+ const messageGroups = groupMessagesByUserAndTime(actualMessages);
472
+
473
+ return (
474
+ <div className={`min-h-fit ${isDesktopView ? 'space-y-8' : isSmallScreen ? 'space-y-4' : 'space-y-6'}`}>
475
+ {messageGroups.map((group, groupIndex) => {
476
+ const author = group[0]?.author;
477
+ return (
478
+ <MessageGroup
479
+ key={`group-${groupIndex}-${group[0]?.id}`}
480
+ author={author}
481
+ messages={group}
482
+ currentUser={currentUser}
483
+ onOpen={onOpen}
484
+ onMessageClick={onMessageClick}
485
+ isDesktopView={isDesktopView}
486
+ isSmallScreen={isSmallScreen}
487
+ />
488
+ );
489
+ })}
490
+ </div>
491
+ );
492
+ };
@@ -0,0 +1,3 @@
1
+ export { MessageSliceRenderer } from './MessageSliceRenderer';
2
+ export { SlackLikeMessageGroup } from './SlackLikeMessageGroup';
3
+ export { ModernMessageGroupComponent } from './ModernMessageGroup';