@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.
- package/lib/components/GatewayConnector/GatewayConnector.js +2 -2
- package/lib/components/GatewayConnector/GatewayConnector.js.map +1 -1
- package/lib/components/KeyboardComposerDock.js +8 -1
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/components/NavigationHeader/NavigationHeader.js +2 -2
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/config/env-config.js +4 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/contexts/ChatLiveStreamContext.js +4 -1
- package/lib/contexts/ChatLiveStreamContext.js.map +1 -1
- package/lib/features/agent-chat/NativeAgentChat.js +2 -0
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +2 -2
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/audio-input/MicErrorBoundary.js +2 -2
- package/lib/features/audio-input/MicErrorBoundary.js.map +1 -1
- package/lib/features/canvas/AudioEditorExperience.js +308 -0
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -0
- package/lib/features/canvas/CanvasAgentChatPane.js +310 -0
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -0
- package/lib/features/canvas/CanvasBoardsGrid.js +414 -0
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -0
- package/lib/features/canvas/CanvasChatResultCard.js +113 -0
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js +179 -0
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -0
- package/lib/features/canvas/CanvasExperience.js +859 -0
- package/lib/features/canvas/CanvasExperience.js.map +1 -0
- package/lib/features/canvas/CanvasGeneratePanel.js +514 -0
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -0
- package/lib/features/canvas/CanvasLibrarySheet.js +355 -0
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -0
- package/lib/features/canvas/CanvasLooksPanel.js +184 -0
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTasksPanel.js +138 -0
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js +226 -0
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -0
- package/lib/features/canvas/CanvasToolDock.js +423 -0
- package/lib/features/canvas/CanvasToolDock.js.map +1 -0
- package/lib/features/canvas/FrameExtractorExperience.js +242 -0
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -0
- package/lib/features/canvas/ImageEditorExperience.js +491 -0
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -0
- package/lib/features/canvas/InfluencerStudioExperience.js +288 -0
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -0
- package/lib/features/canvas/MoodboardExperience.js +205 -0
- package/lib/features/canvas/MoodboardExperience.js.map +1 -0
- package/lib/features/canvas/NativeCanvasViewer.js +929 -0
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -0
- package/lib/features/canvas/PromoContextFields.js +150 -0
- package/lib/features/canvas/PromoContextFields.js.map +1 -0
- package/lib/features/canvas/SetStudioExperience.js +323 -0
- package/lib/features/canvas/SetStudioExperience.js.map +1 -0
- package/lib/features/canvas/VideoClipsExperience.js +175 -0
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditExperience.js +824 -0
- package/lib/features/canvas/VideoEditExperience.js.map +1 -0
- package/lib/features/canvas/VideoEditorExperience.js +3050 -0
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -0
- package/lib/features/canvas/VideoGeneratorExperience.js +415 -0
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -0
- package/lib/features/canvas/aiEdit.js +53 -0
- package/lib/features/canvas/aiEdit.js.map +1 -0
- package/lib/features/canvas/canvasAgentChat.js +76 -0
- package/lib/features/canvas/canvasAgentChat.js.map +1 -0
- package/lib/features/canvas/canvasBoardsCatalog.js +59 -0
- package/lib/features/canvas/canvasBoardsCatalog.js.map +1 -0
- package/lib/features/canvas/canvasBoardsSnapshot.js +14 -1
- package/lib/features/canvas/canvasBoardsSnapshot.js.map +1 -1
- package/lib/features/canvas/canvasChatDisplay.js +38 -0
- package/lib/features/canvas/canvasChatDisplay.js.map +1 -0
- package/lib/features/canvas/canvasChatTemplates.js +219 -0
- package/lib/features/canvas/canvasChatTemplates.js.map +1 -0
- package/lib/features/canvas/canvasCore.js +138 -1
- package/lib/features/canvas/canvasCore.js.map +1 -1
- package/lib/features/canvas/canvasEditOps.js +224 -0
- package/lib/features/canvas/canvasEditOps.js.map +1 -0
- package/lib/features/canvas/canvasTasks.js +187 -0
- package/lib/features/canvas/canvasTasks.js.map +1 -0
- package/lib/features/canvas/designPromptTemplates.js +3084 -0
- package/lib/features/canvas/designPromptTemplates.js.map +1 -0
- package/lib/features/canvas/editTools.js +54 -0
- package/lib/features/canvas/editTools.js.map +1 -0
- package/lib/features/canvas/extendVideo.js +5 -0
- package/lib/features/canvas/extendVideo.js.map +1 -0
- package/lib/features/canvas/frameExtract.js +33 -0
- package/lib/features/canvas/frameExtract.js.map +1 -0
- package/lib/features/canvas/generationModels.js +201 -0
- package/lib/features/canvas/generationModels.js.map +1 -0
- package/lib/features/canvas/influencer/influencerPipeline.js +170 -0
- package/lib/features/canvas/influencer/influencerPipeline.js.map +1 -0
- package/lib/features/canvas/influencer/productReel.js +72 -0
- package/lib/features/canvas/influencer/productReel.js.map +1 -0
- package/lib/features/canvas/influencer/reelPlan.js +159 -0
- package/lib/features/canvas/influencer/reelPlan.js.map +1 -0
- package/lib/features/canvas/moodboardCore.js +13 -0
- package/lib/features/canvas/moodboardCore.js.map +1 -0
- package/lib/features/canvas/promoProjectImport.js +99 -0
- package/lib/features/canvas/promoProjectImport.js.map +1 -0
- package/lib/features/canvas/promoVideo.js +312 -0
- package/lib/features/canvas/promoVideo.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -0
- package/lib/features/canvas/sessionIdentity.js +28 -1
- package/lib/features/canvas/sessionIdentity.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +133 -0
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -0
- package/lib/features/canvas/set/cameraPath.js +194 -0
- package/lib/features/canvas/set/cameraPath.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +24 -0
- package/lib/features/canvas/set/setProject.js.map +1 -0
- package/lib/features/canvas/storageLibrary.js +184 -0
- package/lib/features/canvas/storageLibrary.js.map +1 -0
- package/lib/features/canvas/studioCatalog.js +129 -0
- package/lib/features/canvas/studioCatalog.js.map +1 -0
- package/lib/features/canvas/studioLooks.js +189 -0
- package/lib/features/canvas/studioLooks.js.map +1 -0
- package/lib/features/canvas/surfaceIndex.js +63 -1
- package/lib/features/canvas/surfaceIndex.js.map +1 -1
- package/lib/features/canvas/templateImport/invideoNative.js +221 -0
- package/lib/features/canvas/templateImport/invideoNative.js.map +1 -0
- package/lib/features/canvas/templateImport/loadTemplate.js +43 -0
- package/lib/features/canvas/templateImport/loadTemplate.js.map +1 -0
- package/lib/features/canvas/templateImport/renderConfig.js +93 -0
- package/lib/features/canvas/templateImport/renderConfig.js.map +1 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js +134 -0
- package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -0
- package/lib/features/canvas/video3d.js +109 -0
- package/lib/features/canvas/video3d.js.map +1 -0
- package/lib/features/canvas/videoClips.js +42 -0
- package/lib/features/canvas/videoClips.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +120 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +69 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js +45 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js +129 -0
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -0
- package/lib/features/canvas/videoEditor/editorModel.js +346 -0
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js +214 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -0
- package/lib/features/canvas/videoEditor/filters.js +41 -0
- package/lib/features/canvas/videoEditor/filters.js.map +1 -0
- package/lib/features/canvas/videoEditor/mediaActions.js +57 -0
- package/lib/features/canvas/videoEditor/mediaActions.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +129 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js +115 -0
- package/lib/features/canvas/videoEditor/solidColorPng.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js +191 -0
- package/lib/features/canvas/videoEditor/videoEditOps.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js +82 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -0
- package/lib/features/canvas/videoRenderer.js +8 -0
- package/lib/features/canvas/videoRenderer.js.map +1 -0
- package/lib/features/canvas/withRemoteSafeArea.js +2 -2
- package/lib/features/canvas/withRemoteSafeArea.js.map +1 -1
- package/lib/features/characters/characterStudioProps.js +14 -0
- package/lib/features/characters/characterStudioProps.js.map +1 -0
- package/lib/features/chat/ChatCodeBlock.js +7 -3
- package/lib/features/chat/ChatCodeBlock.js.map +1 -1
- package/lib/features/chat/ChatTranscript.js +7 -3
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/chat/ChatWidgetCard.js +13 -0
- package/lib/features/chat/ChatWidgetCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectCard.js +166 -0
- package/lib/features/chat/ConnectorConnectCard.js.map +1 -0
- package/lib/features/chat/ConnectorConnectPrompt.js +272 -0
- package/lib/features/chat/ConnectorConnectPrompt.js.map +1 -0
- package/lib/features/chat/MessageActionBar.js.map +1 -1
- package/lib/features/chat/QueuedFollowUps.js +71 -0
- package/lib/features/chat/QueuedFollowUps.js.map +1 -0
- package/lib/features/chat/chatWidgets.js +37 -0
- package/lib/features/chat/chatWidgets.js.map +1 -0
- package/lib/features/chat/connectorConnect.js +207 -0
- package/lib/features/chat/connectorConnect.js.map +1 -0
- package/lib/features/chat/connectorConnectHandbacks.js +55 -0
- package/lib/features/chat/connectorConnectHandbacks.js.map +1 -0
- package/lib/features/design/DesignEditorExperience.js +643 -0
- package/lib/features/design/DesignEditorExperience.js.map +1 -0
- package/lib/features/design/DesignExperience.js +444 -0
- package/lib/features/design/DesignExperience.js.map +1 -0
- package/lib/features/design/designCore.js +298 -0
- package/lib/features/design/designCore.js.map +1 -0
- package/lib/features/design/designIndex.js +150 -0
- package/lib/features/design/designIndex.js.map +1 -0
- package/lib/features/design/exportDesign.js +133 -0
- package/lib/features/design/exportDesign.js.map +1 -0
- package/lib/features/job-search/ApplicationsPanel.js +907 -0
- package/lib/features/job-search/ApplicationsPanel.js.map +1 -0
- package/lib/features/job-search/ContactsPanel.js +627 -0
- package/lib/features/job-search/ContactsPanel.js.map +1 -0
- package/lib/features/job-search/InsightsPanel.js +299 -0
- package/lib/features/job-search/InsightsPanel.js.map +1 -0
- package/lib/features/job-search/InterviewPanel.js +637 -0
- package/lib/features/job-search/InterviewPanel.js.map +1 -0
- package/lib/features/job-search/JdPastePrompt.js +130 -0
- package/lib/features/job-search/JdPastePrompt.js.map +1 -0
- package/lib/features/job-search/JobCard.js +199 -0
- package/lib/features/job-search/JobCard.js.map +1 -0
- package/lib/features/job-search/JobDetailSheet.js +255 -0
- package/lib/features/job-search/JobDetailSheet.js.map +1 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js +377 -0
- package/lib/features/job-search/JobSearchAgentChatPane.js.map +1 -0
- package/lib/features/job-search/JobSearchExperience.js +1324 -0
- package/lib/features/job-search/JobSearchExperience.js.map +1 -0
- package/lib/features/job-search/JobSearchLocationField.js +231 -0
- package/lib/features/job-search/JobSearchLocationField.js.map +1 -0
- package/lib/features/job-search/ProfilePanel.js +679 -0
- package/lib/features/job-search/ProfilePanel.js.map +1 -0
- package/lib/features/job-search/RepliesPanel.js +344 -0
- package/lib/features/job-search/RepliesPanel.js.map +1 -0
- package/lib/features/job-search/SavedPanel.js +297 -0
- package/lib/features/job-search/SavedPanel.js.map +1 -0
- package/lib/features/job-search/chat/widgetContent.js +29 -0
- package/lib/features/job-search/chat/widgetContent.js.map +1 -0
- package/lib/features/job-search/cvText.js +91 -0
- package/lib/features/job-search/cvText.js.map +1 -0
- package/lib/features/job-search/jobAgentSwipe.js +7 -0
- package/lib/features/job-search/jobAgentSwipe.js.map +1 -0
- package/lib/features/job-search/jobSearchClient.js +184 -0
- package/lib/features/job-search/jobSearchClient.js.map +1 -0
- package/lib/features/job-search/jobSearchExec.js +14 -0
- package/lib/features/job-search/jobSearchExec.js.map +1 -0
- package/lib/features/job-search/jobSearchRuntime.js +50 -0
- package/lib/features/job-search/jobSearchRuntime.js.map +1 -0
- package/lib/features/job-search/jobSearchTheme.js +44 -0
- package/lib/features/job-search/jobSearchTheme.js.map +1 -0
- package/lib/features/job-search/savedJobs.js +85 -0
- package/lib/features/job-search/savedJobs.js.map +1 -0
- package/lib/features/job-search/searchHistory.js +117 -0
- package/lib/features/job-search/searchHistory.js.map +1 -0
- package/lib/features/job-search/types.js +36 -0
- package/lib/features/job-search/types.js.map +1 -0
- package/lib/features/job-search/useJobSearchSession.js +558 -0
- package/lib/features/job-search/useJobSearchSession.js.map +1 -0
- package/lib/features/messaging/ChatComponents.js +529 -0
- package/lib/features/messaging/ChatComponents.js.map +1 -0
- package/lib/features/messaging/ChatInviteDeepLink.js +116 -0
- package/lib/features/messaging/ChatInviteDeepLink.js.map +1 -0
- package/lib/features/messaging/ContactsScreen.js +288 -0
- package/lib/features/messaging/ContactsScreen.js.map +1 -0
- package/lib/features/messaging/ConversationListScreen.js +147 -0
- package/lib/features/messaging/ConversationListScreen.js.map +1 -0
- package/lib/features/messaging/MessageActions.js +290 -0
- package/lib/features/messaging/MessageActions.js.map +1 -0
- package/lib/features/messaging/NativeChatExperience.js +189 -0
- package/lib/features/messaging/NativeChatExperience.js.map +1 -0
- package/lib/features/messaging/RegistrationScreen.js +11 -14
- package/lib/features/messaging/RegistrationScreen.js.map +1 -1
- package/lib/features/messaging/ThreadScreen.js +215 -0
- package/lib/features/messaging/ThreadScreen.js.map +1 -0
- package/lib/features/messaging/chatInviteLink.js +52 -0
- package/lib/features/messaging/chatInviteLink.js.map +1 -0
- package/lib/features/messaging/chatModel.js +278 -0
- package/lib/features/messaging/chatModel.js.map +1 -0
- package/lib/features/messaging/chatOperations.js +106 -1
- package/lib/features/messaging/chatOperations.js.map +1 -1
- package/lib/features/messaging/emojiCatalog.js +60 -0
- package/lib/features/messaging/emojiCatalog.js.map +1 -0
- package/lib/features/messaging/emojiKeywords.js +1592 -0
- package/lib/features/messaging/emojiKeywords.js.map +1 -0
- package/lib/features/messaging/nativeChatChannelQuery.js +27 -0
- package/lib/features/messaging/nativeChatChannelQuery.js.map +1 -0
- package/lib/features/messaging/phoneNumbers.js +52 -1
- package/lib/features/messaging/phoneNumbers.js.map +1 -1
- package/lib/features/messaging/sha256.js +68 -0
- package/lib/features/messaging/sha256.js.map +1 -0
- package/lib/features/messaging/useChatData.js +421 -0
- package/lib/features/messaging/useChatData.js.map +1 -0
- package/lib/features/messaging/useContactMatches.js +191 -0
- package/lib/features/messaging/useContactMatches.js.map +1 -0
- package/lib/features/messaging/usePhoneVerification.js +12 -12
- package/lib/features/messaging/usePhoneVerification.js.map +1 -1
- package/lib/features/messaging/yantraChatOrg.js +8 -3
- package/lib/features/messaging/yantraChatOrg.js.map +1 -1
- package/lib/features/resume/AnnotateModal.js +100 -0
- package/lib/features/resume/AnnotateModal.js.map +1 -0
- package/lib/features/resume/AnnotationBar.js +69 -0
- package/lib/features/resume/AnnotationBar.js.map +1 -0
- package/lib/features/resume/ExportSheet.js +105 -0
- package/lib/features/resume/ExportSheet.js.map +1 -0
- package/lib/features/resume/ResumeAgentChatPane.js +95 -0
- package/lib/features/resume/ResumeAgentChatPane.js.map +1 -0
- package/lib/features/resume/ResumeEditor.js +676 -0
- package/lib/features/resume/ResumeEditor.js.map +1 -0
- package/lib/features/resume/ResumeExperience.js +235 -0
- package/lib/features/resume/ResumeExperience.js.map +1 -0
- package/lib/features/resume/ResumeListPanel.js +262 -0
- package/lib/features/resume/ResumeListPanel.js.map +1 -0
- package/lib/features/resume/ResumeToolbar.js +236 -0
- package/lib/features/resume/ResumeToolbar.js.map +1 -0
- package/lib/features/resume/annotations.js +17 -0
- package/lib/features/resume/annotations.js.map +1 -0
- package/lib/features/resume/documentCss.js +52 -0
- package/lib/features/resume/documentCss.js.map +1 -0
- package/lib/features/resume/draft.js +89 -0
- package/lib/features/resume/draft.js.map +1 -0
- package/lib/features/resume/exportResume.js +43 -0
- package/lib/features/resume/exportResume.js.map +1 -0
- package/lib/features/resume/pickResumePhoto.js +22 -0
- package/lib/features/resume/pickResumePhoto.js.map +1 -0
- package/lib/features/resume/renderResume.js +121 -0
- package/lib/features/resume/renderResume.js.map +1 -0
- package/lib/features/resume/resumeClient.js +69 -0
- package/lib/features/resume/resumeClient.js.map +1 -0
- package/lib/features/resume/resumeExec.js +14 -0
- package/lib/features/resume/resumeExec.js.map +1 -0
- package/lib/features/resume/resumeIndex.js +244 -0
- package/lib/features/resume/resumeIndex.js.map +1 -0
- package/lib/features/resume/resumeRuntime.js +50 -0
- package/lib/features/resume/resumeRuntime.js.map +1 -0
- package/lib/features/resume/resumeTheme.js +34 -0
- package/lib/features/resume/resumeTheme.js.map +1 -0
- package/lib/features/resume/resumeToolbox.js +49 -0
- package/lib/features/resume/resumeToolbox.js.map +1 -0
- package/lib/features/resume/templates.js +90 -0
- package/lib/features/resume/templates.js.map +1 -0
- package/lib/features/resume/types.js +10 -0
- package/lib/features/resume/types.js.map +1 -0
- package/lib/features/resume/useResumeSession.js +183 -0
- package/lib/features/resume/useResumeSession.js.map +1 -0
- package/lib/features/shopping/DealsPanel.js +254 -0
- package/lib/features/shopping/DealsPanel.js.map +1 -0
- package/lib/features/shopping/HistoryPanel.js +147 -0
- package/lib/features/shopping/HistoryPanel.js.map +1 -0
- package/lib/features/shopping/OrdersPanel.js +157 -0
- package/lib/features/shopping/OrdersPanel.js.map +1 -0
- package/lib/features/shopping/ProductCard.js +326 -0
- package/lib/features/shopping/ProductCard.js.map +1 -0
- package/lib/features/shopping/ProductDetailSheet.js +313 -0
- package/lib/features/shopping/ProductDetailSheet.js.map +1 -0
- package/lib/features/shopping/ProductFilterBar.js +153 -0
- package/lib/features/shopping/ProductFilterBar.js.map +1 -0
- package/lib/features/shopping/ProductPhoto.js +27 -0
- package/lib/features/shopping/ProductPhoto.js.map +1 -0
- package/lib/features/shopping/SavedPanel.js +139 -0
- package/lib/features/shopping/SavedPanel.js.map +1 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js +436 -0
- package/lib/features/shopping/ShoppingAgentChatPane.js.map +1 -0
- package/lib/features/shopping/ShoppingExperience.js +888 -0
- package/lib/features/shopping/ShoppingExperience.js.map +1 -0
- package/lib/features/shopping/TrendingSections.js +199 -0
- package/lib/features/shopping/TrendingSections.js.map +1 -0
- package/lib/features/shopping/WatchlistPanel.js +148 -0
- package/lib/features/shopping/WatchlistPanel.js.map +1 -0
- package/lib/features/shopping/catalog.js +238 -0
- package/lib/features/shopping/catalog.js.map +1 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js +175 -0
- package/lib/features/shopping/chat/ShoppingChatResultCard.js.map +1 -0
- package/lib/features/shopping/chat/streamAssistantReply.js +34 -0
- package/lib/features/shopping/chat/streamAssistantReply.js.map +1 -0
- package/lib/features/shopping/chat/widgetContent.js +233 -0
- package/lib/features/shopping/chat/widgetContent.js.map +1 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js +162 -0
- package/lib/features/shopping/hooks/useTrendingProducts.js.map +1 -0
- package/lib/features/shopping/productImage.js +42 -0
- package/lib/features/shopping/productImage.js.map +1 -0
- package/lib/features/shopping/savedProducts.js +84 -0
- package/lib/features/shopping/savedProducts.js.map +1 -0
- package/lib/features/shopping/services/catalogActions.js +166 -0
- package/lib/features/shopping/services/catalogActions.js.map +1 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js +58 -0
- package/lib/features/shopping/services/parsePriceCheckIntent.js.map +1 -0
- package/lib/features/shopping/services/parseShoppingIntent.js +67 -0
- package/lib/features/shopping/services/parseShoppingIntent.js.map +1 -0
- package/lib/features/shopping/services/productAvailability.js +25 -0
- package/lib/features/shopping/services/productAvailability.js.map +1 -0
- package/lib/features/shopping/services/productFilters.js +72 -0
- package/lib/features/shopping/services/productFilters.js.map +1 -0
- package/lib/features/shopping/services/retailerUrl.js +75 -0
- package/lib/features/shopping/services/retailerUrl.js.map +1 -0
- package/lib/features/shopping/services/shoppingChatReply.js +46 -0
- package/lib/features/shopping/services/shoppingChatReply.js.map +1 -0
- package/lib/features/shopping/services/shoppingProductSearch.js +336 -0
- package/lib/features/shopping/services/shoppingProductSearch.js.map +1 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js +41 -0
- package/lib/features/shopping/services/shoppingSearchConnectorClient.js.map +1 -0
- package/lib/features/shopping/shopAgentSwipe.js +7 -0
- package/lib/features/shopping/shopAgentSwipe.js.map +1 -0
- package/lib/features/shopping/shoppingCart.js +116 -0
- package/lib/features/shopping/shoppingCart.js.map +1 -0
- package/lib/features/shopping/shoppingExec.js +14 -0
- package/lib/features/shopping/shoppingExec.js.map +1 -0
- package/lib/features/shopping/shoppingHistoryStore.js +176 -0
- package/lib/features/shopping/shoppingHistoryStore.js.map +1 -0
- package/lib/features/shopping/shoppingRuntime.js +63 -0
- package/lib/features/shopping/shoppingRuntime.js.map +1 -0
- package/lib/features/shopping/timeAgo.js +14 -0
- package/lib/features/shopping/timeAgo.js.map +1 -0
- package/lib/features/shopping/useShoppingSearch.js +262 -0
- package/lib/features/shopping/useShoppingSearch.js.map +1 -0
- package/lib/features/travel/BookHeaderGlow.js +48 -0
- package/lib/features/travel/BookHeaderGlow.js.map +1 -0
- package/lib/features/travel/BookingsPanel.js +29 -0
- package/lib/features/travel/BookingsPanel.js.map +1 -0
- package/lib/features/travel/DiscoverPanel.js +155 -0
- package/lib/features/travel/DiscoverPanel.js.map +1 -0
- package/lib/features/travel/FlightCompareBar.js +86 -0
- package/lib/features/travel/FlightCompareBar.js.map +1 -0
- package/lib/features/travel/FlightDealsBoard.js +100 -0
- package/lib/features/travel/FlightDealsBoard.js.map +1 -0
- package/lib/features/travel/HistoryPanel.js +82 -0
- package/lib/features/travel/HistoryPanel.js.map +1 -0
- package/lib/features/travel/PopularDestinations.js +144 -0
- package/lib/features/travel/PopularDestinations.js.map +1 -0
- package/lib/features/travel/SavedPanel.js +27 -0
- package/lib/features/travel/SavedPanel.js.map +1 -0
- package/lib/features/travel/TravelAgentChatPane.js +303 -0
- package/lib/features/travel/TravelAgentChatPane.js.map +1 -0
- package/lib/features/travel/TravelBookHero.js +425 -0
- package/lib/features/travel/TravelBookHero.js.map +1 -0
- package/lib/features/travel/TravelDatesField.js +234 -0
- package/lib/features/travel/TravelDatesField.js.map +1 -0
- package/lib/features/travel/TravelDetailSheet.js +106 -0
- package/lib/features/travel/TravelDetailSheet.js.map +1 -0
- package/lib/features/travel/TravelExperience.js +624 -0
- package/lib/features/travel/TravelExperience.js.map +1 -0
- package/lib/features/travel/TravelGuestsField.js +85 -0
- package/lib/features/travel/TravelGuestsField.js.map +1 -0
- package/lib/features/travel/TravelLanding.js +318 -0
- package/lib/features/travel/TravelLanding.js.map +1 -0
- package/lib/features/travel/TravelLocationField.js +179 -0
- package/lib/features/travel/TravelLocationField.js.map +1 -0
- package/lib/features/travel/TravelPropertyCard.js +266 -0
- package/lib/features/travel/TravelPropertyCard.js.map +1 -0
- package/lib/features/travel/TravelPropertyPhoto.js +22 -0
- package/lib/features/travel/TravelPropertyPhoto.js.map +1 -0
- package/lib/features/travel/TravelRailFlyout.js +79 -0
- package/lib/features/travel/TravelRailFlyout.js.map +1 -0
- package/lib/features/travel/TravelResultsMap.js +126 -0
- package/lib/features/travel/TravelResultsMap.js.map +1 -0
- package/lib/features/travel/WorkspacePanel.js +148 -0
- package/lib/features/travel/WorkspacePanel.js.map +1 -0
- package/lib/features/travel/appNav.js +244 -0
- package/lib/features/travel/appNav.js.map +1 -0
- package/lib/features/travel/calendarDays.js +50 -0
- package/lib/features/travel/calendarDays.js.map +1 -0
- package/lib/features/travel/catalog.js +72 -0
- package/lib/features/travel/catalog.js.map +1 -0
- package/lib/features/travel/chat/TravelChatResultCard.js +107 -0
- package/lib/features/travel/chat/TravelChatResultCard.js.map +1 -0
- package/lib/features/travel/chat/widgetContent.js +107 -0
- package/lib/features/travel/chat/widgetContent.js.map +1 -0
- package/lib/features/travel/flightDeals.js +65 -0
- package/lib/features/travel/flightDeals.js.map +1 -0
- package/lib/features/travel/mapCoordinates.js +36 -0
- package/lib/features/travel/mapCoordinates.js.map +1 -0
- package/lib/features/travel/parseTravelIntent.js +303 -0
- package/lib/features/travel/parseTravelIntent.js.map +1 -0
- package/lib/features/travel/savedStays.js +66 -0
- package/lib/features/travel/savedStays.js.map +1 -0
- package/lib/features/travel/services/flightDealsBoard.js +111 -0
- package/lib/features/travel/services/flightDealsBoard.js.map +1 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js +42 -0
- package/lib/features/travel/services/flightSearchConnectorClient.js.map +1 -0
- package/lib/features/travel/services/geocodeLocation.js +79 -0
- package/lib/features/travel/services/geocodeLocation.js.map +1 -0
- package/lib/features/travel/services/placePredictions.js +113 -0
- package/lib/features/travel/services/placePredictions.js.map +1 -0
- package/lib/features/travel/services/resolveOriginCity.js +27 -0
- package/lib/features/travel/services/resolveOriginCity.js.map +1 -0
- package/lib/features/travel/services/resortifiConnectorClient.js +76 -0
- package/lib/features/travel/services/resortifiConnectorClient.js.map +1 -0
- package/lib/features/travel/services/travelFlightSearch.js +289 -0
- package/lib/features/travel/services/travelFlightSearch.js.map +1 -0
- package/lib/features/travel/services/travelPropertySearch.js +377 -0
- package/lib/features/travel/services/travelPropertySearch.js.map +1 -0
- package/lib/features/travel/travelAgentSwipe.js +7 -0
- package/lib/features/travel/travelAgentSwipe.js.map +1 -0
- package/lib/features/travel/travelExec.js +14 -0
- package/lib/features/travel/travelExec.js.map +1 -0
- package/lib/features/travel/travelHistoryStore.js +108 -0
- package/lib/features/travel/travelHistoryStore.js.map +1 -0
- package/lib/features/travel/travelRuntime.js +62 -0
- package/lib/features/travel/travelRuntime.js.map +1 -0
- package/lib/features/travel/types.js +9 -0
- package/lib/features/travel/types.js.map +1 -0
- package/lib/features/travel/useTravelSearch.js +330 -0
- package/lib/features/travel/useTravelSearch.js.map +1 -0
- package/lib/features/travel/workspaceContent.js +548 -0
- package/lib/features/travel/workspaceContent.js.map +1 -0
- package/lib/hooks/useCdecliChannel.js +128 -6
- package/lib/hooks/useCdecliChannel.js.map +1 -1
- package/lib/hooks/useChatApi.js +4 -2
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/useChatStream.js +77 -63
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/hooks/useHostConnectorCard.js +24 -0
- package/lib/hooks/useHostConnectorCard.js.map +1 -0
- package/lib/hooks/useObtainSystemToken.js +23 -5
- package/lib/hooks/useObtainSystemToken.js.map +1 -1
- package/lib/hooks/webViewRetentionPolicy.js +1 -0
- package/lib/hooks/webViewRetentionPolicy.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Chat/index.js +51 -22
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ChatNative/index.js +13 -2
- package/lib/screens/ChatNative/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +3 -3
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/ChatHistoryLanding.js +32 -32
- package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js +12 -6
- package/lib/screens/JobSearchNative/useJobSearchHostChat.js.map +1 -1
- package/lib/screens/ResumeNative/useResumeHostChat.js +12 -6
- package/lib/screens/ResumeNative/useResumeHostChat.js.map +1 -1
- package/lib/screens/ShoppingNative/useShoppingHostChat.js +12 -6
- package/lib/screens/ShoppingNative/useShoppingHostChat.js.map +1 -1
- package/lib/screens/TravelNative/useTravelHostChat.js +12 -6
- package/lib/screens/TravelNative/useTravelHostChat.js.map +1 -1
- package/lib/screens/WebBuilder/WebViewWithNavigation.js +2 -2
- package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -1
- package/lib/services/brainQuickReply.js +38 -1
- package/lib/services/brainQuickReply.js.map +1 -1
- package/lib/state/chatThreadMerge.js +6 -1
- package/lib/state/chatThreadMerge.js.map +1 -1
- 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"}
|