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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. package/CHANGELOG.md +16 -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 +32 -0
  7. package/lib/components/AIAgent/AIAgent.d.ts.map +1 -0
  8. package/lib/components/AIAgent/AIAgent.js +1135 -0
  9. package/lib/components/AIAgent/AIAgent.js.map +1 -0
  10. package/lib/components/AIAgent/InputComponent.d.ts +84 -0
  11. package/lib/components/AIAgent/InputComponent.d.ts.map +1 -0
  12. package/lib/components/AIAgent/InputComponent.js +417 -0
  13. package/lib/components/AIAgent/InputComponent.js.map +1 -0
  14. package/lib/components/AIAgent/index.d.ts +2 -0
  15. package/lib/components/AIAgent/index.d.ts.map +1 -0
  16. package/lib/components/InboxMessage/CommonMessage.d.ts +8 -0
  17. package/lib/components/InboxMessage/CommonMessage.d.ts.map +1 -0
  18. package/lib/components/InboxMessage/CommonMessage.js +35 -0
  19. package/lib/components/InboxMessage/CommonMessage.js.map +1 -0
  20. package/lib/components/InboxMessage/ConversationItem.d.ts +14 -0
  21. package/lib/components/InboxMessage/ConversationItem.d.ts.map +1 -0
  22. package/lib/components/InboxMessage/ConversationItem.js +200 -0
  23. package/lib/components/InboxMessage/ConversationItem.js.map +1 -0
  24. package/lib/components/InboxMessage/InputComponent.d.ts +20 -0
  25. package/lib/components/InboxMessage/InputComponent.d.ts.map +1 -0
  26. package/lib/components/InboxMessage/InputComponent.js +148 -0
  27. package/lib/components/InboxMessage/InputComponent.js.map +1 -0
  28. package/lib/components/InboxMessage/LeftSidebar.d.ts +20 -0
  29. package/lib/components/InboxMessage/LeftSidebar.d.ts.map +1 -0
  30. package/lib/components/InboxMessage/LeftSidebar.js +102 -0
  31. package/lib/components/InboxMessage/LeftSidebar.js.map +1 -0
  32. package/lib/components/InboxMessage/MessageInput.d.ts +9 -0
  33. package/lib/components/InboxMessage/MessageInput.d.ts.map +1 -0
  34. package/lib/components/InboxMessage/MessageInput.js +154 -0
  35. package/lib/components/InboxMessage/MessageInput.js.map +1 -0
  36. package/lib/components/InboxMessage/MessageInputComponent.d.ts +9 -0
  37. package/lib/components/InboxMessage/MessageInputComponent.d.ts.map +1 -0
  38. package/lib/components/InboxMessage/Messages.d.ts +17 -0
  39. package/lib/components/InboxMessage/Messages.d.ts.map +1 -0
  40. package/lib/components/InboxMessage/Messages.js +99 -0
  41. package/lib/components/InboxMessage/Messages.js.map +1 -0
  42. package/lib/components/InboxMessage/MessagesBuilderUi.d.ts +17 -0
  43. package/lib/components/InboxMessage/MessagesBuilderUi.d.ts.map +1 -0
  44. package/lib/components/InboxMessage/Popover.d.ts +3 -0
  45. package/lib/components/InboxMessage/Popover.d.ts.map +1 -0
  46. package/lib/components/InboxMessage/Popover.js +31 -0
  47. package/lib/components/InboxMessage/Popover.js.map +1 -0
  48. package/lib/components/InboxMessage/RightSidebar.d.ts +9 -0
  49. package/lib/components/InboxMessage/RightSidebar.d.ts.map +1 -0
  50. package/lib/components/InboxMessage/RightSidebar.js +9 -0
  51. package/lib/components/InboxMessage/RightSidebar.js.map +1 -0
  52. package/lib/components/InboxMessage/RightSidebarAi.d.ts +37 -0
  53. package/lib/components/InboxMessage/RightSidebarAi.d.ts.map +1 -0
  54. package/lib/components/InboxMessage/RightSidebarAi.js +9 -0
  55. package/lib/components/InboxMessage/RightSidebarAi.js.map +1 -0
  56. package/lib/components/InboxMessage/ServiceConversationItem.d.ts +12 -0
  57. package/lib/components/InboxMessage/ServiceConversationItem.d.ts.map +1 -0
  58. package/lib/components/InboxMessage/ServiceConversationItem.js +185 -0
  59. package/lib/components/InboxMessage/ServiceConversationItem.js.map +1 -0
  60. package/lib/components/InboxMessage/ServiceInboxItem.d.ts +12 -0
  61. package/lib/components/InboxMessage/ServiceInboxItem.d.ts.map +1 -0
  62. package/lib/components/InboxMessage/ServiceInboxItem.js +182 -0
  63. package/lib/components/InboxMessage/ServiceInboxItem.js.map +1 -0
  64. package/lib/components/InboxMessage/StreamingMessageBubble.d.ts +18 -0
  65. package/lib/components/InboxMessage/StreamingMessageBubble.d.ts.map +1 -0
  66. package/lib/components/InboxMessage/SubscriptionHandler.d.ts +19 -0
  67. package/lib/components/InboxMessage/SubscriptionHandler.d.ts.map +1 -0
  68. package/lib/components/InboxMessage/SubscriptionHandler.js +41 -0
  69. package/lib/components/InboxMessage/SubscriptionHandler.js.map +1 -0
  70. package/lib/components/InboxMessage/TypingIndicator.d.ts +11 -0
  71. package/lib/components/InboxMessage/TypingIndicator.d.ts.map +1 -0
  72. package/lib/components/InboxMessage/UploadImageButton.d.ts +7 -0
  73. package/lib/components/InboxMessage/UploadImageButton.d.ts.map +1 -0
  74. package/lib/components/InboxMessage/UploadImageButton.js +30 -0
  75. package/lib/components/InboxMessage/UploadImageButton.js.map +1 -0
  76. package/lib/components/InboxMessage/UserModalContent.d.ts +3 -0
  77. package/lib/components/InboxMessage/UserModalContent.d.ts.map +1 -0
  78. package/lib/components/InboxMessage/UserModalContent.js +60 -0
  79. package/lib/components/InboxMessage/UserModalContent.js.map +1 -0
  80. package/lib/components/InboxMessage/index.d.ts +19 -0
  81. package/lib/components/InboxMessage/index.d.ts.map +1 -0
  82. package/lib/components/InboxMessage/message-widgets/CommonMessage.d.ts +11 -0
  83. package/lib/components/InboxMessage/message-widgets/CommonMessage.d.ts.map +1 -0
  84. package/lib/components/InboxMessage/message-widgets/CommonMessage.js +44 -0
  85. package/lib/components/InboxMessage/message-widgets/CommonMessage.js.map +1 -0
  86. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.d.ts +10 -0
  87. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.d.ts.map +1 -0
  88. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.js +194 -0
  89. package/lib/components/InboxMessage/message-widgets/ErrorFixCard.js.map +1 -0
  90. package/lib/components/InboxMessage/message-widgets/MessageCard.d.ts +8 -0
  91. package/lib/components/InboxMessage/message-widgets/MessageCard.d.ts.map +1 -0
  92. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.d.ts +12 -0
  93. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.d.ts.map +1 -0
  94. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.js +37 -0
  95. package/lib/components/InboxMessage/message-widgets/MessageSliceRenderer.js.map +1 -0
  96. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.d.ts +42 -0
  97. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.d.ts.map +1 -0
  98. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.js +1339 -0
  99. package/lib/components/InboxMessage/message-widgets/ModernMessageGroup.js.map +1 -0
  100. package/lib/components/InboxMessage/message-widgets/PlainMessage.d.ts +8 -0
  101. package/lib/components/InboxMessage/message-widgets/PlainMessage.d.ts.map +1 -0
  102. package/lib/components/InboxMessage/message-widgets/PlainMessage.js +14 -0
  103. package/lib/components/InboxMessage/message-widgets/PlainMessage.js.map +1 -0
  104. package/lib/components/InboxMessage/message-widgets/PropertyMessageWidget.d.ts +9 -0
  105. package/lib/components/InboxMessage/message-widgets/PropertyMessageWidget.d.ts.map +1 -0
  106. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts +14 -0
  107. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.d.ts.map +1 -0
  108. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js +333 -0
  109. package/lib/components/InboxMessage/message-widgets/SlackLikeMessageGroup.js.map +1 -0
  110. package/lib/components/InboxMessage/message-widgets/index.d.ts +4 -0
  111. package/lib/components/InboxMessage/message-widgets/index.d.ts.map +1 -0
  112. package/lib/components/ModelConfigPanel.d.ts +74 -0
  113. package/lib/components/ModelConfigPanel.d.ts.map +1 -0
  114. package/lib/components/ModelConfigPanel.js +1152 -0
  115. package/lib/components/ModelConfigPanel.js.map +1 -0
  116. package/lib/components/filler-components/RightSiderBar.d.ts +3 -0
  117. package/lib/components/filler-components/RightSiderBar.d.ts.map +1 -0
  118. package/lib/components/filler-components/RightSiderBar.js +532 -0
  119. package/lib/components/filler-components/RightSiderBar.js.map +1 -0
  120. package/lib/components/inbox/FilesList.d.ts +20 -0
  121. package/lib/components/inbox/FilesList.d.ts.map +1 -0
  122. package/lib/components/inbox/FilesList.js +68 -0
  123. package/lib/components/inbox/FilesList.js.map +1 -0
  124. package/lib/components/inbox/MessageItem.d.ts +17 -0
  125. package/lib/components/inbox/MessageItem.d.ts.map +1 -0
  126. package/lib/components/inbox/MessageItem.js +50 -0
  127. package/lib/components/inbox/MessageItem.js.map +1 -0
  128. package/lib/components/inbox/ThreadItem.d.ts +11 -0
  129. package/lib/components/inbox/ThreadItem.d.ts.map +1 -0
  130. package/lib/components/inbox/ThreadItem.js +147 -0
  131. package/lib/components/inbox/ThreadItem.js.map +1 -0
  132. package/lib/components/inbox/index.d.ts +4 -0
  133. package/lib/components/inbox/index.d.ts.map +1 -0
  134. package/lib/components/index.d.ts +10 -0
  135. package/lib/components/index.d.ts.map +1 -0
  136. package/lib/components/live-code-editor/hybrid-live-editor.d.ts +20 -0
  137. package/lib/components/live-code-editor/hybrid-live-editor.d.ts.map +1 -0
  138. package/lib/components/live-code-editor/index.d.ts +4 -0
  139. package/lib/components/live-code-editor/index.d.ts.map +1 -0
  140. package/lib/components/live-code-editor/live-code-editor.d.ts +14 -0
  141. package/lib/components/live-code-editor/live-code-editor.d.ts.map +1 -0
  142. package/lib/components/messages-container-ui/MessagesContainerUI.d.ts +81 -0
  143. package/lib/components/messages-container-ui/MessagesContainerUI.d.ts.map +1 -0
  144. package/lib/components/messages-container-ui/MessagesContainerUI.js +77 -0
  145. package/lib/components/messages-container-ui/MessagesContainerUI.js.map +1 -0
  146. package/lib/components/messages-container-ui/PlanModeView.d.ts +82 -0
  147. package/lib/components/messages-container-ui/PlanModeView.d.ts.map +1 -0
  148. package/lib/components/messages-container-ui/PlanModeView.js +267 -0
  149. package/lib/components/messages-container-ui/PlanModeView.js.map +1 -0
  150. package/lib/components/messages-container-ui/index.d.ts +6 -0
  151. package/lib/components/messages-container-ui/index.d.ts.map +1 -0
  152. package/lib/components/messages-container-ui/types.d.ts +38 -0
  153. package/lib/components/messages-container-ui/types.d.ts.map +1 -0
  154. package/lib/components/slot-fill/chat-message-filler.d.ts +4 -0
  155. package/lib/components/slot-fill/chat-message-filler.d.ts.map +1 -0
  156. package/lib/components/slot-fill/chat-message-filler.js +5 -0
  157. package/lib/components/slot-fill/chat-message-filler.js.map +1 -0
  158. package/lib/components/slot-fill/chat-message-slot.d.ts +11 -0
  159. package/lib/components/slot-fill/chat-message-slot.d.ts.map +1 -0
  160. package/lib/components/slot-fill/chat-message-slot.js +6 -0
  161. package/lib/components/slot-fill/chat-message-slot.js.map +1 -0
  162. package/lib/components/slot-fill/index.d.ts +4 -0
  163. package/lib/components/slot-fill/index.d.ts.map +1 -0
  164. package/lib/components/slot-fill/right-sidebar-filler.d.ts +4 -0
  165. package/lib/components/slot-fill/right-sidebar-filler.d.ts.map +1 -0
  166. package/lib/components/slot-fill/right-sidebar-filler.js +13 -0
  167. package/lib/components/slot-fill/right-sidebar-filler.js.map +1 -0
  168. package/lib/components/ui/button.d.ts +9 -0
  169. package/lib/components/ui/button.d.ts.map +1 -0
  170. package/lib/compute.d.ts +8 -0
  171. package/lib/compute.d.ts.map +1 -0
  172. package/lib/compute.js +264 -0
  173. package/lib/compute.js.map +1 -0
  174. package/lib/config/env-config.d.ts +20 -0
  175. package/lib/config/env-config.d.ts.map +1 -0
  176. package/lib/config/env-config.js +55 -0
  177. package/lib/config/env-config.js.map +1 -0
  178. package/lib/config/index.d.ts +2 -0
  179. package/lib/config/index.d.ts.map +1 -0
  180. package/lib/constants/breakpoints.d.ts +8 -0
  181. package/lib/constants/breakpoints.d.ts.map +1 -0
  182. package/lib/constants/index.d.ts +3 -0
  183. package/lib/constants/index.d.ts.map +1 -0
  184. package/lib/container/AiInbox.d.ts +15 -0
  185. package/lib/container/AiInbox.d.ts.map +1 -0
  186. package/lib/container/AiInboxWithLoader.d.ts +36 -0
  187. package/lib/container/AiInboxWithLoader.d.ts.map +1 -0
  188. package/lib/container/AiLandingInput.d.ts +27 -0
  189. package/lib/container/AiLandingInput.d.ts.map +1 -0
  190. package/lib/container/AiLandingInput.js +149 -0
  191. package/lib/container/AiLandingInput.js.map +1 -0
  192. package/lib/container/Inbox.d.ts +15 -0
  193. package/lib/container/Inbox.d.ts.map +1 -0
  194. package/lib/container/Inbox.js +964 -0
  195. package/lib/container/Inbox.js.map +1 -0
  196. package/lib/container/InboxAiMessagesLoader.d.ts +45 -0
  197. package/lib/container/InboxAiMessagesLoader.d.ts.map +1 -0
  198. package/lib/container/InboxAiMessagesLoader.js +80 -0
  199. package/lib/container/InboxAiMessagesLoader.js.map +1 -0
  200. package/lib/container/InboxContainer.d.ts +41 -0
  201. package/lib/container/InboxContainer.d.ts.map +1 -0
  202. package/lib/container/InboxContainer.js +27 -0
  203. package/lib/container/InboxContainer.js.map +1 -0
  204. package/lib/container/InboxTemplate1.d.ts +15 -0
  205. package/lib/container/InboxTemplate1.d.ts.map +1 -0
  206. package/lib/container/InboxTemplate1WithLoader.d.ts +36 -0
  207. package/lib/container/InboxTemplate1WithLoader.d.ts.map +1 -0
  208. package/lib/container/InboxTemplate2.d.ts +15 -0
  209. package/lib/container/InboxTemplate2.d.ts.map +1 -0
  210. package/lib/container/InboxWithAiLoader.d.ts +47 -0
  211. package/lib/container/InboxWithAiLoader.d.ts.map +1 -0
  212. package/lib/container/InboxWithAiLoader.js +118 -0
  213. package/lib/container/InboxWithAiLoader.js.map +1 -0
  214. package/lib/container/InboxWithLoader.d.ts +36 -0
  215. package/lib/container/InboxWithLoader.d.ts.map +1 -0
  216. package/lib/container/InboxWithLoader.js +277 -0
  217. package/lib/container/InboxWithLoader.js.map +1 -0
  218. package/lib/container/ServiceInbox.d.ts +9 -0
  219. package/lib/container/ServiceInbox.d.ts.map +1 -0
  220. package/lib/container/ServiceInbox.js +141 -0
  221. package/lib/container/ServiceInbox.js.map +1 -0
  222. package/lib/container/TestInboxWithAiLoader.d.ts +7 -0
  223. package/lib/container/TestInboxWithAiLoader.d.ts.map +1 -0
  224. package/lib/container/TestInboxWithAiLoader.js +135 -0
  225. package/lib/container/TestInboxWithAiLoader.js.map +1 -0
  226. package/lib/container/ThreadMessages.d.ts +13 -0
  227. package/lib/container/ThreadMessages.d.ts.map +1 -0
  228. package/lib/container/ThreadMessages.js +320 -0
  229. package/lib/container/ThreadMessages.js.map +1 -0
  230. package/lib/container/ThreadMessagesInbox.d.ts +14 -0
  231. package/lib/container/ThreadMessagesInbox.d.ts.map +1 -0
  232. package/lib/container/ThreadMessagesInbox.js +347 -0
  233. package/lib/container/ThreadMessagesInbox.js.map +1 -0
  234. package/lib/container/Threads.d.ts +8 -0
  235. package/lib/container/Threads.d.ts.map +1 -0
  236. package/lib/container/Threads.js +231 -0
  237. package/lib/container/Threads.js.map +1 -0
  238. package/lib/container/ThreadsInbox.d.ts +21 -0
  239. package/lib/container/ThreadsInbox.d.ts.map +1 -0
  240. package/lib/container/ThreadsInbox.js +243 -0
  241. package/lib/container/ThreadsInbox.js.map +1 -0
  242. package/lib/container/apply-footer-styles.d.ts +2 -0
  243. package/lib/container/apply-footer-styles.d.ts.map +1 -0
  244. package/lib/container/apply-footer-styles.js +16 -0
  245. package/lib/container/apply-footer-styles.js.map +1 -0
  246. package/lib/container/index.d.ts +13 -0
  247. package/lib/container/index.d.ts.map +1 -0
  248. package/lib/enums/index.d.ts +2 -0
  249. package/lib/enums/index.d.ts.map +1 -0
  250. package/lib/enums/messenger-slot-fill-name-enum.d.ts +11 -0
  251. package/lib/enums/messenger-slot-fill-name-enum.d.ts.map +1 -0
  252. package/lib/enums/messenger-slot-fill-name-enum.js +11 -0
  253. package/lib/enums/messenger-slot-fill-name-enum.js.map +1 -0
  254. package/lib/hooks/index.d.ts +4 -0
  255. package/lib/hooks/index.d.ts.map +1 -0
  256. package/lib/hooks/usePersistentModelConfig.d.ts +33 -0
  257. package/lib/hooks/usePersistentModelConfig.d.ts.map +1 -0
  258. package/lib/hooks/usePersistentModelConfig.js +123 -0
  259. package/lib/hooks/usePersistentModelConfig.js.map +1 -0
  260. package/lib/hooks/useStreamAssembler.d.ts +8 -0
  261. package/lib/hooks/useStreamAssembler.d.ts.map +1 -0
  262. package/lib/hooks/useTemplates.d.ts +14 -0
  263. package/lib/hooks/useTemplates.d.ts.map +1 -0
  264. package/lib/hooks/useTemplates.js +59 -0
  265. package/lib/hooks/useTemplates.js.map +1 -0
  266. package/lib/index.d.ts +14 -0
  267. package/lib/index.d.ts.map +1 -0
  268. package/lib/index.js +1 -0
  269. package/lib/index.js.map +1 -0
  270. package/lib/interfaces/index.d.ts +2 -0
  271. package/lib/interfaces/index.d.ts.map +1 -0
  272. package/lib/interfaces/message-widgets.interface.d.ts +21 -0
  273. package/lib/interfaces/message-widgets.interface.d.ts.map +1 -0
  274. package/lib/machines/aiAgentMachine.d.ts +3 -0
  275. package/lib/machines/aiAgentMachine.d.ts.map +1 -0
  276. package/lib/machines/aiAgentMachine.js +1083 -0
  277. package/lib/machines/aiAgentMachine.js.map +1 -0
  278. package/lib/machines/aiAgentMachine.simple.d.ts +3 -0
  279. package/lib/machines/aiAgentMachine.simple.d.ts.map +1 -0
  280. package/lib/machines/aiAgentMachine.simple.js +108 -0
  281. package/lib/machines/aiAgentMachine.simple.js.map +1 -0
  282. package/lib/machines/index.d.ts +3 -0
  283. package/lib/machines/index.d.ts.map +1 -0
  284. package/lib/machines/types.d.ts +77 -0
  285. package/lib/machines/types.d.ts.map +1 -0
  286. package/lib/module.d.ts +7 -0
  287. package/lib/module.d.ts.map +1 -0
  288. package/lib/module.js +26 -0
  289. package/lib/module.js.map +1 -0
  290. package/lib/routes.json +251 -0
  291. package/lib/styles/responsive.css +76 -0
  292. package/lib/templates/InboxWithAi.d.ts +44 -0
  293. package/lib/templates/InboxWithAi.d.ts.map +1 -0
  294. package/lib/templates/InboxWithAi.js +651 -0
  295. package/lib/templates/InboxWithAi.js.map +1 -0
  296. package/lib/templates/InboxWithAi.tsx +844 -0
  297. package/lib/templates/index.d.ts +2 -0
  298. package/lib/templates/index.d.ts.map +1 -0
  299. package/lib/templates/index.ts +1 -0
  300. package/lib/types/templates.d.ts +35 -0
  301. package/lib/types/templates.d.ts.map +1 -0
  302. package/lib/utils/utils.d.ts +2 -0
  303. package/lib/utils/utils.d.ts.map +1 -0
  304. package/lib/xstate/index.d.ts +3 -0
  305. package/lib/xstate/index.d.ts.map +1 -0
  306. package/lib/xstate/rightSidebar.machine.d.ts +4 -0
  307. package/lib/xstate/rightSidebar.machine.d.ts.map +1 -0
  308. package/lib/xstate/rightSidebar.types.d.ts +57 -0
  309. package/lib/xstate/rightSidebar.types.d.ts.map +1 -0
  310. package/package.json +69 -0
  311. package/rollup.config.mjs +47 -0
  312. package/src/cdm-locales/en/translations.json +31 -0
  313. package/src/cdm-locales/es/translations.json +31 -0
  314. package/src/components/AIAgent/AIAgent.tsx +1468 -0
  315. package/src/components/AIAgent/AIAgent.tsx.bk +1365 -0
  316. package/src/components/AIAgent/InputComponent.tsx +608 -0
  317. package/src/components/AIAgent/README.md +174 -0
  318. package/src/components/AIAgent/index.ts +1 -0
  319. package/src/components/InboxMessage/CommonMessage.tsx +40 -0
  320. package/src/components/InboxMessage/ConversationItem.tsx +255 -0
  321. package/src/components/InboxMessage/InputComponent.tsx +198 -0
  322. package/src/components/InboxMessage/LeftSidebar.tsx +140 -0
  323. package/src/components/InboxMessage/MessageInput.tsx +209 -0
  324. package/src/components/InboxMessage/MessageInputComponent.tsx +245 -0
  325. package/src/components/InboxMessage/Messages.tsx +137 -0
  326. package/src/components/InboxMessage/MessagesBuilderUi.tsx +205 -0
  327. package/src/components/InboxMessage/Popover.tsx +42 -0
  328. package/src/components/InboxMessage/RightSidebar.tsx +22 -0
  329. package/src/components/InboxMessage/RightSidebarAi.tsx +47 -0
  330. package/src/components/InboxMessage/ServiceConversationItem.tsx +234 -0
  331. package/src/components/InboxMessage/ServiceInboxItem.tsx +223 -0
  332. package/src/components/InboxMessage/StreamingMessageBubble.tsx +270 -0
  333. package/src/components/InboxMessage/SubscriptionHandler.tsx +55 -0
  334. package/src/components/InboxMessage/TypingIndicator.tsx +38 -0
  335. package/src/components/InboxMessage/UploadImageButton.tsx +46 -0
  336. package/src/components/InboxMessage/UserModalContent.tsx +60 -0
  337. package/src/components/InboxMessage/index.ts +18 -0
  338. package/src/components/InboxMessage/message-widgets/CommonMessage.tsx +69 -0
  339. package/src/components/InboxMessage/message-widgets/ErrorFixCard.tsx +239 -0
  340. package/src/components/InboxMessage/message-widgets/MessageCard.tsx +127 -0
  341. package/src/components/InboxMessage/message-widgets/MessageSliceRenderer.tsx +40 -0
  342. package/src/components/InboxMessage/message-widgets/ModernMessageGroup.tsx +1733 -0
  343. package/src/components/InboxMessage/message-widgets/PlainMessage.tsx +18 -0
  344. package/src/components/InboxMessage/message-widgets/PropertyMessageWidget.tsx +29 -0
  345. package/src/components/InboxMessage/message-widgets/SlackLikeMessageGroup.tsx +492 -0
  346. package/src/components/InboxMessage/message-widgets/index.ts +8 -0
  347. package/src/components/ModelConfigPanel.tsx +1357 -0
  348. package/src/components/filler-components/RightSiderBar.tsx +572 -0
  349. package/src/components/inbox/FilesList.tsx +89 -0
  350. package/src/components/inbox/MessageItem.tsx +50 -0
  351. package/src/components/inbox/ThreadItem.tsx +295 -0
  352. package/src/components/inbox/index.ts +3 -0
  353. package/src/components/index.ts +29 -0
  354. package/src/components/live-code-editor/hybrid-live-editor.tsx +105 -0
  355. package/src/components/live-code-editor/index.ts +3 -0
  356. package/src/components/live-code-editor/live-code-editor.tsx +257 -0
  357. package/src/components/messages-container-ui/MessagesContainerUI.tsx +151 -0
  358. package/src/components/messages-container-ui/PlanModeView.tsx +426 -0
  359. package/src/components/messages-container-ui/README.md +91 -0
  360. package/src/components/messages-container-ui/index.ts +5 -0
  361. package/src/components/messages-container-ui/types.ts +40 -0
  362. package/src/components/slot-fill/chat-message-filler.tsx +18 -0
  363. package/src/components/slot-fill/chat-message-slot.tsx +18 -0
  364. package/src/components/slot-fill/index.ts +3 -0
  365. package/src/components/slot-fill/right-sidebar-filler.tsx +48 -0
  366. package/src/components/ui/button.tsx +32 -0
  367. package/src/compute.ts +271 -0
  368. package/src/config/env-config.ts +24 -0
  369. package/src/config/index.ts +1 -0
  370. package/src/constants/breakpoints.ts +7 -0
  371. package/src/constants/index.ts +5 -0
  372. package/src/container/AiInbox.tsx +1879 -0
  373. package/src/container/AiInboxWithLoader.tsx +356 -0
  374. package/src/container/AiLandingInput.tsx +200 -0
  375. package/src/container/Inbox.tsx +1095 -0
  376. package/src/container/InboxAiMessagesLoader.tsx +129 -0
  377. package/src/container/InboxContainer.tsx +61 -0
  378. package/src/container/InboxTemplate1.tsx +1553 -0
  379. package/src/container/InboxTemplate1WithLoader.tsx +338 -0
  380. package/src/container/InboxTemplate2.tsx +1617 -0
  381. package/src/container/InboxWithAiLoader.tsx +177 -0
  382. package/src/container/InboxWithLoader.tsx +341 -0
  383. package/src/container/ServiceInbox.tsx +188 -0
  384. package/src/container/TestInboxWithAiLoader.tsx +147 -0
  385. package/src/container/ThreadMessages.tsx +378 -0
  386. package/src/container/ThreadMessagesInbox.tsx +457 -0
  387. package/src/container/Threads.tsx +270 -0
  388. package/src/container/ThreadsInbox.tsx +351 -0
  389. package/src/container/apply-footer-styles.ts +17 -0
  390. package/src/container/index.ts +31 -0
  391. package/src/enums/index.ts +1 -0
  392. package/src/enums/messenger-slot-fill-name-enum.ts +10 -0
  393. package/src/hooks/index.ts +3 -0
  394. package/src/hooks/usePersistentModelConfig.ts +166 -0
  395. package/src/hooks/useStreamAssembler.ts +7 -0
  396. package/src/hooks/useTemplates.ts +75 -0
  397. package/src/index.ts +49 -0
  398. package/src/interfaces/index.ts +1 -0
  399. package/src/interfaces/message-widgets.interface.ts +21 -0
  400. package/src/machines/aiAgentMachine.simple.ts +89 -0
  401. package/src/machines/aiAgentMachine.ts +1296 -0
  402. package/src/machines/aiAgentMachine.ts.bk +1296 -0
  403. package/src/machines/index.ts +2 -0
  404. package/src/machines/types.ts +59 -0
  405. package/src/module.tsx +32 -0
  406. package/src/styles/responsive.css +76 -0
  407. package/src/templates/InboxWithAi.tsx +844 -0
  408. package/src/templates/index.ts +1 -0
  409. package/src/types/templates.ts +35 -0
  410. package/src/utils/utils.ts +3 -0
  411. package/src/xstate/index.ts +2 -0
  412. package/src/xstate/rightSidebar.machine.ts +304 -0
  413. package/src/xstate/rightSidebar.types.ts +58 -0
  414. package/tsconfig.json +14 -0
  415. package/webpack.config.js +92 -0
