@adminide-stack/yantra-mobile 12.0.69-alpha.9 → 12.0.70-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 (522) hide show
  1. package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
  2. package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
  3. package/lib/components/KeyboardComposerDock.js +8 -1
  4. package/lib/components/KeyboardComposerDock.js.map +1 -1
  5. package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
  6. package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
  7. package/lib/config/env-config.js +4 -0
  8. package/lib/config/env-config.js.map +1 -1
  9. package/lib/contexts/ChatLiveStreamContext.js +4 -1
  10. package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
  11. package/lib/features/agent-chat/NativeAgentChat.js +2 -0
  12. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  13. package/lib/features/apps/AppsCatalog.js +2 -2
  14. package/lib/features/apps/AppsCatalog.js.map +1 -1
  15. package/lib/features/audio-input/MicErrorBoundary.js +2 -2
  16. package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
  17. package/lib/features/canvas/AudioEditorExperience.js +308 -0
  18. package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
  19. package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
  20. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
  21. package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
  22. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
  23. package/lib/features/canvas/CanvasChatResultCard.js +113 -0
  24. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
  25. package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
  26. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
  27. package/lib/features/canvas/CanvasExperience.js +859 -0
  28. package/lib/features/canvas/CanvasExperience.js.map +1 -0
  29. package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
  30. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
  31. package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
  32. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
  33. package/lib/features/canvas/CanvasLooksPanel.js +184 -0
  34. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
  35. package/lib/features/canvas/CanvasTasksPanel.js +138 -0
  36. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
  37. package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
  38. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
  39. package/lib/features/canvas/CanvasToolDock.js +423 -0
  40. package/lib/features/canvas/CanvasToolDock.js.map +1 -0
  41. package/lib/features/canvas/FrameExtractorExperience.js +242 -0
  42. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
  43. package/lib/features/canvas/ImageEditorExperience.js +491 -0
  44. package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
  45. package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
  46. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
  47. package/lib/features/canvas/MoodboardExperience.js +205 -0
  48. package/lib/features/canvas/MoodboardExperience.js.map +1 -0
  49. package/lib/features/canvas/NativeCanvasViewer.js +929 -0
  50. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
  51. package/lib/features/canvas/PromoContextFields.js +150 -0
  52. package/lib/features/canvas/PromoContextFields.js.map +1 -0
  53. package/lib/features/canvas/SetStudioExperience.js +323 -0
  54. package/lib/features/canvas/SetStudioExperience.js.map +1 -0
  55. package/lib/features/canvas/VideoClipsExperience.js +175 -0
  56. package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
  57. package/lib/features/canvas/VideoEditExperience.js +824 -0
  58. package/lib/features/canvas/VideoEditExperience.js.map +1 -0
  59. package/lib/features/canvas/VideoEditorExperience.js +3050 -0
  60. package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
  61. package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
  62. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
  63. package/lib/features/canvas/aiEdit.js +53 -0
  64. package/lib/features/canvas/aiEdit.js.map +1 -0
  65. package/lib/features/canvas/canvasAgentChat.js +76 -0
  66. package/lib/features/canvas/canvasAgentChat.js.map +1 -0
  67. package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
  68. package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
  69. package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
  70. package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
  71. package/lib/features/canvas/canvasChatDisplay.js +38 -0
  72. package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
  73. package/lib/features/canvas/canvasChatTemplates.js +219 -0
  74. package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
  75. package/lib/features/canvas/canvasCore.js +138 -1
  76. package/lib/features/canvas/canvasCore.js.map +1 -1
  77. package/lib/features/canvas/canvasEditOps.js +224 -0
  78. package/lib/features/canvas/canvasEditOps.js.map +1 -0
  79. package/lib/features/canvas/canvasTasks.js +187 -0
  80. package/lib/features/canvas/canvasTasks.js.map +1 -0
  81. package/lib/features/canvas/designPromptTemplates.js +3084 -0
  82. package/lib/features/canvas/designPromptTemplates.js.map +1 -0
  83. package/lib/features/canvas/editTools.js +54 -0
  84. package/lib/features/canvas/editTools.js.map +1 -0
  85. package/lib/features/canvas/extendVideo.js +5 -0
  86. package/lib/features/canvas/extendVideo.js.map +1 -0
  87. package/lib/features/canvas/frameExtract.js +33 -0
  88. package/lib/features/canvas/frameExtract.js.map +1 -0
  89. package/lib/features/canvas/generationModels.js +201 -0
  90. package/lib/features/canvas/generationModels.js.map +1 -0
  91. package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
  92. package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
  93. package/lib/features/canvas/influencer/productReel.js +72 -0
  94. package/lib/features/canvas/influencer/productReel.js.map +1 -0
  95. package/lib/features/canvas/influencer/reelPlan.js +159 -0
  96. package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
  97. package/lib/features/canvas/moodboardCore.js +13 -0
  98. package/lib/features/canvas/moodboardCore.js.map +1 -0
  99. package/lib/features/canvas/promoProjectImport.js +99 -0
  100. package/lib/features/canvas/promoProjectImport.js.map +1 -0
  101. package/lib/features/canvas/promoVideo.js +312 -0
  102. package/lib/features/canvas/promoVideo.js.map +1 -0
  103. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
  104. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
  105. package/lib/features/canvas/sessionIdentity.js +28 -1
  106. package/lib/features/canvas/sessionIdentity.js.map +1 -1
  107. package/lib/features/canvas/set/SetViewportWebView.js +133 -0
  108. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
  109. package/lib/features/canvas/set/cameraPath.js +194 -0
  110. package/lib/features/canvas/set/cameraPath.js.map +1 -0
  111. package/lib/features/canvas/set/setProject.js +24 -0
  112. package/lib/features/canvas/set/setProject.js.map +1 -0
  113. package/lib/features/canvas/storageLibrary.js +184 -0
  114. package/lib/features/canvas/storageLibrary.js.map +1 -0
  115. package/lib/features/canvas/studioCatalog.js +129 -0
  116. package/lib/features/canvas/studioCatalog.js.map +1 -0
  117. package/lib/features/canvas/studioLooks.js +189 -0
  118. package/lib/features/canvas/studioLooks.js.map +1 -0
  119. package/lib/features/canvas/surfaceIndex.js +63 -1
  120. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  121. package/lib/features/canvas/templateImport/invideoNative.js +221 -0
  122. package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
  123. package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
  124. package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
  125. package/lib/features/canvas/templateImport/renderConfig.js +93 -0
  126. package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
  127. package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
  128. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
  129. package/lib/features/canvas/video3d.js +109 -0
  130. package/lib/features/canvas/video3d.js.map +1 -0
  131. package/lib/features/canvas/videoClips.js +42 -0
  132. package/lib/features/canvas/videoClips.js.map +1 -0
  133. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
  134. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
  135. package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
  136. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
  137. package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
  138. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
  139. package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
  140. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
  141. package/lib/features/canvas/videoEditor/editorModel.js +346 -0
  142. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
  143. package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
  144. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
  145. package/lib/features/canvas/videoEditor/filters.js +41 -0
  146. package/lib/features/canvas/videoEditor/filters.js.map +1 -0
  147. package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
  148. package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
  150. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
  151. package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
  152. package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
  153. package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
  154. package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
  155. package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
  156. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
  157. package/lib/features/canvas/videoRenderer.js +8 -0
  158. package/lib/features/canvas/videoRenderer.js.map +1 -0
  159. package/lib/features/canvas/withRemoteSafeArea.js +2 -2
  160. package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
  161. package/lib/features/characters/characterStudioProps.js +14 -0
  162. package/lib/features/characters/characterStudioProps.js.map +1 -0
  163. package/lib/features/chat/ChatCodeBlock.js +7 -3
  164. package/lib/features/chat/ChatCodeBlock.js.map +1 -1
  165. package/lib/features/chat/ChatTranscript.js +7 -3
  166. package/lib/features/chat/ChatTranscript.js.map +1 -1
  167. package/lib/features/chat/ChatWidgetCard.js +13 -0
  168. package/lib/features/chat/ChatWidgetCard.js.map +1 -0
  169. package/lib/features/chat/ConnectorConnectCard.js +166 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +272 -0
  172. package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
  173. package/lib/features/chat/MessageActionBar.js.map +1 -1
  174. package/lib/features/chat/QueuedFollowUps.js +71 -0
  175. package/lib/features/chat/QueuedFollowUps.js.map +1 -0
  176. package/lib/features/chat/chatWidgets.js +37 -0
  177. package/lib/features/chat/chatWidgets.js.map +1 -0
  178. package/lib/features/chat/connectorConnect.js +207 -0
  179. package/lib/features/chat/connectorConnect.js.map +1 -0
  180. package/lib/features/chat/connectorConnectHandbacks.js +55 -0
  181. package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
  182. package/lib/features/design/DesignEditorExperience.js +643 -0
  183. package/lib/features/design/DesignEditorExperience.js.map +1 -0
  184. package/lib/features/design/DesignExperience.js +444 -0
  185. package/lib/features/design/DesignExperience.js.map +1 -0
  186. package/lib/features/design/designCore.js +298 -0
  187. package/lib/features/design/designCore.js.map +1 -0
  188. package/lib/features/design/designIndex.js +150 -0
  189. package/lib/features/design/designIndex.js.map +1 -0
  190. package/lib/features/design/exportDesign.js +133 -0
  191. package/lib/features/design/exportDesign.js.map +1 -0
  192. package/lib/features/job-search/ApplicationsPanel.js +907 -0
  193. package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
  194. package/lib/features/job-search/ContactsPanel.js +627 -0
  195. package/lib/features/job-search/ContactsPanel.js.map +1 -0
  196. package/lib/features/job-search/InsightsPanel.js +299 -0
  197. package/lib/features/job-search/InsightsPanel.js.map +1 -0
  198. package/lib/features/job-search/InterviewPanel.js +637 -0
  199. package/lib/features/job-search/InterviewPanel.js.map +1 -0
  200. package/lib/features/job-search/JdPastePrompt.js +130 -0
  201. package/lib/features/job-search/JdPastePrompt.js.map +1 -0
  202. package/lib/features/job-search/JobCard.js +199 -0
  203. package/lib/features/job-search/JobCard.js.map +1 -0
  204. package/lib/features/job-search/JobDetailSheet.js +255 -0
  205. package/lib/features/job-search/JobDetailSheet.js.map +1 -0
  206. package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
  207. package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
  208. package/lib/features/job-search/JobSearchExperience.js +1324 -0
  209. package/lib/features/job-search/JobSearchExperience.js.map +1 -0
  210. package/lib/features/job-search/JobSearchLocationField.js +231 -0
  211. package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
  212. package/lib/features/job-search/ProfilePanel.js +679 -0
  213. package/lib/features/job-search/ProfilePanel.js.map +1 -0
  214. package/lib/features/job-search/RepliesPanel.js +344 -0
  215. package/lib/features/job-search/RepliesPanel.js.map +1 -0
  216. package/lib/features/job-search/SavedPanel.js +297 -0
  217. package/lib/features/job-search/SavedPanel.js.map +1 -0
  218. package/lib/features/job-search/chat/widgetContent.js +29 -0
  219. package/lib/features/job-search/chat/widgetContent.js.map +1 -0
  220. package/lib/features/job-search/cvText.js +91 -0
  221. package/lib/features/job-search/cvText.js.map +1 -0
  222. package/lib/features/job-search/jobAgentSwipe.js +7 -0
  223. package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
  224. package/lib/features/job-search/jobSearchClient.js +184 -0
  225. package/lib/features/job-search/jobSearchClient.js.map +1 -0
  226. package/lib/features/job-search/jobSearchExec.js +14 -0
  227. package/lib/features/job-search/jobSearchExec.js.map +1 -0
  228. package/lib/features/job-search/jobSearchRuntime.js +50 -0
  229. package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
  230. package/lib/features/job-search/jobSearchTheme.js +44 -0
  231. package/lib/features/job-search/jobSearchTheme.js.map +1 -0
  232. package/lib/features/job-search/savedJobs.js +85 -0
  233. package/lib/features/job-search/savedJobs.js.map +1 -0
  234. package/lib/features/job-search/searchHistory.js +117 -0
  235. package/lib/features/job-search/searchHistory.js.map +1 -0
  236. package/lib/features/job-search/types.js +36 -0
  237. package/lib/features/job-search/types.js.map +1 -0
  238. package/lib/features/job-search/useJobSearchSession.js +558 -0
  239. package/lib/features/job-search/useJobSearchSession.js.map +1 -0
  240. package/lib/features/messaging/ChatComponents.js +529 -0
  241. package/lib/features/messaging/ChatComponents.js.map +1 -0
  242. package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
  243. package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
  244. package/lib/features/messaging/ContactsScreen.js +288 -0
  245. package/lib/features/messaging/ContactsScreen.js.map +1 -0
  246. package/lib/features/messaging/ConversationListScreen.js +147 -0
  247. package/lib/features/messaging/ConversationListScreen.js.map +1 -0
  248. package/lib/features/messaging/MessageActions.js +290 -0
  249. package/lib/features/messaging/MessageActions.js.map +1 -0
  250. package/lib/features/messaging/NativeChatExperience.js +189 -0
  251. package/lib/features/messaging/NativeChatExperience.js.map +1 -0
  252. package/lib/features/messaging/RegistrationScreen.js +11 -14
  253. package/lib/features/messaging/RegistrationScreen.js.map +1 -1
  254. package/lib/features/messaging/ThreadScreen.js +215 -0
  255. package/lib/features/messaging/ThreadScreen.js.map +1 -0
  256. package/lib/features/messaging/chatInviteLink.js +52 -0
  257. package/lib/features/messaging/chatInviteLink.js.map +1 -0
  258. package/lib/features/messaging/chatModel.js +278 -0
  259. package/lib/features/messaging/chatModel.js.map +1 -0
  260. package/lib/features/messaging/chatOperations.js +106 -1
  261. package/lib/features/messaging/chatOperations.js.map +1 -1
  262. package/lib/features/messaging/emojiCatalog.js +60 -0
  263. package/lib/features/messaging/emojiCatalog.js.map +1 -0
  264. package/lib/features/messaging/emojiKeywords.js +1592 -0
  265. package/lib/features/messaging/emojiKeywords.js.map +1 -0
  266. package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
  267. package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
  268. package/lib/features/messaging/phoneNumbers.js +52 -1
  269. package/lib/features/messaging/phoneNumbers.js.map +1 -1
  270. package/lib/features/messaging/sha256.js +68 -0
  271. package/lib/features/messaging/sha256.js.map +1 -0
  272. package/lib/features/messaging/useChatData.js +421 -0
  273. package/lib/features/messaging/useChatData.js.map +1 -0
  274. package/lib/features/messaging/useContactMatches.js +191 -0
  275. package/lib/features/messaging/useContactMatches.js.map +1 -0
  276. package/lib/features/messaging/usePhoneVerification.js +12 -12
  277. package/lib/features/messaging/usePhoneVerification.js.map +1 -1
  278. package/lib/features/messaging/yantraChatOrg.js +8 -3
  279. package/lib/features/messaging/yantraChatOrg.js.map +1 -1
  280. package/lib/features/resume/AnnotateModal.js +100 -0
  281. package/lib/features/resume/AnnotateModal.js.map +1 -0
  282. package/lib/features/resume/AnnotationBar.js +69 -0
  283. package/lib/features/resume/AnnotationBar.js.map +1 -0
  284. package/lib/features/resume/ExportSheet.js +105 -0
  285. package/lib/features/resume/ExportSheet.js.map +1 -0
  286. package/lib/features/resume/ResumeAgentChatPane.js +95 -0
  287. package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
  288. package/lib/features/resume/ResumeEditor.js +676 -0
  289. package/lib/features/resume/ResumeEditor.js.map +1 -0
  290. package/lib/features/resume/ResumeExperience.js +235 -0
  291. package/lib/features/resume/ResumeExperience.js.map +1 -0
  292. package/lib/features/resume/ResumeListPanel.js +262 -0
  293. package/lib/features/resume/ResumeListPanel.js.map +1 -0
  294. package/lib/features/resume/ResumeToolbar.js +236 -0
  295. package/lib/features/resume/ResumeToolbar.js.map +1 -0
  296. package/lib/features/resume/annotations.js +17 -0
  297. package/lib/features/resume/annotations.js.map +1 -0
  298. package/lib/features/resume/documentCss.js +52 -0
  299. package/lib/features/resume/documentCss.js.map +1 -0
  300. package/lib/features/resume/draft.js +89 -0
  301. package/lib/features/resume/draft.js.map +1 -0
  302. package/lib/features/resume/exportResume.js +43 -0
  303. package/lib/features/resume/exportResume.js.map +1 -0
  304. package/lib/features/resume/pickResumePhoto.js +22 -0
  305. package/lib/features/resume/pickResumePhoto.js.map +1 -0
  306. package/lib/features/resume/renderResume.js +121 -0
  307. package/lib/features/resume/renderResume.js.map +1 -0
  308. package/lib/features/resume/resumeClient.js +69 -0
  309. package/lib/features/resume/resumeClient.js.map +1 -0
  310. package/lib/features/resume/resumeExec.js +14 -0
  311. package/lib/features/resume/resumeExec.js.map +1 -0
  312. package/lib/features/resume/resumeIndex.js +244 -0
  313. package/lib/features/resume/resumeIndex.js.map +1 -0
  314. package/lib/features/resume/resumeRuntime.js +50 -0
  315. package/lib/features/resume/resumeRuntime.js.map +1 -0
  316. package/lib/features/resume/resumeTheme.js +34 -0
  317. package/lib/features/resume/resumeTheme.js.map +1 -0
  318. package/lib/features/resume/resumeToolbox.js +49 -0
  319. package/lib/features/resume/resumeToolbox.js.map +1 -0
  320. package/lib/features/resume/templates.js +90 -0
  321. package/lib/features/resume/templates.js.map +1 -0
  322. package/lib/features/resume/types.js +10 -0
  323. package/lib/features/resume/types.js.map +1 -0
  324. package/lib/features/resume/useResumeSession.js +183 -0
  325. package/lib/features/resume/useResumeSession.js.map +1 -0
  326. package/lib/features/shopping/DealsPanel.js +254 -0
  327. package/lib/features/shopping/DealsPanel.js.map +1 -0
  328. package/lib/features/shopping/HistoryPanel.js +147 -0
  329. package/lib/features/shopping/HistoryPanel.js.map +1 -0
  330. package/lib/features/shopping/OrdersPanel.js +157 -0
  331. package/lib/features/shopping/OrdersPanel.js.map +1 -0
  332. package/lib/features/shopping/ProductCard.js +326 -0
  333. package/lib/features/shopping/ProductCard.js.map +1 -0
  334. package/lib/features/shopping/ProductDetailSheet.js +313 -0
  335. package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
  336. package/lib/features/shopping/ProductFilterBar.js +153 -0
  337. package/lib/features/shopping/ProductFilterBar.js.map +1 -0
  338. package/lib/features/shopping/ProductPhoto.js +27 -0
  339. package/lib/features/shopping/ProductPhoto.js.map +1 -0
  340. package/lib/features/shopping/SavedPanel.js +139 -0
  341. package/lib/features/shopping/SavedPanel.js.map +1 -0
  342. package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
  343. package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
  344. package/lib/features/shopping/ShoppingExperience.js +888 -0
  345. package/lib/features/shopping/ShoppingExperience.js.map +1 -0
  346. package/lib/features/shopping/TrendingSections.js +199 -0
  347. package/lib/features/shopping/TrendingSections.js.map +1 -0
  348. package/lib/features/shopping/WatchlistPanel.js +148 -0
  349. package/lib/features/shopping/WatchlistPanel.js.map +1 -0
  350. package/lib/features/shopping/catalog.js +238 -0
  351. package/lib/features/shopping/catalog.js.map +1 -0
  352. package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
  353. package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
  354. package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
  355. package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
  356. package/lib/features/shopping/chat/widgetContent.js +233 -0
  357. package/lib/features/shopping/chat/widgetContent.js.map +1 -0
  358. package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
  359. package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
  360. package/lib/features/shopping/productImage.js +42 -0
  361. package/lib/features/shopping/productImage.js.map +1 -0
  362. package/lib/features/shopping/savedProducts.js +84 -0
  363. package/lib/features/shopping/savedProducts.js.map +1 -0
  364. package/lib/features/shopping/services/catalogActions.js +166 -0
  365. package/lib/features/shopping/services/catalogActions.js.map +1 -0
  366. package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
  367. package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
  368. package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
  369. package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
  370. package/lib/features/shopping/services/productAvailability.js +25 -0
  371. package/lib/features/shopping/services/productAvailability.js.map +1 -0
  372. package/lib/features/shopping/services/productFilters.js +72 -0
  373. package/lib/features/shopping/services/productFilters.js.map +1 -0
  374. package/lib/features/shopping/services/retailerUrl.js +75 -0
  375. package/lib/features/shopping/services/retailerUrl.js.map +1 -0
  376. package/lib/features/shopping/services/shoppingChatReply.js +46 -0
  377. package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
  378. package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
  379. package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
  380. package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
  381. package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
  382. package/lib/features/shopping/shopAgentSwipe.js +7 -0
  383. package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
  384. package/lib/features/shopping/shoppingCart.js +116 -0
  385. package/lib/features/shopping/shoppingCart.js.map +1 -0
  386. package/lib/features/shopping/shoppingExec.js +14 -0
  387. package/lib/features/shopping/shoppingExec.js.map +1 -0
  388. package/lib/features/shopping/shoppingHistoryStore.js +176 -0
  389. package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
  390. package/lib/features/shopping/shoppingRuntime.js +63 -0
  391. package/lib/features/shopping/shoppingRuntime.js.map +1 -0
  392. package/lib/features/shopping/timeAgo.js +14 -0
  393. package/lib/features/shopping/timeAgo.js.map +1 -0
  394. package/lib/features/shopping/useShoppingSearch.js +262 -0
  395. package/lib/features/shopping/useShoppingSearch.js.map +1 -0
  396. package/lib/features/travel/BookHeaderGlow.js +48 -0
  397. package/lib/features/travel/BookHeaderGlow.js.map +1 -0
  398. package/lib/features/travel/BookingsPanel.js +29 -0
  399. package/lib/features/travel/BookingsPanel.js.map +1 -0
  400. package/lib/features/travel/DiscoverPanel.js +155 -0
  401. package/lib/features/travel/DiscoverPanel.js.map +1 -0
  402. package/lib/features/travel/FlightCompareBar.js +86 -0
  403. package/lib/features/travel/FlightCompareBar.js.map +1 -0
  404. package/lib/features/travel/FlightDealsBoard.js +100 -0
  405. package/lib/features/travel/FlightDealsBoard.js.map +1 -0
  406. package/lib/features/travel/HistoryPanel.js +82 -0
  407. package/lib/features/travel/HistoryPanel.js.map +1 -0
  408. package/lib/features/travel/PopularDestinations.js +144 -0
  409. package/lib/features/travel/PopularDestinations.js.map +1 -0
  410. package/lib/features/travel/SavedPanel.js +27 -0
  411. package/lib/features/travel/SavedPanel.js.map +1 -0
  412. package/lib/features/travel/TravelAgentChatPane.js +303 -0
  413. package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
  414. package/lib/features/travel/TravelBookHero.js +425 -0
  415. package/lib/features/travel/TravelBookHero.js.map +1 -0
  416. package/lib/features/travel/TravelDatesField.js +234 -0
  417. package/lib/features/travel/TravelDatesField.js.map +1 -0
  418. package/lib/features/travel/TravelDetailSheet.js +106 -0
  419. package/lib/features/travel/TravelDetailSheet.js.map +1 -0
  420. package/lib/features/travel/TravelExperience.js +624 -0
  421. package/lib/features/travel/TravelExperience.js.map +1 -0
  422. package/lib/features/travel/TravelGuestsField.js +85 -0
  423. package/lib/features/travel/TravelGuestsField.js.map +1 -0
  424. package/lib/features/travel/TravelLanding.js +318 -0
  425. package/lib/features/travel/TravelLanding.js.map +1 -0
  426. package/lib/features/travel/TravelLocationField.js +179 -0
  427. package/lib/features/travel/TravelLocationField.js.map +1 -0
  428. package/lib/features/travel/TravelPropertyCard.js +266 -0
  429. package/lib/features/travel/TravelPropertyCard.js.map +1 -0
  430. package/lib/features/travel/TravelPropertyPhoto.js +22 -0
  431. package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
  432. package/lib/features/travel/TravelRailFlyout.js +79 -0
  433. package/lib/features/travel/TravelRailFlyout.js.map +1 -0
  434. package/lib/features/travel/TravelResultsMap.js +126 -0
  435. package/lib/features/travel/TravelResultsMap.js.map +1 -0
  436. package/lib/features/travel/WorkspacePanel.js +148 -0
  437. package/lib/features/travel/WorkspacePanel.js.map +1 -0
  438. package/lib/features/travel/appNav.js +244 -0
  439. package/lib/features/travel/appNav.js.map +1 -0
  440. package/lib/features/travel/calendarDays.js +50 -0
  441. package/lib/features/travel/calendarDays.js.map +1 -0
  442. package/lib/features/travel/catalog.js +72 -0
  443. package/lib/features/travel/catalog.js.map +1 -0
  444. package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
  445. package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
  446. package/lib/features/travel/chat/widgetContent.js +107 -0
  447. package/lib/features/travel/chat/widgetContent.js.map +1 -0
  448. package/lib/features/travel/flightDeals.js +65 -0
  449. package/lib/features/travel/flightDeals.js.map +1 -0
  450. package/lib/features/travel/mapCoordinates.js +36 -0
  451. package/lib/features/travel/mapCoordinates.js.map +1 -0
  452. package/lib/features/travel/parseTravelIntent.js +303 -0
  453. package/lib/features/travel/parseTravelIntent.js.map +1 -0
  454. package/lib/features/travel/savedStays.js +66 -0
  455. package/lib/features/travel/savedStays.js.map +1 -0
  456. package/lib/features/travel/services/flightDealsBoard.js +111 -0
  457. package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
  458. package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
  459. package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
  460. package/lib/features/travel/services/geocodeLocation.js +79 -0
  461. package/lib/features/travel/services/geocodeLocation.js.map +1 -0
  462. package/lib/features/travel/services/placePredictions.js +113 -0
  463. package/lib/features/travel/services/placePredictions.js.map +1 -0
  464. package/lib/features/travel/services/resolveOriginCity.js +27 -0
  465. package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
  466. package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
  467. package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
  468. package/lib/features/travel/services/travelFlightSearch.js +289 -0
  469. package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
  470. package/lib/features/travel/services/travelPropertySearch.js +377 -0
  471. package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
  472. package/lib/features/travel/travelAgentSwipe.js +7 -0
  473. package/lib/features/travel/travelAgentSwipe.js.map +1 -0
  474. package/lib/features/travel/travelExec.js +14 -0
  475. package/lib/features/travel/travelExec.js.map +1 -0
  476. package/lib/features/travel/travelHistoryStore.js +108 -0
  477. package/lib/features/travel/travelHistoryStore.js.map +1 -0
  478. package/lib/features/travel/travelRuntime.js +62 -0
  479. package/lib/features/travel/travelRuntime.js.map +1 -0
  480. package/lib/features/travel/types.js +9 -0
  481. package/lib/features/travel/types.js.map +1 -0
  482. package/lib/features/travel/useTravelSearch.js +330 -0
  483. package/lib/features/travel/useTravelSearch.js.map +1 -0
  484. package/lib/features/travel/workspaceContent.js +548 -0
  485. package/lib/features/travel/workspaceContent.js.map +1 -0
  486. package/lib/hooks/useCdecliChannel.js +128 -6
  487. package/lib/hooks/useCdecliChannel.js.map +1 -1
  488. package/lib/hooks/useChatApi.js +4 -2
  489. package/lib/hooks/useChatApi.js.map +1 -1
  490. package/lib/hooks/useChatStream.js +77 -63
  491. package/lib/hooks/useChatStream.js.map +1 -1
  492. package/lib/hooks/useHostConnectorCard.js +24 -0
  493. package/lib/hooks/useHostConnectorCard.js.map +1 -0
  494. package/lib/hooks/useObtainSystemToken.js +23 -5
  495. package/lib/hooks/useObtainSystemToken.js.map +1 -1
  496. package/lib/hooks/webViewRetentionPolicy.js +1 -0
  497. package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
  498. package/lib/index.js +1 -1
  499. package/lib/index.js.map +1 -1
  500. package/lib/screens/Chat/index.js +51 -22
  501. package/lib/screens/Chat/index.js.map +1 -1
  502. package/lib/screens/ChatNative/index.js +13 -2
  503. package/lib/screens/ChatNative/index.js.map +1 -1
  504. package/lib/screens/Home/HomeScreen.js +3 -3
  505. package/lib/screens/Home/HomeScreen.js.map +1 -1
  506. package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
  507. package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
  508. package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
  509. package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
  510. package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
  511. package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
  512. package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
  513. package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
  514. package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
  515. package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
  516. package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
  517. package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
  518. package/lib/services/brainQuickReply.js +38 -1
  519. package/lib/services/brainQuickReply.js.map +1 -1
  520. package/lib/state/chatThreadMerge.js +6 -1
  521. package/lib/state/chatThreadMerge.js.map +1 -1
  522. package/package.json +6 -4
