@adminide-stack/yantra-mobile 12.0.69-alpha.8 → 12.0.69

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 +164 -0
  170. package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
  171. package/lib/features/chat/ConnectorConnectPrompt.js +254 -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 +179 -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,303 @@
1
+ import {TravelType}from'./types.js';const FLIGHT_KEYWORD_RE = /\b(flight|flights|fly|flying|airport|airfare)\b/i;
2
+ const CAR_KEYWORD_RE = /\b(car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft)\b/i;
3
+ const TRAVEL_KEYWORDS = /\b(hotel|hotels|stay|stays|staying|room|rooms|accommodation|airbnb|flight|flights|fly|flying|airport|car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft|travel|trip|vacation|getaway|booking|book|places?|find|home|homes)\b/i;
4
+ function compactPlace(raw) {
5
+ return raw.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z]/g, "");
6
+ }
7
+ function editDistance(a, b) {
8
+ if (a === b) return 0;
9
+ if (!a.length) return b.length;
10
+ if (!b.length) return a.length;
11
+ const row = Array.from({
12
+ length: b.length + 1
13
+ }, (_, i) => i);
14
+ for (let i = 1; i <= a.length; i++) {
15
+ let prev = i - 1;
16
+ row[0] = i;
17
+ for (let j = 1; j <= b.length; j++) {
18
+ const cur = row[j];
19
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
20
+ row[j] = Math.min(row[j] + 1, row[j - 1] + 1, prev + cost);
21
+ prev = cur;
22
+ }
23
+ }
24
+ return row[b.length];
25
+ }
26
+ const PLACE_ALIASES = {
27
+ newyork: "New York, NY",
28
+ nyc: "New York, NY",
29
+ ny: "New York, NY",
30
+ losangeles: "Los Angeles, CA",
31
+ la: "Los Angeles, CA",
32
+ sanfrancisco: "San Francisco, CA",
33
+ sf: "San Francisco, CA",
34
+ maxico: "Mexico City, Mexico",
35
+ mexico: "Mexico City, Mexico",
36
+ mexicocity: "Mexico City, Mexico",
37
+ cancun: "Cancun, Mexico",
38
+ london: "London Heathrow, UK",
39
+ paris: "Paris, France",
40
+ tokyo: "Tokyo Narita, Japan",
41
+ dubai: "Dubai, UAE"
42
+ };
43
+ function canonicalizePlace(raw) {
44
+ var _a;
45
+ const trimmed = cleanLocation(raw);
46
+ if (!trimmed) return "";
47
+ const compact = compactPlace(trimmed);
48
+ if (PLACE_ALIASES[compact]) return PLACE_ALIASES[compact];
49
+ if (/^[A-Za-z]{3}$/.test(trimmed)) {
50
+ const code2 = trimmed.toUpperCase();
51
+ if (AIRPORT_CODES[code2]) return AIRPORT_CODES[code2];
52
+ if (/^[A-Z]{3}$/.test(trimmed)) return code2;
53
+ }
54
+ let bestAlias = "";
55
+ let bestDist = 2;
56
+ for (const [alias, label] of Object.entries(PLACE_ALIASES)) {
57
+ if (Math.abs(alias.length - compact.length) > 2) continue;
58
+ const dist = editDistance(compact, alias);
59
+ if (dist < bestDist || dist === bestDist && alias.length > compactPlace(bestAlias).length) {
60
+ bestDist = dist;
61
+ bestAlias = label;
62
+ }
63
+ }
64
+ if (bestAlias && bestDist <= 1) return bestAlias;
65
+ const code = trimmed.toUpperCase();
66
+ if (AIRPORT_CODES[code]) return AIRPORT_CODES[code];
67
+ let bestCity = "";
68
+ let bestCityDist = 2;
69
+ for (const label of Object.values(AIRPORT_CODES)) {
70
+ const city = compactPlace((_a = label.split(",")[0]) != null ? _a : "");
71
+ if (!city) continue;
72
+ if (city === compact) return label;
73
+ if (Math.abs(city.length - compact.length) > 2) continue;
74
+ const dist = editDistance(compact, city);
75
+ if (dist <= 1 && dist < bestCityDist) {
76
+ bestCityDist = dist;
77
+ bestCity = label;
78
+ }
79
+ }
80
+ return bestCity || titleCaseCity(trimmed);
81
+ }
82
+ const AIRPORT_CODES = {
83
+ ATL: "Atlanta, GA",
84
+ AUS: "Austin, TX",
85
+ BNA: "Nashville, TN",
86
+ BOS: "Boston, MA",
87
+ BWI: "Baltimore, MD",
88
+ CLT: "Charlotte, NC",
89
+ DCA: "Washington, DC",
90
+ DEN: "Denver, CO",
91
+ DFW: "Dallas, TX",
92
+ DTW: "Detroit, MI",
93
+ EWR: "Newark, NJ",
94
+ FLL: "Fort Lauderdale, FL",
95
+ HNL: "Honolulu, HI",
96
+ IAD: "Washington Dulles, DC",
97
+ IAH: "Houston, TX",
98
+ JFK: "New York, NY",
99
+ LAS: "Las Vegas, NV",
100
+ LAX: "Los Angeles, CA",
101
+ LGA: "New York LaGuardia, NY",
102
+ MCO: "Orlando, FL",
103
+ MDW: "Chicago Midway, IL",
104
+ MIA: "Miami, FL",
105
+ MSP: "Minneapolis, MN",
106
+ MSY: "New Orleans, LA",
107
+ OAK: "Oakland, CA",
108
+ ORD: "Chicago, IL",
109
+ PDX: "Portland, OR",
110
+ PHL: "Philadelphia, PA",
111
+ PHX: "Phoenix, AZ",
112
+ PIT: "Pittsburgh, PA",
113
+ RDU: "Raleigh, NC",
114
+ SAN: "San Diego, CA",
115
+ SAT: "San Antonio, TX",
116
+ SEA: "Seattle, WA",
117
+ SFO: "San Francisco, CA",
118
+ SJC: "San Jose, CA",
119
+ SLC: "Salt Lake City, UT",
120
+ STL: "St Louis, MO",
121
+ TPA: "Tampa, FL",
122
+ YYZ: "Toronto, ON",
123
+ YVR: "Vancouver, BC",
124
+ YUL: "Montreal, QC",
125
+ MEX: "Mexico City, Mexico",
126
+ CUN: "Cancun, Mexico",
127
+ LHR: "London Heathrow, UK",
128
+ LGW: "London Gatwick, UK",
129
+ STN: "London Stansted, UK",
130
+ MAN: "Manchester, UK",
131
+ EDI: "Edinburgh, UK",
132
+ DUB: "Dublin, Ireland",
133
+ CDG: "Paris, France",
134
+ AMS: "Amsterdam, Netherlands",
135
+ FRA: "Frankfurt, Germany",
136
+ MUC: "Munich, Germany",
137
+ BER: "Berlin, Germany",
138
+ ZRH: "Zurich, Switzerland",
139
+ MAD: "Madrid, Spain",
140
+ BCN: "Barcelona, Spain",
141
+ LIS: "Lisbon, Portugal",
142
+ FCO: "Rome, Italy",
143
+ MXP: "Milan, Italy",
144
+ DXB: "Dubai, UAE",
145
+ DEL: "Delhi, India",
146
+ BOM: "Mumbai, India",
147
+ BLR: "Bengaluru, India",
148
+ SIN: "Singapore",
149
+ BKK: "Bangkok, Thailand",
150
+ HKG: "Hong Kong",
151
+ NRT: "Tokyo Narita, Japan",
152
+ HND: "Tokyo Haneda, Japan",
153
+ ICN: "Seoul, South Korea",
154
+ SYD: "Sydney, Australia",
155
+ MEL: "Melbourne, Australia",
156
+ GRU: "Sao Paulo, Brazil"
157
+ };
158
+ function isCompleteTravelIntent(intent) {
159
+ var _a, _b, _c, _d;
160
+ if (intent.travelType === TravelType.FLIGHTS) {
161
+ return Boolean(((_a = intent.pickupLocation) == null ? void 0 : _a.trim()) && ((_b = intent.dropoffLocation) == null ? void 0 : _b.trim()));
162
+ }
163
+ if (intent.travelType === TravelType.CARS) {
164
+ return Boolean((_c = intent.pickupLocation) == null ? void 0 : _c.trim());
165
+ }
166
+ return Boolean((_d = intent.location) == null ? void 0 : _d.trim());
167
+ }
168
+ function parseGuestCount(text) {
169
+ if (/\bcouple\b/i.test(text)) return 2;
170
+ if (/\bfamily\b/i.test(text)) return 4;
171
+ const match = text.match(/(\d+)\s*(guests?|people|persons?|adults?|travelers?|travellers?)/i);
172
+ if (!match) return void 0;
173
+ const n = parseInt(match[1], 10);
174
+ return Number.isFinite(n) && n > 0 ? n : void 0;
175
+ }
176
+ function addDays(date, days) {
177
+ const next = new Date(date);
178
+ next.setDate(next.getDate() + days);
179
+ return next;
180
+ }
181
+ function parseIsoDate(token) {
182
+ const match = token.trim().match(/^(\d{4})-(\d{2})-(\d{2})$/);
183
+ if (!match) return null;
184
+ const d = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));
185
+ return Number.isNaN(d.getTime()) ? null : d;
186
+ }
187
+ function parseDatesFromText(text) {
188
+ var _a, _b;
189
+ const isoRange = text.match(/\b(\d{4}-\d{2}-\d{2})\s*(?:to|-)\s*(\d{4}-\d{2}-\d{2})\b/);
190
+ if (isoRange) {
191
+ const start = parseIsoDate(isoRange[1]);
192
+ const end = parseIsoDate(isoRange[2]);
193
+ if (start && end && end >= start) return [start, end];
194
+ }
195
+ const nightsMatch = text.match(/(\d+)\s+nights?\b/i);
196
+ if (nightsMatch) {
197
+ const nights = parseInt(nightsMatch[1], 10);
198
+ const start = /* @__PURE__ */ new Date();
199
+ return [start, addDays(start, nights)];
200
+ }
201
+ const weeksMatch = text.match(/(?:for\s+)?(?:one|1|\d+)\s+weeks?\b/i);
202
+ if (weeksMatch) {
203
+ const numMatch = weeksMatch[0].match(/(\d+|one)/i);
204
+ const weeks = ((_a = numMatch == null ? void 0 : numMatch[1]) == null ? void 0 : _a.toLowerCase()) === "one" ? 1 : parseInt((_b = numMatch == null ? void 0 : numMatch[1]) != null ? _b : "1", 10);
205
+ const start = /* @__PURE__ */ new Date();
206
+ return [start, addDays(start, weeks * 7)];
207
+ }
208
+ return void 0;
209
+ }
210
+ function cleanLocation(raw) {
211
+ return raw.replace(/\s+/g, " ").replace(/\.$/, "").trim();
212
+ }
213
+ function titleCaseCity(raw) {
214
+ return cleanLocation(raw).split(/\s+/).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join(" ");
215
+ }
216
+ function expandAirportCode(raw) {
217
+ return canonicalizePlace(raw);
218
+ }
219
+ function detectTravelType(text) {
220
+ if (FLIGHT_KEYWORD_RE.test(text)) return TravelType.FLIGHTS;
221
+ if (CAR_KEYWORD_RE.test(text)) return TravelType.CARS;
222
+ return TravelType.HOTELS;
223
+ }
224
+ function parseTravelIntentFromText(text) {
225
+ if (!TRAVEL_KEYWORDS.test(text)) return null;
226
+ const travelType = detectTravelType(text);
227
+ const guests = parseGuestCount(text);
228
+ const dates = parseDatesFromText(text);
229
+ const flightRoute = text.match(/\b(?:from)\s+([^,.\n]+?)\s+(?:to)\s+([^,.\n]+?)(?:\s+for|\s+on|\s+with|\s+\d|,|\.|$)/i);
230
+ if (travelType === TravelType.FLIGHTS && flightRoute) {
231
+ return {
232
+ travelType,
233
+ pickupLocation: expandAirportCode(flightRoute[1]),
234
+ dropoffLocation: expandAirportCode(flightRoute[2]),
235
+ dates,
236
+ guests,
237
+ returnFlight: !/\bone[- ]way\b/i.test(text)
238
+ };
239
+ }
240
+ const carLocation = text.match(/\b(?:car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft)\s+(?:in|at|from|near)\s+([^,.\n]+?)(?:\s+for|\s+from|\s+on|\s+with|\s+\d|,|\.|$)/i);
241
+ if (carLocation && travelType === TravelType.CARS) {
242
+ return {
243
+ travelType,
244
+ pickupLocation: cleanLocation(carLocation[1]),
245
+ dates,
246
+ guests
247
+ };
248
+ }
249
+ const patterns = [/\b(?:find|search|look for)\s+(?:places|stays|hotels|rooms|homes|accommodations?)\s+(?:in|at|near|around)\s+([^,.\n\d]+?)(?:\s+for|\s+from|\s+on|\s+with|\s+\d|,|\.|$)/i, /\b(?:hotel|hotels|stay|stays|staying|room|rooms|accommodation|trip|travel|vacation|getaway|visit|going to)\s+(?:in|to|at|near)\s+([^,.\n\d]+?)(?:\s+for|\s+from|\s+on|\s+with|\s+\d|,|\.|$)/i, /\b(?:in|to|at|near|around)\s+([A-Z]{3})\b(?:\s+for|\s+from|\s+on|\s+with|\s+\d|,|\.|$)/, /\b(?:in|to|at|near|around)\s+([A-Za-z][A-Za-z\s,]{1,40}?)(?:\s+for|\s+from|\s+on|\s+with|\s+\d|,|\.|$)/i];
250
+ for (const pattern of patterns) {
251
+ const match = text.match(pattern);
252
+ if (match) {
253
+ const raw = cleanLocation(match[match.length - 1]);
254
+ const loc = expandAirportCode(raw);
255
+ if (loc.length >= 2) {
256
+ if (travelType === TravelType.FLIGHTS) {
257
+ return {
258
+ travelType,
259
+ dropoffLocation: loc,
260
+ dates,
261
+ guests
262
+ };
263
+ }
264
+ if (travelType === TravelType.CARS) {
265
+ return {
266
+ travelType,
267
+ pickupLocation: loc,
268
+ dates,
269
+ guests
270
+ };
271
+ }
272
+ return {
273
+ travelType,
274
+ location: loc,
275
+ dates,
276
+ guests
277
+ };
278
+ }
279
+ }
280
+ }
281
+ if (travelType === TravelType.HOTELS || travelType === TravelType.CARS || travelType === TravelType.FLIGHTS) {
282
+ return {
283
+ travelType,
284
+ dates,
285
+ guests
286
+ };
287
+ }
288
+ return null;
289
+ }
290
+ function defaultTravelDates() {
291
+ const from = /* @__PURE__ */ new Date();
292
+ const to = addDays(from, 14);
293
+ return [from, to];
294
+ }
295
+ function formatLocalDate(date) {
296
+ const y = date.getFullYear();
297
+ const m = String(date.getMonth() + 1).padStart(2, "0");
298
+ const d = String(date.getDate()).padStart(2, "0");
299
+ return `${y}-${m}-${d}`;
300
+ }
301
+ function parseLocalDateInput(raw) {
302
+ return parseIsoDate(raw);
303
+ }export{AIRPORT_CODES,CAR_KEYWORD_RE,FLIGHT_KEYWORD_RE,canonicalizePlace,defaultTravelDates,formatLocalDate,isCompleteTravelIntent,parseLocalDateInput,parseTravelIntentFromText};//# sourceMappingURL=parseTravelIntent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTravelIntent.js","sources":["../../../src/features/travel/parseTravelIntent.ts"],"sourcesContent":["import { TravelType } from './types';\n\nexport interface ParsedTravelIntent {\n travelType: TravelType;\n location?: string;\n pickupLocation?: string;\n dropoffLocation?: string;\n dates?: [Date, Date];\n guests?: number;\n returnFlight?: boolean;\n}\n\nexport const FLIGHT_KEYWORD_RE = /\\b(flight|flights|fly|flying|airport|airfare)\\b/i;\n\nexport const CAR_KEYWORD_RE =\n /\\b(car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft)\\b/i;\n\nconst TRAVEL_KEYWORDS =\n /\\b(hotel|hotels|stay|stays|staying|room|rooms|accommodation|airbnb|flight|flights|fly|flying|airport|car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft|travel|trip|vacation|getaway|booking|book|places?|find|home|homes)\\b/i;\n\nfunction compactPlace(raw: string): string {\n return raw\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[^a-z]/g, '');\n}\n\nfunction editDistance(a: string, b: string): number {\n if (a === b) return 0;\n if (!a.length) return b.length;\n if (!b.length) return a.length;\n const row = Array.from({ length: b.length + 1 }, (_, i) => i);\n for (let i = 1; i <= a.length; i++) {\n let prev = i - 1;\n row[0] = i;\n for (let j = 1; j <= b.length; j++) {\n const cur = row[j];\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n row[j] = Math.min(row[j] + 1, row[j - 1] + 1, prev + cost);\n prev = cur;\n }\n }\n return row[b.length];\n}\n\n/** Chat typos and concatenated city names (\"newyork\", \"maxico\") → catalog labels. */\nconst PLACE_ALIASES: Record<string, string> = {\n newyork: 'New York, NY',\n nyc: 'New York, NY',\n ny: 'New York, NY',\n losangeles: 'Los Angeles, CA',\n la: 'Los Angeles, CA',\n sanfrancisco: 'San Francisco, CA',\n sf: 'San Francisco, CA',\n maxico: 'Mexico City, Mexico',\n mexico: 'Mexico City, Mexico',\n mexicocity: 'Mexico City, Mexico',\n cancun: 'Cancun, Mexico',\n london: 'London Heathrow, UK',\n paris: 'Paris, France',\n tokyo: 'Tokyo Narita, Japan',\n dubai: 'Dubai, UAE',\n};\n\nexport function canonicalizePlace(raw: string): string {\n const trimmed = cleanLocation(raw);\n if (!trimmed) return '';\n const compact = compactPlace(trimmed);\n if (PLACE_ALIASES[compact]) return PLACE_ALIASES[compact];\n if (/^[A-Za-z]{3}$/.test(trimmed)) {\n const code = trimmed.toUpperCase();\n if (AIRPORT_CODES[code]) return AIRPORT_CODES[code];\n if (/^[A-Z]{3}$/.test(trimmed)) return code;\n }\n let bestAlias = '';\n let bestDist = 2;\n for (const [alias, label] of Object.entries(PLACE_ALIASES)) {\n if (Math.abs(alias.length - compact.length) > 2) continue;\n const dist = editDistance(compact, alias);\n if (dist < bestDist || (dist === bestDist && alias.length > compactPlace(bestAlias).length)) {\n bestDist = dist;\n bestAlias = label;\n }\n }\n if (bestAlias && bestDist <= 1) return bestAlias;\n const code = trimmed.toUpperCase();\n if (AIRPORT_CODES[code]) return AIRPORT_CODES[code];\n let bestCity = '';\n let bestCityDist = 2;\n for (const label of Object.values(AIRPORT_CODES)) {\n const city = compactPlace(label.split(',')[0] ?? '');\n if (!city) continue;\n if (city === compact) return label;\n if (Math.abs(city.length - compact.length) > 2) continue;\n const dist = editDistance(compact, city);\n if (dist <= 1 && dist < bestCityDist) {\n bestCityDist = dist;\n bestCity = label;\n }\n }\n return bestCity || titleCaseCity(trimmed);\n}\n\n/** City labels used to resolve IATA codes from chat / airport fields. */\nexport const AIRPORT_CODES: Record<string, string> = {\n ATL: 'Atlanta, GA',\n AUS: 'Austin, TX',\n BNA: 'Nashville, TN',\n BOS: 'Boston, MA',\n BWI: 'Baltimore, MD',\n CLT: 'Charlotte, NC',\n DCA: 'Washington, DC',\n DEN: 'Denver, CO',\n DFW: 'Dallas, TX',\n DTW: 'Detroit, MI',\n EWR: 'Newark, NJ',\n FLL: 'Fort Lauderdale, FL',\n HNL: 'Honolulu, HI',\n IAD: 'Washington Dulles, DC',\n IAH: 'Houston, TX',\n JFK: 'New York, NY',\n LAS: 'Las Vegas, NV',\n LAX: 'Los Angeles, CA',\n LGA: 'New York LaGuardia, NY',\n MCO: 'Orlando, FL',\n MDW: 'Chicago Midway, IL',\n MIA: 'Miami, FL',\n MSP: 'Minneapolis, MN',\n MSY: 'New Orleans, LA',\n OAK: 'Oakland, CA',\n ORD: 'Chicago, IL',\n PDX: 'Portland, OR',\n PHL: 'Philadelphia, PA',\n PHX: 'Phoenix, AZ',\n PIT: 'Pittsburgh, PA',\n RDU: 'Raleigh, NC',\n SAN: 'San Diego, CA',\n SAT: 'San Antonio, TX',\n SEA: 'Seattle, WA',\n SFO: 'San Francisco, CA',\n SJC: 'San Jose, CA',\n SLC: 'Salt Lake City, UT',\n STL: 'St Louis, MO',\n TPA: 'Tampa, FL',\n YYZ: 'Toronto, ON',\n YVR: 'Vancouver, BC',\n YUL: 'Montreal, QC',\n MEX: 'Mexico City, Mexico',\n CUN: 'Cancun, Mexico',\n LHR: 'London Heathrow, UK',\n LGW: 'London Gatwick, UK',\n STN: 'London Stansted, UK',\n MAN: 'Manchester, UK',\n EDI: 'Edinburgh, UK',\n DUB: 'Dublin, Ireland',\n CDG: 'Paris, France',\n AMS: 'Amsterdam, Netherlands',\n FRA: 'Frankfurt, Germany',\n MUC: 'Munich, Germany',\n BER: 'Berlin, Germany',\n ZRH: 'Zurich, Switzerland',\n MAD: 'Madrid, Spain',\n BCN: 'Barcelona, Spain',\n LIS: 'Lisbon, Portugal',\n FCO: 'Rome, Italy',\n MXP: 'Milan, Italy',\n DXB: 'Dubai, UAE',\n DEL: 'Delhi, India',\n BOM: 'Mumbai, India',\n BLR: 'Bengaluru, India',\n SIN: 'Singapore',\n BKK: 'Bangkok, Thailand',\n HKG: 'Hong Kong',\n NRT: 'Tokyo Narita, Japan',\n HND: 'Tokyo Haneda, Japan',\n ICN: 'Seoul, South Korea',\n SYD: 'Sydney, Australia',\n MEL: 'Melbourne, Australia',\n GRU: 'Sao Paulo, Brazil',\n};\n\nexport function isCompleteTravelIntent(intent: ParsedTravelIntent): boolean {\n if (intent.travelType === TravelType.FLIGHTS) {\n return Boolean(intent.pickupLocation?.trim() && intent.dropoffLocation?.trim());\n }\n if (intent.travelType === TravelType.CARS) {\n return Boolean(intent.pickupLocation?.trim());\n }\n return Boolean(intent.location?.trim());\n}\n\nexport function looksLikeTravelQuery(text: string): boolean {\n const intent = parseTravelIntentFromText(text);\n return intent != null && isCompleteTravelIntent(intent);\n}\n\nfunction parseGuestCount(text: string): number | undefined {\n if (/\\bcouple\\b/i.test(text)) return 2;\n if (/\\bfamily\\b/i.test(text)) return 4;\n const match = text.match(/(\\d+)\\s*(guests?|people|persons?|adults?|travelers?|travellers?)/i);\n if (!match) return undefined;\n const n = parseInt(match[1], 10);\n return Number.isFinite(n) && n > 0 ? n : undefined;\n}\n\nfunction addDays(date: Date, days: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + days);\n return next;\n}\n\nfunction parseIsoDate(token: string): Date | null {\n const match = token.trim().match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\n if (!match) return null;\n const d = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\nfunction parseDatesFromText(text: string): [Date, Date] | undefined {\n const isoRange = text.match(/\\b(\\d{4}-\\d{2}-\\d{2})\\s*(?:to|-)\\s*(\\d{4}-\\d{2}-\\d{2})\\b/);\n if (isoRange) {\n const start = parseIsoDate(isoRange[1]);\n const end = parseIsoDate(isoRange[2]);\n if (start && end && end >= start) return [start, end];\n }\n const nightsMatch = text.match(/(\\d+)\\s+nights?\\b/i);\n if (nightsMatch) {\n const nights = parseInt(nightsMatch[1], 10);\n const start = new Date();\n return [start, addDays(start, nights)];\n }\n const weeksMatch = text.match(/(?:for\\s+)?(?:one|1|\\d+)\\s+weeks?\\b/i);\n if (weeksMatch) {\n const numMatch = weeksMatch[0].match(/(\\d+|one)/i);\n const weeks = numMatch?.[1]?.toLowerCase() === 'one' ? 1 : parseInt(numMatch?.[1] ?? '1', 10);\n const start = new Date();\n return [start, addDays(start, weeks * 7)];\n }\n return undefined;\n}\n\nfunction cleanLocation(raw: string): string {\n return raw.replace(/\\s+/g, ' ').replace(/\\.$/, '').trim();\n}\n\nfunction titleCaseCity(raw: string): string {\n return cleanLocation(raw)\n .split(/\\s+/)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())\n .join(' ');\n}\n\nfunction expandAirportCode(raw: string): string {\n return canonicalizePlace(raw);\n}\n\nfunction detectTravelType(text: string): TravelType {\n if (FLIGHT_KEYWORD_RE.test(text)) return TravelType.FLIGHTS;\n if (CAR_KEYWORD_RE.test(text)) return TravelType.CARS;\n return TravelType.HOTELS;\n}\n\nexport function parseTravelIntentFromText(text: string): ParsedTravelIntent | null {\n if (!TRAVEL_KEYWORDS.test(text)) return null;\n\n const travelType = detectTravelType(text);\n const guests = parseGuestCount(text);\n const dates = parseDatesFromText(text);\n\n const flightRoute = text.match(\n /\\b(?:from)\\s+([^,.\\n]+?)\\s+(?:to)\\s+([^,.\\n]+?)(?:\\s+for|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/i,\n );\n if (travelType === TravelType.FLIGHTS && flightRoute) {\n return {\n travelType,\n pickupLocation: expandAirportCode(flightRoute[1]),\n dropoffLocation: expandAirportCode(flightRoute[2]),\n dates,\n guests,\n returnFlight: !/\\bone[- ]way\\b/i.test(text),\n };\n }\n\n const carLocation = text.match(\n /\\b(?:car rental|rent a car|rental car|hire a car|rental vehicle|ride[- ]?share|rideshare|uber|lyft)\\s+(?:in|at|from|near)\\s+([^,.\\n]+?)(?:\\s+for|\\s+from|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/i,\n );\n if (carLocation && travelType === TravelType.CARS) {\n return {\n travelType,\n pickupLocation: cleanLocation(carLocation[1]),\n dates,\n guests,\n };\n }\n\n const patterns = [\n /\\b(?:find|search|look for)\\s+(?:places|stays|hotels|rooms|homes|accommodations?)\\s+(?:in|at|near|around)\\s+([^,.\\n\\d]+?)(?:\\s+for|\\s+from|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/i,\n /\\b(?:hotel|hotels|stay|stays|staying|room|rooms|accommodation|trip|travel|vacation|getaway|visit|going to)\\s+(?:in|to|at|near)\\s+([^,.\\n\\d]+?)(?:\\s+for|\\s+from|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/i,\n /\\b(?:in|to|at|near|around)\\s+([A-Z]{3})\\b(?:\\s+for|\\s+from|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/,\n /\\b(?:in|to|at|near|around)\\s+([A-Za-z][A-Za-z\\s,]{1,40}?)(?:\\s+for|\\s+from|\\s+on|\\s+with|\\s+\\d|,|\\.|$)/i,\n ];\n\n for (const pattern of patterns) {\n const match = text.match(pattern);\n if (match) {\n const raw = cleanLocation(match[match.length - 1]);\n const loc = expandAirportCode(raw);\n if (loc.length >= 2) {\n if (travelType === TravelType.FLIGHTS) {\n return { travelType, dropoffLocation: loc, dates, guests };\n }\n if (travelType === TravelType.CARS) {\n return { travelType, pickupLocation: loc, dates, guests };\n }\n return { travelType, location: loc, dates, guests };\n }\n }\n }\n\n if (travelType === TravelType.HOTELS || travelType === TravelType.CARS || travelType === TravelType.FLIGHTS) {\n return { travelType, dates, guests };\n }\n\n return null;\n}\n\nexport function defaultTravelDates(): [Date, Date] {\n const from = new Date();\n const to = addDays(from, 14);\n return [from, to];\n}\n\nexport function formatLocalDate(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\nexport function parseLocalDateInput(raw: string): Date | null {\n return parseIsoDate(raw);\n}\n"],"names":["code"],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import {useSyncExternalStore}from'react';var _a;
2
+ const STORAGE_KEY = "yantra.travel.saved";
3
+ const MAX_ITEMS = 100;
4
+ let AsyncStorage = null;
5
+ try {
6
+ AsyncStorage = (_a = require("@react-native-async-storage/async-storage").default) != null ? _a : null;
7
+ } catch (e) {
8
+ AsyncStorage = null;
9
+ }
10
+ let _items = [];
11
+ let _ids = /* @__PURE__ */ new Set();
12
+ const _listeners = /* @__PURE__ */ new Set();
13
+ function persist() {
14
+ try {
15
+ void (AsyncStorage == null ? void 0 : AsyncStorage.setItem(STORAGE_KEY, JSON.stringify({
16
+ items: _items
17
+ })));
18
+ } catch (e) {
19
+ }
20
+ }
21
+ function emit() {
22
+ _items = _items.slice(0, MAX_ITEMS);
23
+ _ids = new Set(_items.map((e) => e.property.id));
24
+ persist();
25
+ _listeners.forEach((l) => l());
26
+ }
27
+ async function hydrateSavedStays() {
28
+ if (!AsyncStorage) return;
29
+ try {
30
+ const raw = await AsyncStorage.getItem(STORAGE_KEY);
31
+ if (!raw) return;
32
+ const parsed = JSON.parse(raw);
33
+ if (!Array.isArray(parsed.items)) return;
34
+ _items = parsed.items.filter((e) => {
35
+ var _a2;
36
+ return Boolean((_a2 = e == null ? void 0 : e.property) == null ? void 0 : _a2.id) && typeof e.ts === "number";
37
+ });
38
+ _ids = new Set(_items.map((e) => e.property.id));
39
+ _listeners.forEach((l) => l());
40
+ } catch (e) {
41
+ }
42
+ }
43
+ function subscribe(listener) {
44
+ _listeners.add(listener);
45
+ return () => _listeners.delete(listener);
46
+ }
47
+ function toggleSavedStay(property) {
48
+ if (!(property == null ? void 0 : property.id)) return false;
49
+ if (_ids.has(property.id)) {
50
+ _items = _items.filter((e) => e.property.id !== property.id);
51
+ emit();
52
+ return false;
53
+ }
54
+ _items = [{
55
+ property,
56
+ ts: Date.now()
57
+ }, ..._items.filter((e) => e.property.id !== property.id)];
58
+ emit();
59
+ return true;
60
+ }
61
+ function useSavedStays() {
62
+ return useSyncExternalStore(subscribe, () => _items, () => []);
63
+ }
64
+ function useIsStaySaved(propertyId) {
65
+ return useSyncExternalStore(subscribe, () => _ids.has(propertyId), () => false);
66
+ }export{hydrateSavedStays,toggleSavedStay,useIsStaySaved,useSavedStays};//# sourceMappingURL=savedStays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"savedStays.js","sources":["../../../src/features/travel/savedStays.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { TravelProperty } from './types';\n\nexport interface SavedStay {\n property: TravelProperty;\n ts: number;\n}\n\nconst STORAGE_KEY = 'yantra.travel.saved';\nconst MAX_ITEMS = 100;\n\ntype StorageLike = { getItem(key: string): Promise<string | null>; setItem(key: string, value: string): Promise<void> };\nlet AsyncStorage: StorageLike | null = null;\ntry {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n AsyncStorage = require('@react-native-async-storage/async-storage').default ?? null;\n} catch {\n AsyncStorage = null;\n}\n\nlet _items: SavedStay[] = [];\nlet _ids = new Set<string>();\nconst _listeners = new Set<() => void>();\n\nfunction persist(): void {\n try {\n void AsyncStorage?.setItem(STORAGE_KEY, JSON.stringify({ items: _items }));\n } catch {\n /* best-effort */\n }\n}\n\nfunction emit(): void {\n _items = _items.slice(0, MAX_ITEMS);\n _ids = new Set(_items.map((e) => e.property.id));\n persist();\n _listeners.forEach((l) => l());\n}\n\nexport async function hydrateSavedStays(): Promise<void> {\n if (!AsyncStorage) return;\n try {\n const raw = await AsyncStorage.getItem(STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw) as { items?: SavedStay[] };\n if (!Array.isArray(parsed.items)) return;\n _items = parsed.items.filter((e) => Boolean(e?.property?.id) && typeof e.ts === 'number');\n _ids = new Set(_items.map((e) => e.property.id));\n _listeners.forEach((l) => l());\n } catch {\n /* memory-only */\n }\n}\n\nfunction subscribe(listener: () => void): () => void {\n _listeners.add(listener);\n return () => _listeners.delete(listener);\n}\n\nexport function toggleSavedStay(property: TravelProperty): boolean {\n if (!property?.id) return false;\n if (_ids.has(property.id)) {\n _items = _items.filter((e) => e.property.id !== property.id);\n emit();\n return false;\n }\n _items = [{ property, ts: Date.now() }, ..._items.filter((e) => e.property.id !== property.id)];\n emit();\n return true;\n}\n\nexport function useSavedStays(): SavedStay[] {\n return useSyncExternalStore(\n subscribe,\n () => _items,\n () => [],\n );\n}\n\nexport function useIsStaySaved(propertyId: string): boolean {\n return useSyncExternalStore(\n subscribe,\n () => _ids.has(propertyId),\n () => false,\n );\n}\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import {TravelType}from'../types.js';import {resolveAirportCode,searchTravelFlightsWithMeta,FLIGHT_FAST_PROVIDERS}from'./travelFlightSearch.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 DEAL_BOARD_DESTINATIONS = [{
21
+ label: "San Francisco",
22
+ query: "San Francisco, CA"
23
+ }, {
24
+ label: "New York",
25
+ query: "New York, NY"
26
+ }, {
27
+ label: "Los Angeles",
28
+ query: "Los Angeles, CA"
29
+ }, {
30
+ label: "Miami",
31
+ query: "Miami, FL"
32
+ }, {
33
+ label: "London",
34
+ query: "London Heathrow, UK"
35
+ }, {
36
+ label: "Paris",
37
+ query: "Paris, France"
38
+ }, {
39
+ label: "Tokyo",
40
+ query: "Tokyo, Japan"
41
+ }, {
42
+ label: "Dubai",
43
+ query: "Dubai, UAE"
44
+ }];
45
+ function localIso(date) {
46
+ const y = date.getFullYear();
47
+ const m = String(date.getMonth() + 1).padStart(2, "0");
48
+ const d = String(date.getDate()).padStart(2, "0");
49
+ return `${y}-${m}-${d}`;
50
+ }
51
+ function dealDates() {
52
+ const depart = /* @__PURE__ */ new Date();
53
+ depart.setDate(depart.getDate() + 21);
54
+ const ret = /* @__PURE__ */ new Date();
55
+ ret.setDate(ret.getDate() + 28);
56
+ return {
57
+ depart,
58
+ ret
59
+ };
60
+ }
61
+ function cheapestOf(properties) {
62
+ return properties.filter((p) => p.price != null && Number.isFinite(p.price) && p.price > 0).sort((a, b) => a.price - b.price)[0];
63
+ }
64
+ async function fetchFlightDeal(originQuery, destination) {
65
+ const originCode = resolveAirportCode(originQuery);
66
+ const destCode = resolveAirportCode(destination.query);
67
+ if (!originCode || !destCode || originCode === destCode) return null;
68
+ const {
69
+ depart,
70
+ ret
71
+ } = dealDates();
72
+ const departIso = localIso(depart);
73
+ const base = {
74
+ destinationLabel: destination.label,
75
+ destinationQuery: destination.query,
76
+ destinationCode: destCode,
77
+ departDate: departIso,
78
+ returnDate: localIso(ret)
79
+ };
80
+ const snapshot = {
81
+ travelType: TravelType.FLIGHTS,
82
+ location: {
83
+ formattedAddress: ""
84
+ },
85
+ pickupLocation: originQuery,
86
+ dropoffLocation: destination.query,
87
+ dates: [depart, ret],
88
+ guests: 1,
89
+ returnFlight: true,
90
+ differentDropoffLocation: false
91
+ };
92
+ try {
93
+ const result = await searchTravelFlightsWithMeta(snapshot, {
94
+ providers: FLIGHT_FAST_PROVIDERS
95
+ });
96
+ const cheapest = cheapestOf(result.properties);
97
+ return cheapest ? __spreadProps(__spreadValues({}, base), {
98
+ price: cheapest.price,
99
+ priceLabel: cheapest.priceLabel,
100
+ durationMinutes: cheapest.durationMinutes,
101
+ stops: cheapest.stops,
102
+ bookable: cheapest.bookable
103
+ }) : __spreadProps(__spreadValues({}, base), {
104
+ empty: true
105
+ });
106
+ } catch (e) {
107
+ return __spreadProps(__spreadValues({}, base), {
108
+ empty: true
109
+ });
110
+ }
111
+ }export{DEAL_BOARD_DESTINATIONS,dealDates,fetchFlightDeal};//# sourceMappingURL=flightDealsBoard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flightDealsBoard.js","sources":["../../../../src/features/travel/services/flightDealsBoard.ts"],"sourcesContent":["import { TravelType, type TravelProperty, type TravelSearchQuery } from '../types';\nimport { FLIGHT_FAST_PROVIDERS, resolveAirportCode, searchTravelFlightsWithMeta } from './travelFlightSearch';\n\nexport interface FlightDealCard {\n destinationLabel: string;\n destinationQuery: string;\n destinationCode: string;\n departDate: string;\n returnDate: string;\n price?: number;\n priceLabel?: string;\n durationMinutes?: number;\n stops?: number;\n bookable?: boolean;\n empty?: boolean;\n}\n\nexport const DEAL_BOARD_DESTINATIONS: { label: string; query: string }[] = [\n { label: 'San Francisco', query: 'San Francisco, CA' },\n { label: 'New York', query: 'New York, NY' },\n { label: 'Los Angeles', query: 'Los Angeles, CA' },\n { label: 'Miami', query: 'Miami, FL' },\n { label: 'London', query: 'London Heathrow, UK' },\n { label: 'Paris', query: 'Paris, France' },\n { label: 'Tokyo', query: 'Tokyo, Japan' },\n { label: 'Dubai', query: 'Dubai, UAE' },\n];\n\nfunction localIso(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\nexport function dealDates(): { depart: Date; ret: Date } {\n const depart = new Date();\n depart.setDate(depart.getDate() + 21);\n const ret = new Date();\n ret.setDate(ret.getDate() + 28);\n return { depart, ret };\n}\n\nfunction cheapestOf(properties: TravelProperty[]): TravelProperty | undefined {\n return properties\n .filter((p) => p.price != null && Number.isFinite(p.price) && p.price > 0)\n .sort((a, b) => a.price! - b.price!)[0];\n}\n\nexport async function fetchFlightDeal(\n originQuery: string,\n destination: { label: string; query: string },\n): Promise<FlightDealCard | null> {\n const originCode = resolveAirportCode(originQuery);\n const destCode = resolveAirportCode(destination.query);\n if (!originCode || !destCode || originCode === destCode) return null;\n\n const { depart, ret } = dealDates();\n const departIso = localIso(depart);\n const base: FlightDealCard = {\n destinationLabel: destination.label,\n destinationQuery: destination.query,\n destinationCode: destCode,\n departDate: departIso,\n returnDate: localIso(ret),\n };\n\n const snapshot: TravelSearchQuery = {\n travelType: TravelType.FLIGHTS,\n location: { formattedAddress: '' },\n pickupLocation: originQuery,\n dropoffLocation: destination.query,\n dates: [depart, ret],\n guests: 1,\n returnFlight: true,\n differentDropoffLocation: false,\n };\n\n try {\n const result = await searchTravelFlightsWithMeta(snapshot, { providers: FLIGHT_FAST_PROVIDERS });\n const cheapest = cheapestOf(result.properties);\n return cheapest\n ? {\n ...base,\n price: cheapest.price,\n priceLabel: cheapest.priceLabel,\n durationMinutes: cheapest.durationMinutes,\n stops: cheapest.stops,\n bookable: cheapest.bookable,\n }\n : { ...base, empty: true };\n } catch {\n return { ...base, empty: true };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import {getTravelRuntime}from'../travelRuntime.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 FLIGHT_SEARCH_CONNECTOR_ID = "yantra-flight-search";
21
+ const FLIGHT_SEARCH_ACTIONS = {
22
+ SEARCH: "YANTRA_FLIGHT_SEARCH_SEARCH"
23
+ };
24
+ async function invokeFlightSearchConnector(params) {
25
+ var _a;
26
+ const supplied = (_a = getTravelRuntime().config.flightSearch) != null ? _a : {};
27
+ const credentials = __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, supplied.duffelApiKey ? {
28
+ duffelApiKey: supplied.duffelApiKey
29
+ } : {}), supplied.yantraSpiToken ? {
30
+ yantraSpiToken: supplied.yantraSpiToken
31
+ } : {}), supplied.yantraSpiEndpoint ? {
32
+ yantraSpiEndpoint: supplied.yantraSpiEndpoint
33
+ } : {}), supplied.parallelApiKey ? {
34
+ parallelApiKey: supplied.parallelApiKey
35
+ } : {});
36
+ const execParams = __spreadValues(__spreadProps(__spreadValues(__spreadValues({}, params), credentials), {
37
+ stream: false
38
+ }), supplied.yantraSpiToken ? {
39
+ authToken: supplied.yantraSpiToken
40
+ } : {});
41
+ return getTravelRuntime().exec(FLIGHT_SEARCH_CONNECTOR_ID, FLIGHT_SEARCH_ACTIONS.SEARCH, execParams);
42
+ }export{FLIGHT_SEARCH_ACTIONS,FLIGHT_SEARCH_CONNECTOR_ID,invokeFlightSearchConnector};//# sourceMappingURL=flightSearchConnectorClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flightSearchConnectorClient.js","sources":["../../../../src/features/travel/services/flightSearchConnectorClient.ts"],"sourcesContent":["import { getTravelRuntime } from '../travelRuntime';\n\nexport const FLIGHT_SEARCH_CONNECTOR_ID = 'yantra-flight-search';\n\nexport const FLIGHT_SEARCH_ACTIONS = {\n SEARCH: 'YANTRA_FLIGHT_SEARCH_SEARCH',\n} as const;\n\nexport interface FlightSearchRoute {\n origin: string;\n destination: string;\n departureDate: string;\n returnDate?: string;\n adults?: number;\n}\n\nexport interface FlightConnection {\n airport?: string;\n layoverDuration?: string;\n}\n\nexport interface FlightLeg {\n origin?: string;\n destination?: string;\n departureAt?: string;\n arrivalAt?: string;\n duration?: string;\n durationMinutes?: number;\n flightNumbers?: string[];\n stops?: number;\n connections?: FlightConnection[];\n}\n\nexport interface FlightOffer {\n id?: string;\n offerId?: string;\n provider?: string;\n bookable?: boolean;\n origin?: string;\n destination?: string;\n totalDuration?: string;\n stops?: number;\n airline?: string;\n flightNumbers?: string[];\n cabinClass?: string;\n totalPrice?: number | string;\n priceText?: string;\n departureAt?: string;\n arrivalAt?: string;\n legs?: FlightLeg[];\n connections?: FlightConnection[];\n conditions?: { refundable?: boolean };\n sourceUrl?: string;\n}\n\nexport interface FlightRouteSearchResult {\n offers?: FlightOffer[];\n route?: FlightSearchRoute;\n provider?: string;\n cheapest?: FlightOffer | null;\n recommendations?: FlightOffer[];\n bookingLinks?: { label?: string; url?: string }[];\n error?: string;\n}\n\nexport interface FlightSearchResult {\n success?: boolean;\n searches?: FlightRouteSearchResult[];\n error?: string;\n}\n\nexport async function invokeFlightSearchConnector<T = FlightSearchResult>(\n params: Record<string, unknown>,\n): Promise<{ success: boolean; data?: T; error?: string }> {\n const supplied = getTravelRuntime().config.flightSearch ?? {};\n const credentials = {\n ...(supplied.duffelApiKey ? { duffelApiKey: supplied.duffelApiKey } : {}),\n ...(supplied.yantraSpiToken ? { yantraSpiToken: supplied.yantraSpiToken } : {}),\n ...(supplied.yantraSpiEndpoint ? { yantraSpiEndpoint: supplied.yantraSpiEndpoint } : {}),\n ...(supplied.parallelApiKey ? { parallelApiKey: supplied.parallelApiKey } : {}),\n };\n const execParams = {\n ...params,\n ...credentials,\n stream: false,\n ...(supplied.yantraSpiToken ? { authToken: supplied.yantraSpiToken } : {}),\n };\n return getTravelRuntime().exec<T>(FLIGHT_SEARCH_CONNECTOR_ID, FLIGHT_SEARCH_ACTIONS.SEARCH, execParams);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AACO,MAAM,0BAA6B,GAAA;AACnC,MAAM,qBAAwB,GAAA;AAAA,EACnC,MAAQ,EAAA;AACV;AA+DA,eAAsB,4BAAoD,MAIvE,EAAA;AAvEH,EAAA,IAAA,EAAA;AAwEE,EAAA,MAAM,YAAW,EAAiB,GAAA,gBAAA,EAAA,CAAE,MAAO,CAAA,YAAA,KAA1B,YAA0C,EAAC;AAC5D,EAAM,MAAA,WAAA,GAAc,cACd,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAA,QAAA,CAAS,YAAe,GAAA;AAAA,IAC1B,cAAc,QAAS,CAAA;AAAA,GACrB,GAAA,EACA,CAAA,EAAA,QAAA,CAAS,cAAiB,GAAA;AAAA,IAC5B,gBAAgB,QAAS,CAAA;AAAA,GACvB,GAAA,EACA,CAAA,EAAA,QAAA,CAAS,iBAAoB,GAAA;AAAA,IAC/B,mBAAmB,QAAS,CAAA;AAAA,GAC1B,GAAA,EACA,CAAA,EAAA,QAAA,CAAS,cAAiB,GAAA;AAAA,IAC5B,gBAAgB,QAAS,CAAA;AAAA,MACvB,EAAC,CAAA;AAEP,EAAM,MAAA,UAAA,GAAa,cACd,CAAA,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EACA,WAFc,CAAA,EAAA;AAAA,IAGjB,MAAQ,EAAA;AAAA,GAAA,CAAA,EACJ,SAAS,cAAiB,GAAA;AAAA,IAC5B,WAAW,QAAS,CAAA;AAAA,MAClB,EAAC,CAAA;AAEP,EAAA,OAAO,kBAAmB,CAAA,IAAA,CAAQ,0BAA4B,EAAA,qBAAA,CAAsB,QAAQ,UAAU,CAAA;AACxG"}