@@ -0,0 +1 @@
1
+ export { default as InboxWithAi } from './InboxWithAi';
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Template configuration for workflow/build templates (from marketplace/extension)
3
+ */
4
+ export interface TemplateConfig {
5
+ formExtensionId: string;
6
+ formFunctionId: string;
7
+ formId: string;
8
+ tags: Record<string, string> | string[];
9
+ enable: string;
10
+ templateName: string;
11
+ displayName?: string;
12
+ description?: string;
13
+ category?: string;
14
+ icon?: string;
15
+ projectType?: string;
16
+ keywords?: Record<string, string> | string[];
17
+ formExtensionE2BAPIKey?: string;
18
+ formExtensionE2BClaudeTemplateId?: string;
19
+ formExtensionE2BDomain?: string;
20
+ formExtensionE2BTemplateId?: string;
21
+ formExtensionE2BViteReactTemplateId?: string;
22
+ formExtensionE2BVueTemplateId?: string;
23
+ formExtensionGithubOrg?: string;
24
+ formExtensionGithubReactBase?: string;
25
+ formExtensionGithubToken?: string;
26
+ formExtensionModelConfigAPIKey?: string;
27
+ }
28
+
29
+ /** Template item for InputToolBar template modal */
30
+ export interface TemplateModalItem {
31
+ id: string;
32
+ label: string;
33
+ description?: string;
34
+ category?: string;
35
+ }
@@ -0,0 +1,3 @@
1
+ export function cn(...inputs: (string | undefined | null | false)[]): string {
2
+ return inputs.filter(Boolean).join(' ').trim();
3
+ }
@@ -0,0 +1,2 @@
1
+ export * from './rightSidebar.types';
2
+ export * from './rightSidebar.machine';
@@ -0,0 +1,304 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+ import { createMachine, assign, fromPromise } from 'xstate';
3
+ import type { RightSidebarContext, MachineEvent, ProbeEvent, RecreateSandboxEvent } from './rightSidebar.types';
4
+
5
+ export const rightSidebarMachine = createMachine({
6
+ id: 'rightSidebar',
7
+ types: {} as {
8
+ context: RightSidebarContext;
9
+ events: MachineEvent;
10
+ input: Partial<RightSidebarContext>;
11
+ },
12
+ context: ({ input }) => ({
13
+ channelId: input?.channelId ?? '',
14
+ isMinimized: input?.isMinimized ?? false,
15
+ windowWidth: input?.windowWidth ?? 0,
16
+ windowHeight: input?.windowHeight ?? 0,
17
+ isLoading: input?.isLoading ?? false,
18
+ activeFragment: input?.activeFragment ?? null,
19
+ currentFiles: input?.currentFiles ?? {},
20
+ canvasLayers: input?.canvasLayers ?? [],
21
+ previewStatus: input?.previewStatus ?? null,
22
+ }),
23
+ initial: 'idle',
24
+ states: {
25
+ idle: {
26
+ on: {
27
+ UPDATE: {
28
+ actions: assign(({ context, event }) => ({
29
+ ...context,
30
+ ...(event.value || {}),
31
+ })),
32
+ },
33
+ SET_FRAGMENT: {
34
+ actions: assign(({ context, event }) => ({
35
+ ...context,
36
+ activeFragment: event.fragment,
37
+ currentFiles: event.fragment?.files || context.currentFiles,
38
+ canvasLayers: (event.fragment?.canvasLayers as unknown[]) || context.canvasLayers,
39
+ // Don't set previewStatus to 'checking' automatically - only probe when explicitly needed
40
+ previewStatus: null,
41
+ })),
42
+ },
43
+ PROBE: 'probing',
44
+ SET_LOADING: {
45
+ actions: assign(({ context, event }) => ({
46
+ ...context,
47
+ isLoading: event.isLoading,
48
+ })),
49
+ },
50
+ CLEAR_PREVIEW_STATUS: {
51
+ actions: assign(({ context }) => ({
52
+ ...context,
53
+ previewStatus: null,
54
+ })),
55
+ },
56
+ RECREATE_SANDBOX: [
57
+ {
58
+ // Only transition if we're not already recreating
59
+ guard: ({ context }) => {
60
+ // Check if we have a fragment ID to recreate
61
+ const hasFragmentId = !!context.activeFragment?.id;
62
+ if (!hasFragmentId) {
63
+ console.log('🚫 RECREATE_SANDBOX: No fragment ID, ignoring');
64
+ return false;
65
+ }
66
+ return true;
67
+ },
68
+ target: 'recreating',
69
+ actions: assign(({ context, event }) => {
70
+ const recreateEvent = event as RecreateSandboxEvent;
71
+ console.log('🎯 RECREATE_SANDBOX event received and accepted:', {
72
+ id: recreateEvent.id,
73
+ fragmentId: context.activeFragment?.id,
74
+ });
75
+ return context;
76
+ }),
77
+ },
78
+ {
79
+ // If guard fails or already recreating, just log and stay in current state
80
+ actions: ({ context, event }) => {
81
+ const recreateEvent = event as RecreateSandboxEvent;
82
+ console.log('⏭️ RECREATE_SANDBOX ignored (already recreating or no fragment):', {
83
+ id: recreateEvent.id,
84
+ fragmentId: context.activeFragment?.id,
85
+ });
86
+ },
87
+ },
88
+ ],
89
+ },
90
+ },
91
+ probing: {
92
+ invoke: {
93
+ id: 'probeUrl',
94
+ src: 'probeUrl',
95
+ input: ({ context, event }) => {
96
+ const probeEvent = event as ProbeEvent;
97
+ return {
98
+ url: probeEvent.url ?? context.activeFragment?.sandboxUrl,
99
+ fragmentId: probeEvent.fragmentId ?? context.activeFragment?.id,
100
+ };
101
+ },
102
+ onDone: {
103
+ target: 'idle',
104
+ actions: assign(({ context }) => ({
105
+ ...context,
106
+ previewStatus: null,
107
+ isLoading: false,
108
+ })),
109
+ },
110
+ onError: [
111
+ {
112
+ // Only recreate if we have a fragment ID AND the error suggests the sandbox is truly unavailable
113
+ // Don't recreate on transient network errors (timeouts, CORS, etc.)
114
+ guard: ({ context, event }): boolean => {
115
+ if (!context.activeFragment?.id) {
116
+ console.log('🚫 Guard: No fragment ID, skipping recreation');
117
+ return false;
118
+ }
119
+ const errorMessage =
120
+ event.error instanceof Error ? event.error.message : String(event.error);
121
+
122
+ // Check for explicit HTTP status codes (4xx, 5xx)
123
+ const isServerError = /^[45]\d{2}/.test(errorMessage);
124
+
125
+ // Also check for CORS/network errors that likely indicate expired sandbox (502)
126
+ // CORS errors on sandbox URLs usually mean the sandbox is expired/down
127
+ const isCorsNetworkError: boolean =
128
+ errorMessage.includes('502 CORS/Network Error') ||
129
+ errorMessage.includes('Failed to fetch') ||
130
+ errorMessage.includes('CORS') ||
131
+ errorMessage.includes('NetworkError') ||
132
+ errorMessage.includes('Network request failed');
133
+
134
+ const willRecreate: boolean = isServerError || isCorsNetworkError;
135
+
136
+ console.log('🔍 Guard check:', {
137
+ errorMessage,
138
+ isServerError,
139
+ isCorsNetworkError,
140
+ willRecreate,
141
+ });
142
+
143
+ return willRecreate;
144
+ },
145
+ target: 'recreating',
146
+ actions: assign(({ context, event }: any) => {
147
+ console.log('🔄 Transitioning to recreating state:', {
148
+ fragmentId: context.activeFragment?.id,
149
+ error: event.error instanceof Error ? event.error.message : String(event.error),
150
+ });
151
+ return {
152
+ ...context,
153
+ previewStatus: {
154
+ status: 'error' as const,
155
+ message: event.error instanceof Error ? event.error.message : 'Network error',
156
+ },
157
+ isLoading: true,
158
+ };
159
+ }),
160
+ },
161
+ {
162
+ // For other errors (network, CORS, timeout), just show error but don't recreate
163
+ target: 'idle',
164
+ actions: assign(({ context, event }: any) => ({
165
+ ...context,
166
+ previewStatus: {
167
+ status: 'error' as const,
168
+ message: event.error instanceof Error ? event.error.message : 'Network error',
169
+ },
170
+ isLoading: false,
171
+ })),
172
+ },
173
+ ],
174
+ },
175
+ },
176
+ recreating: {
177
+ invoke: {
178
+ id: 'recreateSandbox',
179
+ src: 'recreateSandbox',
180
+ input: ({ context, event }) => {
181
+ const recreateEvent = event as RecreateSandboxEvent;
182
+ const id = recreateEvent.id ?? context.activeFragment?.id ?? '';
183
+ console.log('📥 recreateSandbox input:', {
184
+ id,
185
+ hasRecreateEventId: !!recreateEvent.id,
186
+ hasActiveFragmentId: !!context.activeFragment?.id,
187
+ activeFragmentId: context.activeFragment?.id,
188
+ });
189
+ return {
190
+ id,
191
+ };
192
+ },
193
+ onDone: {
194
+ target: 'idle',
195
+ actions: assign(({ context }) => ({
196
+ ...context,
197
+ isLoading: false,
198
+ previewStatus: { status: 'checking' as const },
199
+ })),
200
+ },
201
+ onError: {
202
+ target: 'idle',
203
+ actions: assign(({ context, event }) => ({
204
+ ...context,
205
+ isLoading: false,
206
+ previewStatus: {
207
+ status: 'error' as const,
208
+ message: event.error instanceof Error ? event.error.message : 'Recreate failed',
209
+ },
210
+ })),
211
+ },
212
+ },
213
+ on: {
214
+ COMPLETE_RECREATION: {
215
+ target: 'idle',
216
+ actions: assign(({ context }) => ({
217
+ ...context,
218
+ isLoading: false,
219
+ previewStatus: null,
220
+ })),
221
+ },
222
+ },
223
+ },
224
+ },
225
+ }).provide({
226
+ actors: {
227
+ probeUrl: fromPromise(async ({ input }) => {
228
+ const { url } = input as { url?: string };
229
+ console.log('🔍 probeUrl actor called with URL:', url);
230
+ if (!url) {
231
+ throw new Error('No URL provided for probing');
232
+ }
233
+ const controller = new AbortController();
234
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
235
+ try {
236
+ console.log('📡 Fetching URL to probe:', url);
237
+ const res = await fetch(url, {
238
+ method: 'GET',
239
+ mode: 'cors',
240
+ redirect: 'follow',
241
+ signal: controller.signal,
242
+ });
243
+ clearTimeout(timeoutId);
244
+
245
+ console.log('📊 Probe response status:', res.status, res.statusText);
246
+
247
+ // Check for HTTP error status codes (4xx, 5xx)
248
+ if (!res.ok) {
249
+ const statusCode = res.status;
250
+ const statusText = res.statusText || 'Unknown Error';
251
+ const errorMessage = `${statusCode} ${statusText}`;
252
+ console.log('❌ Probe detected error:', errorMessage);
253
+ // Throw error with status code format that matches the guard regex: /^[45]\d{2}/
254
+ throw new Error(errorMessage);
255
+ }
256
+
257
+ console.log('✅ Probe successful - URL is accessible');
258
+ return { ok: true } as const;
259
+ } catch (error) {
260
+ clearTimeout(timeoutId);
261
+
262
+ // If it's an abort (timeout), don't treat as server error
263
+ if (error instanceof Error && error.name === 'AbortError') {
264
+ throw new Error('TIMEOUT Request timeout');
265
+ }
266
+
267
+ // If it's already a formatted error (from res.ok check), rethrow it
268
+ if (error instanceof Error && /^\d{3}/.test(error.message)) {
269
+ throw error;
270
+ }
271
+
272
+ // Handle CORS/network errors - these often mask 502 errors from expired sandboxes
273
+ // When we get a CORS error or "Failed to fetch", it's likely because:
274
+ // 1. The sandbox is expired (502) and the server isn't responding properly
275
+ // 2. The sandbox is down and can't set CORS headers
276
+ // We'll throw a special error that the guard can recognize
277
+ if (error instanceof Error) {
278
+ const isCorsError =
279
+ error.message.includes('Failed to fetch') ||
280
+ error.message.includes('CORS') ||
281
+ error.message.includes('NetworkError') ||
282
+ error.message.includes('Network request failed');
283
+
284
+ if (isCorsError) {
285
+ console.log('⚠️ CORS/Network error detected - likely expired sandbox (502):', error.message);
286
+ // Throw as 502 error so guard will match it
287
+ throw new Error('502 CORS/Network Error - Sandbox likely expired');
288
+ }
289
+ }
290
+
291
+ // For other network errors, throw as-is and let guard decide
292
+ throw error;
293
+ }
294
+ }),
295
+ recreateSandbox: fromPromise(async ({ input }) => {
296
+ // Placeholder actor: implement by injecting via provide in component if needed
297
+ const { id } = input as { id: string };
298
+ console.log('recreateSandbox actor invoked for id:', id);
299
+ return { success: true } as const;
300
+ }),
301
+ },
302
+ });
303
+
304
+ export type RightSidebarMachine = typeof rightSidebarMachine;
@@ -0,0 +1,58 @@
1
+ import type { ActorRefFrom } from 'xstate';
2
+
3
+ export type PreviewStatus = {
4
+ code?: number;
5
+ message?: string;
6
+ status?: 'checking' | 'error';
7
+ } | null;
8
+
9
+ export type ActiveFragment = {
10
+ id?: string;
11
+ sandboxUrl?: string;
12
+ sandboxId?: string;
13
+ title?: string;
14
+ files?: Record<string, string>;
15
+ projectId?: string;
16
+ modelConfig?: unknown;
17
+ canvasLayers?: unknown[];
18
+ summary?: unknown;
19
+ isError?: boolean;
20
+ isCreatingSandbox?: boolean;
21
+ } | null;
22
+
23
+ export type RightSidebarContext = {
24
+ channelId: string;
25
+ isMinimized: boolean;
26
+ windowWidth: number;
27
+ windowHeight: number;
28
+ isLoading: boolean;
29
+ activeFragment: ActiveFragment;
30
+ currentFiles: Record<string, string>;
31
+ canvasLayers: unknown[];
32
+ previewStatus: PreviewStatus;
33
+ };
34
+
35
+ export type UpdateEvent = {
36
+ type: 'UPDATE';
37
+ value: Partial<RightSidebarContext>;
38
+ };
39
+
40
+ export type SetFragmentEvent = {
41
+ type: 'SET_FRAGMENT';
42
+ fragment: NonNullable<ActiveFragment>;
43
+ };
44
+
45
+ export type ProbeEvent = { type: 'PROBE'; url?: string; fragmentId?: string };
46
+
47
+ export type RecreateSandboxEvent = { type: 'RECREATE_SANDBOX'; id: string };
48
+
49
+ export type MachineEvent =
50
+ | UpdateEvent
51
+ | SetFragmentEvent
52
+ | ProbeEvent
53
+ | RecreateSandboxEvent
54
+ | { type: 'SET_LOADING'; isLoading: boolean }
55
+ | { type: 'CLEAR_PREVIEW_STATUS' }
56
+ | { type: 'COMPLETE_RECREATION' };
57
+
58
+ export type SubmitOrganizationActor = ActorRefFrom<unknown>;
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "outDir": "lib",
6
+ "declarationDir": "lib",
7
+ "declaration": true,
8
+ "declarationMap": true,
9
+ "skipLibCheck": true,
10
+ "types": ["@types/node", "@types/jest", "../../../typings"]
11
+ },
12
+ "exclude": ["../../../node_modules", "node_modules", "lib", "dist", "webpack.config.js", "rollup.config.mjs"],
13
+ "include": ["src", "./typings/*.d.ts", "type.d.ts"]
14
+ }
@@ -0,0 +1,92 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+ const nodeExternals = require('webpack-node-externals');
3
+ // eslint-disable-next-line import/no-extraneous-dependencies
4
+ const webpack = require('webpack');
5
+ const path = require('path');
6
+
7
+ const webpackOpts = {
8
+ mode: 'development',
9
+ entry: {
10
+ index: './src/index.ts',
11
+ },
12
+ target: 'node',
13
+ output: {
14
+ path: path.join(__dirname, 'lib'),
15
+ filename: '[name].js',
16
+ libraryTarget: 'commonjs2',
17
+ },
18
+ resolve: {
19
+ extensions: [
20
+ '.js',
21
+ '.jsx',
22
+ '.ts',
23
+ '.tsx',
24
+ '.graphql',
25
+ '.graphqls',
26
+ '.gql',
27
+ '.native.tsx',
28
+ '.native.ts',
29
+ '.json',
30
+ ],
31
+ },
32
+ plugins: [
33
+ new webpack.LoaderOptionsPlugin({
34
+ options: {
35
+ test: /\.tsx?$/,
36
+ ts: {
37
+ compiler: 'typescript',
38
+ configFile: 'tsconfig.json',
39
+ },
40
+ tslint: {
41
+ emitErrors: true,
42
+ failOnHint: true,
43
+ },
44
+ },
45
+ }),
46
+ ],
47
+ devtool: 'source-map',
48
+ module: {
49
+ rules: [
50
+ {
51
+ test: /\.(tsx)?$/,
52
+ use: 'ts-loader',
53
+ },
54
+ {
55
+ test: /\.mjs$/,
56
+ include: /node_modules/,
57
+ type: 'javascript/auto',
58
+ },
59
+ {
60
+ test: /\.(gql)$/,
61
+ exclude: /node_modules/,
62
+ use: ['graphql-tag/loader'],
63
+ },
64
+ {
65
+ test: /\.graphql?/,
66
+ exclude: /node_modules/,
67
+ use: 'raw-loader',
68
+ },
69
+ {
70
+ test: /\.(png|jpg|gif|webp)$/i,
71
+ use: {
72
+ loader: 'url-loader',
73
+ options: {
74
+ limit: 8192,
75
+ name: 'static/media/[name].[hash:8].[ext]',
76
+ },
77
+ },
78
+ },
79
+ {
80
+ test: /\.svg$/,
81
+ use: ['@svgr/webpack'],
82
+ },
83
+ {
84
+ test: /\.json$/,
85
+ loader: 'json-loader',
86
+ },
87
+ ],
88
+ },
89
+ externals: [nodeExternals({ modulesDir: '../../../node_modules' }), nodeExternals()],
90
+ };
91
+
92
+ module.exports = webpackOpts;