@@ -0,0 +1,139 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useMemo}from'react';import {StyleSheet,ScrollView,View,Text,Pressable,Linking}from'react-native';import {productSource,SOURCE_LABELS,formatPrice}from'./catalog.js';import {useCartQty,addToCart}from'./shoppingCart.js';import {useSavedProducts,clearSavedProducts,unsaveProduct}from'./savedProducts.js';import {timeAgo}from'./timeAgo.js';import {ProductPhoto}from'./ProductPhoto.js';function SavedPanel({
2
+ onOpenDetails,
3
+ isDark,
4
+ card,
5
+ border,
6
+ ink,
7
+ muted
8
+ }) {
9
+ const items = useSavedProducts();
10
+ const now = useMemo(() => Date.now(), [items]);
11
+ return /* @__PURE__ */ jsxs(ScrollView, { contentContainerStyle: styles.body, children: [
12
+ /* @__PURE__ */ jsxs(View, { style: styles.head, children: [
13
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, {
14
+ color: ink
15
+ }], children: "Saved" }),
16
+ items.length > 0 ? /* @__PURE__ */ jsx(Pressable, { onPress: clearSavedProducts, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.clear, children: "Clear" }) }) : null
17
+ ] }),
18
+ items.length === 0 ? /* @__PURE__ */ jsx(Text, { style: {
19
+ color: muted
20
+ }, children: "Heart a product on any card to keep it here." }) : items.map((entry) => /* @__PURE__ */ jsx(SavedRow, { product: entry.product, savedAt: entry.ts, now, isDark, card, border, ink, muted, onOpen: () => onOpenDetails(entry.product) }, entry.product.id))
21
+ ] });
22
+ }
23
+ function SavedRow({
24
+ product,
25
+ savedAt,
26
+ now,
27
+ isDark,
28
+ card,
29
+ border,
30
+ ink,
31
+ muted,
32
+ onOpen
33
+ }) {
34
+ const qty = useCartQty(product.id);
35
+ const source = productSource(product);
36
+ return /* @__PURE__ */ jsxs(Pressable, { onPress: onOpen, style: [styles.row, {
37
+ backgroundColor: card,
38
+ borderColor: border
39
+ }], children: [
40
+ /* @__PURE__ */ jsx(ProductPhoto, { product, style: [styles.thumb, {
41
+ backgroundColor: isDark ? "#1e293b" : "#f1f5f9"
42
+ }], contentFit: "cover" }),
43
+ /* @__PURE__ */ jsxs(View, { style: {
44
+ flex: 1,
45
+ gap: 4
46
+ }, children: [
47
+ /* @__PURE__ */ jsxs(Text, { style: [styles.meta, {
48
+ color: muted
49
+ }], children: [
50
+ SOURCE_LABELS[source],
51
+ " \xB7 Saved ",
52
+ timeAgo(savedAt, now)
53
+ ] }),
54
+ /* @__PURE__ */ jsx(Text, { style: [styles.name, {
55
+ color: ink
56
+ }], numberOfLines: 2, children: product.name }),
57
+ /* @__PURE__ */ jsx(Text, { style: [styles.price, {
58
+ color: ink
59
+ }], children: product.price > 0 ? formatPrice(product.price) : "Price varies" }),
60
+ /* @__PURE__ */ jsx(Text, { style: {
61
+ color: muted,
62
+ fontSize: 11
63
+ }, children: "price when saved" }),
64
+ /* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
65
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => addToCart(product), style: styles.addBtn, children: /* @__PURE__ */ jsx(Text, { style: styles.addBtnText, children: qty > 0 ? `Add another \xB7 ${qty}` : "Add" }) }),
66
+ product.url ? /* @__PURE__ */ jsx(Pressable, { onPress: () => void Linking.openURL(product.url), children: /* @__PURE__ */ jsx(Text, { style: {
67
+ color: ink,
68
+ fontWeight: "600",
69
+ fontSize: 12
70
+ }, children: "Open" }) }) : null,
71
+ /* @__PURE__ */ jsx(Pressable, { onPress: () => unsaveProduct(product.id), children: /* @__PURE__ */ jsx(Text, { style: {
72
+ color: "#b91c1c",
73
+ fontWeight: "600",
74
+ fontSize: 12
75
+ }, children: "Remove" }) })
76
+ ] })
77
+ ] })
78
+ ] });
79
+ }
80
+ const styles = StyleSheet.create({
81
+ body: {
82
+ padding: 16,
83
+ gap: 10,
84
+ paddingBottom: 32
85
+ },
86
+ head: {
87
+ flexDirection: "row",
88
+ justifyContent: "space-between",
89
+ alignItems: "center"
90
+ },
91
+ title: {
92
+ fontSize: 17,
93
+ fontWeight: "700"
94
+ },
95
+ clear: {
96
+ fontWeight: "700",
97
+ color: "#b91c1c"
98
+ },
99
+ row: {
100
+ flexDirection: "row",
101
+ gap: 12,
102
+ borderWidth: 1,
103
+ borderRadius: 14,
104
+ padding: 10
105
+ },
106
+ thumb: {
107
+ width: 64,
108
+ height: 64,
109
+ borderRadius: 10
110
+ },
111
+ meta: {
112
+ fontSize: 11
113
+ },
114
+ name: {
115
+ fontSize: 14,
116
+ fontWeight: "600"
117
+ },
118
+ price: {
119
+ fontSize: 15,
120
+ fontWeight: "800"
121
+ },
122
+ actions: {
123
+ flexDirection: "row",
124
+ alignItems: "center",
125
+ gap: 12,
126
+ marginTop: 4
127
+ },
128
+ addBtn: {
129
+ backgroundColor: "#0b1220",
130
+ borderRadius: 8,
131
+ paddingHorizontal: 10,
132
+ paddingVertical: 5
133
+ },
134
+ addBtnText: {
135
+ color: "#fff",
136
+ fontSize: 12,
137
+ fontWeight: "700"
138
+ }
139
+ });export{SavedPanel};//# sourceMappingURL=SavedPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavedPanel.js","sources":["../../../src/features/shopping/SavedPanel.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Linking, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { formatPrice, SOURCE_LABELS, productSource, type Product } from './catalog';\nimport { addToCart, useCartQty } from './shoppingCart';\nimport { clearSavedProducts, unsaveProduct, useSavedProducts } from './savedProducts';\nimport { timeAgo } from './timeAgo';\nimport { ProductPhoto } from './ProductPhoto';\n\nexport function SavedPanel({\n onOpenDetails,\n isDark,\n card,\n border,\n ink,\n muted,\n}: {\n onOpenDetails: (product: Product) => void;\n isDark: boolean;\n card: string;\n border: string;\n ink: string;\n muted: string;\n}) {\n const items = useSavedProducts();\n const now = useMemo(() => Date.now(), [items]);\n\n return (\n <ScrollView contentContainerStyle={styles.body}>\n <View style={styles.head}>\n <Text style={[styles.title, { color: ink }]}>Saved</Text>\n {items.length > 0 ? (\n <Pressable onPress={clearSavedProducts} accessibilityRole=\"button\">\n <Text style={styles.clear}>Clear</Text>\n </Pressable>\n ) : null}\n </View>\n {items.length === 0 ? (\n <Text style={{ color: muted }}>Heart a product on any card to keep it here.</Text>\n ) : (\n items.map((entry) => (\n <SavedRow\n key={entry.product.id}\n product={entry.product}\n savedAt={entry.ts}\n now={now}\n isDark={isDark}\n card={card}\n border={border}\n ink={ink}\n muted={muted}\n onOpen={() => onOpenDetails(entry.product)}\n />\n ))\n )}\n </ScrollView>\n );\n}\n\nfunction SavedRow({\n product,\n savedAt,\n now,\n isDark,\n card,\n border,\n ink,\n muted,\n onOpen,\n}: {\n product: Product;\n savedAt: number;\n now: number;\n isDark: boolean;\n card: string;\n border: string;\n ink: string;\n muted: string;\n onOpen: () => void;\n}) {\n const qty = useCartQty(product.id);\n const source = productSource(product);\n return (\n <Pressable onPress={onOpen} style={[styles.row, { backgroundColor: card, borderColor: border }]}>\n <ProductPhoto\n product={product}\n style={[styles.thumb, { backgroundColor: isDark ? '#1e293b' : '#f1f5f9' }]}\n contentFit=\"cover\"\n />\n <View style={{ flex: 1, gap: 4 }}>\n <Text style={[styles.meta, { color: muted }]}>\n {SOURCE_LABELS[source]} · Saved {timeAgo(savedAt, now)}\n </Text>\n <Text style={[styles.name, { color: ink }]} numberOfLines={2}>\n {product.name}\n </Text>\n <Text style={[styles.price, { color: ink }]}>\n {product.price > 0 ? formatPrice(product.price) : 'Price varies'}\n </Text>\n <Text style={{ color: muted, fontSize: 11 }}>price when saved</Text>\n <View style={styles.actions}>\n <Pressable onPress={() => addToCart(product)} style={styles.addBtn}>\n <Text style={styles.addBtnText}>{qty > 0 ? `Add another · ${qty}` : 'Add'}</Text>\n </Pressable>\n {product.url ? (\n <Pressable onPress={() => void Linking.openURL(product.url!)}>\n <Text style={{ color: ink, fontWeight: '600', fontSize: 12 }}>Open</Text>\n </Pressable>\n ) : null}\n <Pressable onPress={() => unsaveProduct(product.id)}>\n <Text style={{ color: '#b91c1c', fontWeight: '600', fontSize: 12 }}>Remove</Text>\n </Pressable>\n </View>\n </View>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n body: { padding: 16, gap: 10, paddingBottom: 32 },\n head: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' },\n title: { fontSize: 17, fontWeight: '700' },\n clear: { fontWeight: '700', color: '#b91c1c' },\n row: { flexDirection: 'row', gap: 12, borderWidth: 1, borderRadius: 14, padding: 10 },\n thumb: { width: 64, height: 64, borderRadius: 10 },\n meta: { fontSize: 11 },\n name: { fontSize: 14, fontWeight: '600' },\n price: { fontSize: 15, fontWeight: '800' },\n actions: { flexDirection: 'row', alignItems: 'center', gap: 12, marginTop: 4 },\n addBtn: { backgroundColor: '#0b1220', borderRadius: 8, paddingHorizontal: 10, paddingVertical: 5 },\n addBtnText: { color: '#fff', fontSize: 12, fontWeight: '700' },\n});\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,436 @@
1
+ import {jsx}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {NativeAgentChat}from'../agent-chat/NativeAgentChat.js';import {departmentBadge,isProductSource}from'./catalog.js';import {ShoppingChatResultCard}from'./chat/ShoppingChatResultCard.js';import {extractShoppingAttachment,extractProductQueryFromAssistant,visibleAssistantContent,shouldUseHostLane,shouldRunNativeShopSearch,isGenericProductFindAsk,isVisualIdentifyQuery,isShoppingConversation,buildShoppingWidgetMessage}from'./chat/widgetContent.js';import {searchingLead,splitReplyChunks,delayMs}from'./chat/streamAssistantReply.js';import {parsePriceCheckStop,parsePriceCheckIntent}from'./services/parsePriceCheckIntent.js';import {SHOPPING_AGENT_FALLBACK,replyToNonShoppingTurn}from'./services/shoppingChatReply.js';import {classifyShoppingViaBrain}from'../../services/brainQuickReply.js';var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const STREAM_TICK_MS = 16;
21
+ function productsFromAttachment(attachment) {
22
+ const dept = departmentBadge();
23
+ return attachment.properties.map((item, index) => {
24
+ var _a;
25
+ return __spreadValues(__spreadValues(__spreadValues(__spreadValues({
26
+ id: (_a = item.id) != null ? _a : `attach-${index}`,
27
+ name: item.title,
28
+ departmentId: dept.id,
29
+ price: typeof item.price === "number" ? item.price : 0,
30
+ rating: typeof item.rating === "number" ? item.rating : 0,
31
+ reviews: typeof item.reviews === "number" ? item.reviews : 0,
32
+ icon: dept.icon,
33
+ accent: dept.accent
34
+ }, item.imageUrl ? {
35
+ imageUrl: item.imageUrl
36
+ } : {}), item.url ? {
37
+ url: item.url
38
+ } : {}), item.source && isProductSource(item.source) ? {
39
+ source: item.source
40
+ } : {}), typeof item.inStock === "boolean" ? {
41
+ inStock: item.inStock
42
+ } : {});
43
+ });
44
+ }
45
+ function priceMonitorReply(kind, query, targetPrice) {
46
+ if (kind === "stop") {
47
+ return "Price checks on this phone use the Watchlist tab. Open Watchlist and refresh \u2014 live browser checks still run on Computer, not here.";
48
+ }
49
+ const target = typeof targetPrice === "number" && targetPrice > 0 ? ` (alert below $${Math.round(targetPrice)})` : "";
50
+ const named = query.trim() ? `I can watch **${query.trim()}**${target}.` : `I can watch prices for you${target}.`;
51
+ return `${named} Search the product first, open it, then tap **Watch this price**. Live hourly checks run on Computer; this phone shows the indexed watchlist.`;
52
+ }
53
+ function ShoppingAgentChatPane({
54
+ visible,
55
+ onClose,
56
+ hostChat,
57
+ applyFromChat,
58
+ products,
59
+ onViewProducts,
60
+ onOpenProduct,
61
+ isDark,
62
+ ink,
63
+ muted,
64
+ screen,
65
+ border,
66
+ card,
67
+ seedTurn = null,
68
+ uiSearchTurn = null
69
+ }) {
70
+ var _a;
71
+ const [localMessages, setLocalMessages] = useState([]);
72
+ const [busy, setBusy] = useState(false);
73
+ const [cardAttachment, setCardAttachment] = useState(null);
74
+ const [cardProducts, setCardProducts] = useState([]);
75
+ const [shopStream, setShopStream] = useState(null);
76
+ const inFlight = useRef(false);
77
+ const pendingVisionShop = useRef(false);
78
+ const wasHostBusy = useRef(false);
79
+ const seededKey = useRef(null);
80
+ const streamGen = useRef(0);
81
+ const liveRef = useRef("");
82
+ const pumpChain = useRef(Promise.resolve());
83
+ const committedShopRef = useRef(false);
84
+ const resultPumpStartedRef = useRef(false);
85
+ const latestResultRef = useRef(null);
86
+ const mirroredUiTurnRef = useRef(null);
87
+ const hostMessages = (_a = hostChat == null ? void 0 : hostChat.messages) != null ? _a : [];
88
+ const shopTurns = localMessages.filter((m) => m.id.startsWith("shop-"));
89
+ const messages = hostMessages.length > 0 ? [...hostMessages, ...shopTurns] : localMessages;
90
+ const pumpTo = async (gen, target) => {
91
+ if (streamGen.current !== gen) return;
92
+ let current = liveRef.current;
93
+ if (target === current) return;
94
+ if (!target.startsWith(current)) {
95
+ current = "";
96
+ liveRef.current = "";
97
+ }
98
+ const rest = target.slice(current.length);
99
+ for (const chunk of splitReplyChunks(rest)) {
100
+ if (streamGen.current !== gen) return;
101
+ liveRef.current += chunk;
102
+ setShopStream(liveRef.current);
103
+ await delayMs(STREAM_TICK_MS);
104
+ }
105
+ };
106
+ const enqueuePump = (gen, target) => {
107
+ pumpChain.current = pumpChain.current.then(() => pumpTo(gen, target)).catch(() => void 0);
108
+ return pumpChain.current;
109
+ };
110
+ const bodyFromResult = (result) => {
111
+ const raw = result.products.length > 0 ? buildShoppingWidgetMessage(result.products, result.query) : result.error || SHOPPING_AGENT_FALLBACK;
112
+ const shopBody = visibleAssistantContent(raw) || result.error || SHOPPING_AGENT_FALLBACK;
113
+ return {
114
+ shopBody,
115
+ attachment: extractShoppingAttachment(raw)
116
+ };
117
+ };
118
+ const applyShopCard = (result) => {
119
+ const {
120
+ shopBody,
121
+ attachment
122
+ } = bodyFromResult(result);
123
+ if (attachment) {
124
+ setCardAttachment(attachment);
125
+ setCardProducts(productsFromAttachment(attachment));
126
+ }
127
+ if (committedShopRef.current) {
128
+ setLocalMessages((prev) => prev.map((row) => row.id.startsWith("shop-") ? __spreadProps(__spreadValues({}, row), {
129
+ content: shopBody
130
+ }) : row));
131
+ }
132
+ return shopBody;
133
+ };
134
+ const commitShopTurn = (gen, shopBody) => {
135
+ if (streamGen.current !== gen || committedShopRef.current) return;
136
+ committedShopRef.current = true;
137
+ setLocalMessages((prev) => [...prev.filter((row) => !row.id.startsWith("shop-")), {
138
+ id: `shop-${Date.now()}`,
139
+ role: "assistant",
140
+ content: shopBody
141
+ }]);
142
+ setShopStream(null);
143
+ liveRef.current = "";
144
+ };
145
+ const replyLocalAssistant = async (gen, body) => {
146
+ await enqueuePump(gen, body);
147
+ if (streamGen.current !== gen) return;
148
+ setLocalMessages((prev) => [...prev, {
149
+ id: `a-${Date.now()}`,
150
+ role: "assistant",
151
+ content: body
152
+ }]);
153
+ setShopStream(null);
154
+ liveRef.current = "";
155
+ };
156
+ const handOffToAgent = (gen, text, files, userId) => {
157
+ if (!(hostChat == null ? void 0 : hostChat.connected)) return false;
158
+ if (userId) setLocalMessages((prev) => prev.filter((m) => m.id !== userId));
159
+ streamGen.current = gen;
160
+ setShopStream(null);
161
+ liveRef.current = "";
162
+ hostChat.send(text, files);
163
+ return true;
164
+ };
165
+ const replyConversation = async (gen, text) => {
166
+ const history = messages.filter((m) => m.role === "user" || m.role === "assistant").map((m) => ({
167
+ role: m.role,
168
+ content: m.content
169
+ }));
170
+ const brain = await replyToNonShoppingTurn(text, history);
171
+ await replyLocalAssistant(gen, brain || SHOPPING_AGENT_FALLBACK);
172
+ };
173
+ const runNativeShop = (query, showLocalTurns) => {
174
+ const gen = ++streamGen.current;
175
+ committedShopRef.current = false;
176
+ resultPumpStartedRef.current = false;
177
+ latestResultRef.current = null;
178
+ liveRef.current = searchingLead(query);
179
+ setBusy(true);
180
+ setCardAttachment(null);
181
+ setCardProducts([]);
182
+ setShopStream(liveRef.current);
183
+ void applyFromChat(query, (partial) => {
184
+ if (streamGen.current !== gen) return;
185
+ if (!partial.products.length && !partial.error) return;
186
+ latestResultRef.current = partial;
187
+ const shopBody = applyShopCard(partial);
188
+ if (committedShopRef.current || resultPumpStartedRef.current) return;
189
+ resultPumpStartedRef.current = true;
190
+ void enqueuePump(gen, shopBody);
191
+ }).then(async (result) => {
192
+ if (streamGen.current !== gen) return;
193
+ if (result.conversation) {
194
+ if (showLocalTurns) await replyConversation(gen, query);
195
+ return;
196
+ }
197
+ if (!resultPumpStartedRef.current) {
198
+ resultPumpStartedRef.current = true;
199
+ await enqueuePump(gen, applyShopCard(result));
200
+ } else {
201
+ await pumpChain.current;
202
+ }
203
+ if (streamGen.current !== gen) return;
204
+ const latest = latestResultRef.current || result;
205
+ commitShopTurn(gen, liveRef.current || bodyFromResult(latest).shopBody);
206
+ applyShopCard(latest);
207
+ }).catch(async (err) => {
208
+ if (streamGen.current !== gen || !showLocalTurns) return;
209
+ const message = err instanceof Error ? err.message : "Shopping search failed.";
210
+ await replyLocalAssistant(gen, message);
211
+ }).finally(() => {
212
+ if (streamGen.current !== gen) return;
213
+ inFlight.current = false;
214
+ setBusy(false);
215
+ });
216
+ };
217
+ useEffect(() => {
218
+ var _a2, _b;
219
+ const hostBusy = Boolean(hostChat == null ? void 0 : hostChat.busy);
220
+ const finished = wasHostBusy.current && !hostBusy;
221
+ wasHostBusy.current = hostBusy;
222
+ if (!finished || !pendingVisionShop.current) return;
223
+ const last = [...hostMessages].reverse().find((m) => m.role === "assistant");
224
+ const text = `${(_a2 = last == null ? void 0 : last.content) != null ? _a2 : ""}
225
+ ${(_b = hostChat == null ? void 0 : hostChat.streaming) != null ? _b : ""}`;
226
+ const widget = extractShoppingAttachment(text);
227
+ if (widget) {
228
+ setCardAttachment(widget);
229
+ pendingVisionShop.current = false;
230
+ return;
231
+ }
232
+ const query = extractProductQueryFromAssistant(text);
233
+ if (!query) {
234
+ pendingVisionShop.current = false;
235
+ return;
236
+ }
237
+ pendingVisionShop.current = false;
238
+ runNativeShop(query, false);
239
+ }, [hostChat == null ? void 0 : hostChat.busy, hostMessages, hostChat == null ? void 0 : hostChat.streaming]);
240
+ useEffect(() => {
241
+ var _a2, _b, _c, _d;
242
+ if (!uiSearchTurn || !visible) return;
243
+ if (((_a2 = mirroredUiTurnRef.current) == null ? void 0 : _a2.id) === uiSearchTurn.id && mirroredUiTurnRef.current.phase === uiSearchTurn.status) {
244
+ return;
245
+ }
246
+ mirroredUiTurnRef.current = {
247
+ id: uiSearchTurn.id,
248
+ phase: uiSearchTurn.status
249
+ };
250
+ if (uiSearchTurn.status === "running") {
251
+ streamGen.current += 1;
252
+ setShopStream(null);
253
+ liveRef.current = "";
254
+ setCardAttachment(null);
255
+ setCardProducts([]);
256
+ setBusy(true);
257
+ setLocalMessages((prev) => [...prev.filter((m) => !m.id.startsWith("ui-")), {
258
+ id: `ui-u-${uiSearchTurn.id}`,
259
+ role: "user",
260
+ content: uiSearchTurn.query,
261
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
262
+ }]);
263
+ return;
264
+ }
265
+ setBusy(false);
266
+ const raw = (_b = uiSearchTurn.messageContent) != null ? _b : "";
267
+ const visibleProse = visibleAssistantContent(raw) || raw;
268
+ if (visibleProse.trim()) {
269
+ setLocalMessages((prev) => [...prev.filter((m) => m.id !== `ui-a-${uiSearchTurn.id}`), {
270
+ id: `ui-a-${uiSearchTurn.id}`,
271
+ role: "assistant",
272
+ content: visibleProse,
273
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
274
+ }]);
275
+ }
276
+ if ((_d = (_c = uiSearchTurn.attachment) == null ? void 0 : _c.properties) == null ? void 0 : _d.length) {
277
+ setCardAttachment(uiSearchTurn.attachment);
278
+ setCardProducts(productsFromAttachment(uiSearchTurn.attachment));
279
+ }
280
+ }, [uiSearchTurn, visible]);
281
+ const send = (text, files) => {
282
+ var _a2;
283
+ const trimmed = text.trim();
284
+ if (!trimmed && !(files == null ? void 0 : files.length)) return;
285
+ streamGen.current += 1;
286
+ setShopStream(null);
287
+ inFlight.current = true;
288
+ const fileCount = (_a2 = files == null ? void 0 : files.length) != null ? _a2 : 0;
289
+ const useHost = Boolean(hostChat) && shouldUseHostLane(trimmed, fileCount);
290
+ const fillShop = shouldRunNativeShopSearch(trimmed);
291
+ if (useHost && hostChat) {
292
+ if (!hostChat.connected) {
293
+ setLocalMessages((prev) => [...prev, __spreadValues({
294
+ id: `u-${Date.now()}`,
295
+ role: "user",
296
+ content: trimmed
297
+ }, (files == null ? void 0 : files.length) ? {
298
+ attachments: files
299
+ } : {}), {
300
+ id: `a-${Date.now()}`,
301
+ role: "assistant",
302
+ content: hostChat.error || "CDeCLI is not connected yet. Check gateway status in the header, then send the image again."
303
+ }]);
304
+ inFlight.current = false;
305
+ return;
306
+ }
307
+ hostChat.send(trimmed, files);
308
+ setLocalMessages((prev) => prev.filter((m) => !m.id.startsWith("shop-")));
309
+ if (fillShop && isGenericProductFindAsk(trimmed)) {
310
+ pendingVisionShop.current = true;
311
+ inFlight.current = false;
312
+ return;
313
+ }
314
+ if (fillShop) {
315
+ runNativeShop(trimmed, false);
316
+ return;
317
+ }
318
+ inFlight.current = false;
319
+ return;
320
+ }
321
+ const user = __spreadValues({
322
+ id: `u-${Date.now()}`,
323
+ role: "user",
324
+ content: trimmed,
325
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
326
+ }, (files == null ? void 0 : files.length) ? {
327
+ attachments: files
328
+ } : {});
329
+ setLocalMessages((prev) => [...prev, user]);
330
+ setCardAttachment(null);
331
+ setCardProducts([]);
332
+ if (fileCount > 0 || isVisualIdentifyQuery(trimmed)) {
333
+ setLocalMessages((prev) => [...prev, {
334
+ id: `a-${Date.now()}`,
335
+ role: "assistant",
336
+ content: "I received the image, but this shop session is not connected to the agent yet. Connect CDeCLI in the header and send again \u2014 same as web Shopping Agent."
337
+ }]);
338
+ inFlight.current = false;
339
+ return;
340
+ }
341
+ const gen = ++streamGen.current;
342
+ setBusy(true);
343
+ void (async () => {
344
+ try {
345
+ if (parsePriceCheckStop(trimmed)) {
346
+ await replyLocalAssistant(gen, priceMonitorReply("stop", ""));
347
+ return;
348
+ }
349
+ const priceCheck = parsePriceCheckIntent(trimmed);
350
+ if (priceCheck) {
351
+ await replyLocalAssistant(gen, priceMonitorReply("watch", priceCheck.query, priceCheck.targetPrice));
352
+ return;
353
+ }
354
+ let brainQuery = null;
355
+ try {
356
+ const verdict = await classifyShoppingViaBrain(trimmed, {
357
+ timeoutMs: 2500
358
+ });
359
+ if (verdict.status === "ok" && verdict.monitor === "stop") {
360
+ await replyLocalAssistant(gen, priceMonitorReply("stop", ""));
361
+ return;
362
+ }
363
+ if (verdict.status === "ok" && verdict.monitor === "watch") {
364
+ await replyLocalAssistant(gen, priceMonitorReply("watch", verdict.query, verdict.targetPrice));
365
+ return;
366
+ }
367
+ if (isShoppingConversation(trimmed)) {
368
+ await replyConversation(gen, trimmed);
369
+ return;
370
+ }
371
+ if (verdict.status === "declined") {
372
+ if (handOffToAgent(gen, trimmed, files, user.id)) return;
373
+ await replyConversation(gen, trimmed);
374
+ return;
375
+ }
376
+ if (verdict.status === "ok" && verdict.query) brainQuery = verdict.query;
377
+ } catch (e) {
378
+ if (isShoppingConversation(trimmed)) {
379
+ await replyConversation(gen, trimmed);
380
+ return;
381
+ }
382
+ }
383
+ if (isShoppingConversation(trimmed)) {
384
+ await replyConversation(gen, trimmed);
385
+ return;
386
+ }
387
+ inFlight.current = false;
388
+ runNativeShop(brainQuery || trimmed, true);
389
+ } finally {
390
+ if (streamGen.current === gen) {
391
+ inFlight.current = false;
392
+ setBusy(false);
393
+ }
394
+ }
395
+ })();
396
+ };
397
+ useEffect(() => {
398
+ inFlight.current = false;
399
+ streamGen.current += 1;
400
+ setShopStream(null);
401
+ }, [visible]);
402
+ useEffect(() => {
403
+ var _a2;
404
+ if (!visible || !seedTurn) return;
405
+ const key = `${seedTurn.text}\0${((_a2 = seedTurn.files) != null ? _a2 : []).map((file) => {
406
+ var _a3, _b;
407
+ return (_b = (_a3 = file.id) != null ? _a3 : file.name) != null ? _b : "";
408
+ }).join(",")}`;
409
+ if (seededKey.current === key) return;
410
+ seededKey.current = key;
411
+ const timer = setTimeout(() => send(seedTurn.text, seedTurn.files), 50);
412
+ return () => clearTimeout(timer);
413
+ }, [visible, seedTurn]);
414
+ return /* @__PURE__ */ jsx(NativeAgentChat, { title: "Shopping Agent", visible, onClose, onSwipeLeft: onClose, messages, onSend: send, renderConnectorCard: hostChat == null ? void 0 : hostChat.renderConnectorCard, onClear: () => {
415
+ var _a2;
416
+ streamGen.current += 1;
417
+ setLocalMessages([]);
418
+ setCardAttachment(null);
419
+ setCardProducts([]);
420
+ setShopStream(null);
421
+ pendingVisionShop.current = false;
422
+ (_a2 = hostChat == null ? void 0 : hostChat.clear) == null ? void 0 : _a2.call(hostChat);
423
+ }, busy: busy || Boolean(hostChat == null ? void 0 : hostChat.busy), streamingContent: shopStream || (hostChat == null ? void 0 : hostChat.streaming), error: hostChat == null ? void 0 : hostChat.error, placeholder: 'What are you looking for? e.g. "running shoes under $120"', emptyTitle: "What are you shopping for?", emptyBody: "Ask for a product in plain language, or send a photo \u2014 I'll look at it the same way as web Shop.", suggestions: [{
424
+ id: "shoes",
425
+ label: "Running shoes under $120",
426
+ prompt: "running shoes under $120"
427
+ }, {
428
+ id: "laptop",
429
+ label: "Apple laptop",
430
+ prompt: "apple laptop"
431
+ }, {
432
+ id: "iphone",
433
+ label: "iPhone 17",
434
+ prompt: "buy iPhone 17"
435
+ }], isDark, ink, muted, screen, border, composerLead: cardAttachment ? /* @__PURE__ */ jsx(ShoppingChatResultCard, { attachment: cardAttachment, products: [...products, ...cardProducts], ink, muted, border, card, onViewProducts, onOpenItem: onOpenProduct }) : null });
436
+ }export{ShoppingAgentChatPane};//# sourceMappingURL=ShoppingAgentChatPane.js.map