@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,244 @@
|
|
|
1
|
+
import {resumeTitle,normalizeResume}from'./draft.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 CHANNEL_FIELDS = "id surface channelId title metadata updatedAt sessionId";
|
|
21
|
+
function newResumeId() {
|
|
22
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
23
|
+
return crypto.randomUUID();
|
|
24
|
+
}
|
|
25
|
+
return `resume-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
26
|
+
}
|
|
27
|
+
function buildResumeState(resume, accent) {
|
|
28
|
+
return __spreadValues({
|
|
29
|
+
version: 1,
|
|
30
|
+
savedAt: Date.now(),
|
|
31
|
+
resume
|
|
32
|
+
}, accent ? {
|
|
33
|
+
accent
|
|
34
|
+
} : {});
|
|
35
|
+
}
|
|
36
|
+
function coerceResumeState(value) {
|
|
37
|
+
const parsed = coerceMetadata(value);
|
|
38
|
+
if (!parsed || parsed.version !== 1) return null;
|
|
39
|
+
const resume = parsed.resume;
|
|
40
|
+
if (!resume || typeof resume !== "object" || !resume.basics) return null;
|
|
41
|
+
return __spreadProps(__spreadValues({}, parsed), {
|
|
42
|
+
resume: normalizeResume(resume)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
async function fetchMyResumes(opts) {
|
|
46
|
+
var _a, _b, _c, _d, _e;
|
|
47
|
+
if (!opts.url) return {
|
|
48
|
+
resumes: [],
|
|
49
|
+
error: "No resume index configured for this build."
|
|
50
|
+
};
|
|
51
|
+
let payload;
|
|
52
|
+
try {
|
|
53
|
+
const response = await fetch(opts.url, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: __spreadValues({
|
|
56
|
+
"content-type": "application/json"
|
|
57
|
+
}, opts.token ? {
|
|
58
|
+
authorization: `Bearer ${opts.token}`
|
|
59
|
+
} : {}),
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
query: `query MySurfaceChannels($surface: SurfaceType) {
|
|
62
|
+
mySurfaceChannels(surface: $surface) { ${CHANNEL_FIELDS} }
|
|
63
|
+
}`,
|
|
64
|
+
variables: {
|
|
65
|
+
surface: "resume"
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
signal: opts.signal
|
|
69
|
+
});
|
|
70
|
+
if (response.status === 401 || response.status === 403) {
|
|
71
|
+
return {
|
|
72
|
+
resumes: [],
|
|
73
|
+
error: "Your session expired. Sign in again to see your resumes."
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
return {
|
|
78
|
+
resumes: [],
|
|
79
|
+
error: `The resume index is unreachable (HTTP ${response.status}).`
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
payload = await response.json();
|
|
83
|
+
} catch (err) {
|
|
84
|
+
if (err instanceof Error && err.name === "AbortError") return {
|
|
85
|
+
resumes: [],
|
|
86
|
+
error: null
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
resumes: [],
|
|
90
|
+
error: "Could not reach the resume index. Check your connection."
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
if ((_a = payload == null ? void 0 : payload.errors) == null ? void 0 : _a.length) {
|
|
94
|
+
const raw = ((_b = payload.errors[0]) == null ? void 0 : _b.message) || "";
|
|
95
|
+
const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);
|
|
96
|
+
return {
|
|
97
|
+
resumes: [],
|
|
98
|
+
error: isAuth ? "Your session expired. Sign in again to see your resumes." : raw || "The resume index rejected the request."
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const resumes = [];
|
|
102
|
+
for (const row of (_d = (_c = payload == null ? void 0 : payload.data) == null ? void 0 : _c.mySurfaceChannels) != null ? _d : []) {
|
|
103
|
+
const channelId = typeof (row == null ? void 0 : row.channelId) === "string" ? row.channelId : "";
|
|
104
|
+
if (!channelId) continue;
|
|
105
|
+
const state = coerceResumeState(row == null ? void 0 : row.metadata);
|
|
106
|
+
if (!state) continue;
|
|
107
|
+
const title = typeof (row == null ? void 0 : row.title) === "string" && row.title.trim() || resumeTitle(state.resume);
|
|
108
|
+
resumes.push(__spreadProps(__spreadValues({
|
|
109
|
+
channelId,
|
|
110
|
+
title,
|
|
111
|
+
savedAt: (_e = state.savedAt) != null ? _e : 0
|
|
112
|
+
}, typeof (row == null ? void 0 : row.sessionId) === "string" && row.sessionId ? {
|
|
113
|
+
sessionId: row.sessionId
|
|
114
|
+
} : {}), {
|
|
115
|
+
state
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
resumes.sort((a, b) => b.savedAt - a.savedAt);
|
|
119
|
+
return {
|
|
120
|
+
resumes,
|
|
121
|
+
error: null
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async function pullResume(opts) {
|
|
125
|
+
var _a, _b, _c, _d;
|
|
126
|
+
const channelId = (_a = opts.channelId) == null ? void 0 : _a.trim();
|
|
127
|
+
if (!channelId || !opts.url) return null;
|
|
128
|
+
try {
|
|
129
|
+
const response = await fetch(opts.url, {
|
|
130
|
+
method: "POST",
|
|
131
|
+
headers: __spreadValues({
|
|
132
|
+
"content-type": "application/json"
|
|
133
|
+
}, opts.token ? {
|
|
134
|
+
authorization: `Bearer ${opts.token}`
|
|
135
|
+
} : {}),
|
|
136
|
+
body: JSON.stringify({
|
|
137
|
+
query: `query SurfaceChannel($surface: SurfaceType!, $channelId: String!) {
|
|
138
|
+
surfaceChannel(surface: $surface, channelId: $channelId) { ${CHANNEL_FIELDS} }
|
|
139
|
+
}`,
|
|
140
|
+
variables: {
|
|
141
|
+
surface: "resume",
|
|
142
|
+
channelId
|
|
143
|
+
}
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
if (!response.ok) return null;
|
|
147
|
+
const payload = await response.json();
|
|
148
|
+
if ((_b = payload == null ? void 0 : payload.errors) == null ? void 0 : _b.length) return null;
|
|
149
|
+
return coerceResumeState((_d = (_c = payload == null ? void 0 : payload.data) == null ? void 0 : _c.surfaceChannel) == null ? void 0 : _d.metadata);
|
|
150
|
+
} catch (e) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async function pushResume(opts) {
|
|
155
|
+
var _a, _b, _c, _d, _e;
|
|
156
|
+
const channelId = (_a = opts.channelId) == null ? void 0 : _a.trim();
|
|
157
|
+
if (!channelId || !opts.url) return false;
|
|
158
|
+
try {
|
|
159
|
+
const response = await fetch(opts.url, {
|
|
160
|
+
method: "POST",
|
|
161
|
+
headers: __spreadValues({
|
|
162
|
+
"content-type": "application/json"
|
|
163
|
+
}, opts.token ? {
|
|
164
|
+
authorization: `Bearer ${opts.token}`
|
|
165
|
+
} : {}),
|
|
166
|
+
body: JSON.stringify({
|
|
167
|
+
query: `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {
|
|
168
|
+
registerSurfaceChannel(input: $input) { ${CHANNEL_FIELDS} }
|
|
169
|
+
}`,
|
|
170
|
+
variables: {
|
|
171
|
+
input: __spreadProps(__spreadValues({
|
|
172
|
+
surface: "resume",
|
|
173
|
+
channelId
|
|
174
|
+
}, opts.sessionId ? {
|
|
175
|
+
sessionId: opts.sessionId
|
|
176
|
+
} : {}), {
|
|
177
|
+
title: resumeTitle(opts.state.resume),
|
|
178
|
+
metadata: opts.state
|
|
179
|
+
})
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
});
|
|
183
|
+
if (!response.ok) return false;
|
|
184
|
+
const payload = await response.json();
|
|
185
|
+
if ((_b = payload == null ? void 0 : payload.errors) == null ? void 0 : _b.length) {
|
|
186
|
+
if (__DEV__) {
|
|
187
|
+
console.warn("[pushResume]", (_c = payload.errors[0]) == null ? void 0 : _c.message);
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
return Boolean((_e = (_d = payload == null ? void 0 : payload.data) == null ? void 0 : _d.registerSurfaceChannel) == null ? void 0 : _e.id);
|
|
192
|
+
} catch (err) {
|
|
193
|
+
if (__DEV__) {
|
|
194
|
+
console.warn("[pushResume] failed:", err);
|
|
195
|
+
}
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
async function deleteResume(opts) {
|
|
200
|
+
var _a, _b, _c, _d;
|
|
201
|
+
const channelId = (_a = opts.channelId) == null ? void 0 : _a.trim();
|
|
202
|
+
if (!channelId || !opts.url) return false;
|
|
203
|
+
try {
|
|
204
|
+
const response = await fetch(opts.url, {
|
|
205
|
+
method: "POST",
|
|
206
|
+
headers: __spreadValues({
|
|
207
|
+
"content-type": "application/json"
|
|
208
|
+
}, opts.token ? {
|
|
209
|
+
authorization: `Bearer ${opts.token}`
|
|
210
|
+
} : {}),
|
|
211
|
+
body: JSON.stringify({
|
|
212
|
+
query: `mutation DeleteSurfaceChannel($surface: SurfaceType!, $channelId: String!) {
|
|
213
|
+
deleteSurfaceChannel(surface: $surface, channelId: $channelId)
|
|
214
|
+
}`,
|
|
215
|
+
variables: {
|
|
216
|
+
surface: "resume",
|
|
217
|
+
channelId
|
|
218
|
+
}
|
|
219
|
+
})
|
|
220
|
+
});
|
|
221
|
+
if (!response.ok) return false;
|
|
222
|
+
const payload = await response.json();
|
|
223
|
+
if ((_b = payload == null ? void 0 : payload.errors) == null ? void 0 : _b.length) {
|
|
224
|
+
if (__DEV__) {
|
|
225
|
+
console.warn("[deleteResume]", (_c = payload.errors[0]) == null ? void 0 : _c.message);
|
|
226
|
+
}
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
return Boolean((_d = payload == null ? void 0 : payload.data) == null ? void 0 : _d.deleteSurfaceChannel);
|
|
230
|
+
} catch (err) {
|
|
231
|
+
if (__DEV__) {
|
|
232
|
+
console.warn("[deleteResume] failed:", err);
|
|
233
|
+
}
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
function coerceMetadata(value) {
|
|
238
|
+
if (typeof value !== "string") return value;
|
|
239
|
+
try {
|
|
240
|
+
return JSON.parse(value);
|
|
241
|
+
} catch (e) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}export{buildResumeState,coerceResumeState,deleteResume,fetchMyResumes,newResumeId,pullResume,pushResume};//# sourceMappingURL=resumeIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeIndex.js","sources":["../../../src/features/resume/resumeIndex.ts"],"sourcesContent":["/**\n * Surface-index reader/writer for resumes (`surface: 'resume'`).\n *\n * Native twin of `@yantra/resume-surface` state/resumeChannel.ts, shaped like\n * designIndex / canvas surfaceIndex — one row per resume, whole state in\n * metadata, replaced wholesale on every write.\n */\n\nimport { normalizeResume, resumeTitle } from './draft';\nimport type { ResumeData } from './types';\n\nconst CHANNEL_FIELDS = 'id surface channelId title metadata updatedAt sessionId';\n\nexport interface PersistedResumeState {\n version: 1;\n savedAt: number;\n resume: ResumeData;\n accent?: string;\n}\n\nexport interface ResumeChannelSummary {\n channelId: string;\n title: string;\n savedAt: number;\n sessionId?: string;\n state: PersistedResumeState;\n}\n\nexport interface FetchResumesResult {\n resumes: ResumeChannelSummary[];\n error: string | null;\n}\n\nexport function newResumeId(): string {\n // react-native-get-random-values polyfills crypto in the app entry.\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return `resume-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function buildResumeState(resume: ResumeData, accent?: string): PersistedResumeState {\n return { version: 1, savedAt: Date.now(), resume, ...(accent ? { accent } : {}) };\n}\n\nexport function coerceResumeState(value: unknown): PersistedResumeState | null {\n const parsed = coerceMetadata(value) as PersistedResumeState | null;\n if (!parsed || parsed.version !== 1) return null;\n const resume = parsed.resume as ResumeData | undefined;\n if (!resume || typeof resume !== 'object' || !resume.basics) return null;\n return { ...parsed, resume: normalizeResume(resume) };\n}\n\nexport async function fetchMyResumes(opts: {\n url: string;\n token?: string | null;\n signal?: AbortSignal;\n}): Promise<FetchResumesResult> {\n if (!opts.url) return { resumes: [], error: 'No resume index configured for this build.' };\n\n let payload: {\n data?: { mySurfaceChannels?: Array<Record<string, unknown>> | null } | null;\n errors?: Array<{ message?: string }>;\n };\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `query MySurfaceChannels($surface: SurfaceType) {\n mySurfaceChannels(surface: $surface) { ${CHANNEL_FIELDS} }\n }`,\n variables: { surface: 'resume' },\n }),\n signal: opts.signal,\n });\n if (response.status === 401 || response.status === 403) {\n return { resumes: [], error: 'Your session expired. Sign in again to see your resumes.' };\n }\n if (!response.ok) {\n return { resumes: [], error: `The resume index is unreachable (HTTP ${response.status}).` };\n }\n payload = await response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return { resumes: [], error: null };\n return { resumes: [], error: 'Could not reach the resume index. Check your connection.' };\n }\n\n if (payload?.errors?.length) {\n const raw = payload.errors[0]?.message || '';\n const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);\n return {\n resumes: [],\n error: isAuth\n ? 'Your session expired. Sign in again to see your resumes.'\n : raw || 'The resume index rejected the request.',\n };\n }\n\n const resumes: ResumeChannelSummary[] = [];\n for (const row of payload?.data?.mySurfaceChannels ?? []) {\n const channelId = typeof row?.channelId === 'string' ? row.channelId : '';\n if (!channelId) continue;\n const state = coerceResumeState(row?.metadata);\n if (!state) continue;\n const title = (typeof row?.title === 'string' && row.title.trim()) || resumeTitle(state.resume);\n resumes.push({\n channelId,\n title,\n savedAt: state.savedAt ?? 0,\n ...(typeof row?.sessionId === 'string' && row.sessionId ? { sessionId: row.sessionId } : {}),\n state,\n });\n }\n resumes.sort((a, b) => b.savedAt - a.savedAt);\n return { resumes, error: null };\n}\n\nexport async function pullResume(opts: {\n url: string;\n token?: string | null;\n channelId: string;\n}): Promise<PersistedResumeState | null> {\n const channelId = opts.channelId?.trim();\n if (!channelId || !opts.url) return null;\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `query SurfaceChannel($surface: SurfaceType!, $channelId: String!) {\n surfaceChannel(surface: $surface, channelId: $channelId) { ${CHANNEL_FIELDS} }\n }`,\n variables: { surface: 'resume', channelId },\n }),\n });\n if (!response.ok) return null;\n const payload = (await response.json()) as {\n data?: { surfaceChannel?: Record<string, unknown> | null };\n errors?: Array<{ message?: string }>;\n };\n if (payload?.errors?.length) return null;\n return coerceResumeState(payload?.data?.surfaceChannel?.metadata);\n } catch {\n return null;\n }\n}\n\nexport async function pushResume(opts: {\n url: string;\n token?: string | null;\n channelId: string;\n state: PersistedResumeState;\n sessionId?: string;\n}): Promise<boolean> {\n const channelId = opts.channelId?.trim();\n if (!channelId || !opts.url) return false;\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {\n registerSurfaceChannel(input: $input) { ${CHANNEL_FIELDS} }\n }`,\n variables: {\n input: {\n surface: 'resume',\n channelId,\n ...(opts.sessionId ? { sessionId: opts.sessionId } : {}),\n title: resumeTitle(opts.state.resume),\n metadata: opts.state,\n },\n },\n }),\n });\n if (!response.ok) return false;\n const payload = (await response.json()) as {\n data?: { registerSurfaceChannel?: { id?: string } | null };\n errors?: Array<{ message?: string }>;\n };\n if (payload?.errors?.length) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushResume]', payload.errors[0]?.message);\n }\n return false;\n }\n return Boolean(payload?.data?.registerSurfaceChannel?.id);\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[pushResume] failed:', err);\n }\n return false;\n }\n}\n\n/** Hard-delete one resume row from the index. Assets are not touched. */\nexport async function deleteResume(opts: { url: string; token?: string | null; channelId: string }): Promise<boolean> {\n const channelId = opts.channelId?.trim();\n if (!channelId || !opts.url) return false;\n try {\n const response = await fetch(opts.url, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(opts.token ? { authorization: `Bearer ${opts.token}` } : {}),\n },\n body: JSON.stringify({\n query: `mutation DeleteSurfaceChannel($surface: SurfaceType!, $channelId: String!) {\n deleteSurfaceChannel(surface: $surface, channelId: $channelId)\n }`,\n variables: { surface: 'resume', channelId },\n }),\n });\n if (!response.ok) return false;\n const payload = (await response.json()) as {\n data?: { deleteSurfaceChannel?: boolean | null };\n errors?: Array<{ message?: string }>;\n };\n if (payload?.errors?.length) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[deleteResume]', payload.errors[0]?.message);\n }\n return false;\n }\n return Boolean(payload?.data?.deleteSurfaceChannel);\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[deleteResume] failed:', err);\n }\n return false;\n }\n}\n\nfunction coerceMetadata(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
const EMPTY = {
|
|
18
|
+
exec: async () => ({
|
|
19
|
+
success: false,
|
|
20
|
+
error: "Resume: no connector executor wired."
|
|
21
|
+
})
|
|
22
|
+
};
|
|
23
|
+
let current = EMPTY;
|
|
24
|
+
function setResumeRuntime(next) {
|
|
25
|
+
current = __spreadValues(__spreadValues({}, EMPTY), next);
|
|
26
|
+
}
|
|
27
|
+
function getResumeRuntime() {
|
|
28
|
+
return current;
|
|
29
|
+
}
|
|
30
|
+
function unwrapConnectorEnvelope(raw) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
if (raw && typeof raw === "object") {
|
|
33
|
+
const row = raw;
|
|
34
|
+
if ("data" in row && ("successful" in row || "success" in row)) {
|
|
35
|
+
const ok = (_a = row.successful) != null ? _a : row.success;
|
|
36
|
+
if (ok === false) return {
|
|
37
|
+
success: false,
|
|
38
|
+
error: String((_b = row.error) != null ? _b : "Connector action failed")
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
data: row.data
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
success: true,
|
|
48
|
+
data: raw
|
|
49
|
+
};
|
|
50
|
+
}export{getResumeRuntime,setResumeRuntime,unwrapConnectorEnvelope};//# sourceMappingURL=resumeRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeRuntime.js","sources":["../../../src/features/resume/resumeRuntime.ts"],"sourcesContent":["export interface ConnectorExecutionResult<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\nexport type ConnectorExec = <T = unknown>(\n connector: string,\n action: string,\n params: Record<string, unknown>,\n) => Promise<ConnectorExecutionResult<T>>;\n\nexport interface ResumeRuntime {\n exec: ConnectorExec;\n}\n\nconst EMPTY: ResumeRuntime = {\n exec: async () => ({ success: false, error: 'Resume: no connector executor wired.' }),\n};\n\nlet current: ResumeRuntime = EMPTY;\n\nexport function setResumeRuntime(next: Partial<ResumeRuntime>): void {\n current = { ...EMPTY, ...next };\n}\n\nexport function getResumeRuntime(): ResumeRuntime {\n return current;\n}\n\nexport function unwrapConnectorEnvelope<T>(raw: unknown): ConnectorExecutionResult<T> {\n if (raw && typeof raw === 'object') {\n const row = raw as { successful?: boolean; success?: boolean; data?: unknown; error?: unknown };\n if ('data' in row && ('successful' in row || 'success' in row)) {\n const ok = row.successful ?? row.success;\n if (ok === false) return { success: false, error: String(row.error ?? 'Connector action failed') };\n return { success: true, data: row.data as T };\n }\n }\n return { success: true, data: raw as T };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AASA,MAAM,KAAuB,GAAA;AAAA,EAC3B,MAAM,aAAa;AAAA,IACjB,OAAS,EAAA,KAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AACF,CAAA;AACA,IAAI,OAAyB,GAAA,KAAA;AACtB,SAAS,iBAAiB,IAAoC,EAAA;AACnE,EAAA,OAAA,GAAU,kCACL,KACA,CAAA,EAAA,IAAA,CAAA;AAEP;AACO,SAAS,gBAAkC,GAAA;AAChD,EAAO,OAAA,OAAA;AACT;AACO,SAAS,wBAA2B,GAA2C,EAAA;AAzBtF,EAAA,IAAA,EAAA,EAAA,EAAA;AA0BE,EAAI,IAAA,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAU,EAAA;AAClC,IAAA,MAAM,GAAM,GAAA,GAAA;AAMZ,IAAA,IAAI,MAAU,IAAA,GAAA,KAAQ,YAAgB,IAAA,GAAA,IAAO,aAAa,GAAM,CAAA,EAAA;AAC9D,MAAA,MAAM,EAAK,GAAA,CAAA,EAAA,GAAA,GAAA,CAAI,UAAJ,KAAA,IAAA,GAAA,EAAA,GAAkB,GAAI,CAAA,OAAA;AACjC,MAAI,IAAA,EAAA,KAAO,OAAc,OAAA;AAAA,QACvB,OAAS,EAAA,KAAA;AAAA,QACT,KAAO,EAAA,MAAA,CAAA,CAAO,EAAI,GAAA,GAAA,CAAA,KAAA,KAAJ,YAAa,yBAAyB;AAAA,OACtD;AACA,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,IAAA;AAAA,QACT,MAAM,GAAI,CAAA;AAAA,OACZ;AAAA;AACF;AAEF,EAAO,OAAA;AAAA,IACL,OAAS,EAAA,IAAA;AAAA,IACT,IAAM,EAAA;AAAA,GACR;AACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
function resumeTheme(isDark) {
|
|
2
|
+
if (isDark) {
|
|
3
|
+
return {
|
|
4
|
+
isDark: true,
|
|
5
|
+
ink: "#eef2ff",
|
|
6
|
+
muted: "#9aa4c2",
|
|
7
|
+
screen: "#0c101c",
|
|
8
|
+
card: "#161b2c",
|
|
9
|
+
border: "rgba(148,163,184,0.16)",
|
|
10
|
+
accent: "#818cf8",
|
|
11
|
+
accentSoft: "rgba(129,140,248,0.16)",
|
|
12
|
+
accentInk: "#0c101c",
|
|
13
|
+
chip: "#1e2538",
|
|
14
|
+
paperBg: "#0a0e18",
|
|
15
|
+
danger: "#fb7185",
|
|
16
|
+
success: "#34d399"
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
isDark: false,
|
|
21
|
+
ink: "#1c2438",
|
|
22
|
+
muted: "#5b657a",
|
|
23
|
+
screen: "#f3f5f9",
|
|
24
|
+
card: "#fcfcfe",
|
|
25
|
+
border: "#e4e8f0",
|
|
26
|
+
accent: "#4f46e5",
|
|
27
|
+
accentSoft: "#eef0ff",
|
|
28
|
+
accentInk: "#fcfcfe",
|
|
29
|
+
chip: "#eceff5",
|
|
30
|
+
paperBg: "#e8ebf2",
|
|
31
|
+
danger: "#e11d48",
|
|
32
|
+
success: "#059669"
|
|
33
|
+
};
|
|
34
|
+
}export{resumeTheme};//# sourceMappingURL=resumeTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeTheme.js","sources":["../../../src/features/resume/resumeTheme.ts"],"sourcesContent":["/**\n * Career-document visual tokens — indigo accent, paper surfaces (aligned with\n * job-search theme so Team apps feel like one family).\n */\nexport type ResumeTheme = {\n isDark: boolean;\n ink: string;\n muted: string;\n screen: string;\n card: string;\n border: string;\n accent: string;\n accentSoft: string;\n accentInk: string;\n chip: string;\n paperBg: string;\n danger: string;\n success: string;\n};\n\nexport function resumeTheme(isDark: boolean): ResumeTheme {\n if (isDark) {\n return {\n isDark: true,\n ink: '#eef2ff',\n muted: '#9aa4c2',\n screen: '#0c101c',\n card: '#161b2c',\n border: 'rgba(148,163,184,0.16)',\n accent: '#818cf8',\n accentSoft: 'rgba(129,140,248,0.16)',\n accentInk: '#0c101c',\n chip: '#1e2538',\n paperBg: '#0a0e18',\n danger: '#fb7185',\n success: '#34d399',\n };\n }\n return {\n isDark: false,\n ink: '#1c2438',\n muted: '#5b657a',\n screen: '#f3f5f9',\n card: '#fcfcfe',\n border: '#e4e8f0',\n accent: '#4f46e5',\n accentSoft: '#eef0ff',\n accentInk: '#fcfcfe',\n chip: '#eceff5',\n paperBg: '#e8ebf2',\n danger: '#e11d48',\n success: '#059669',\n };\n}\n"],"names":[],"mappings":"AAmBO,SAAS,YAAY,MAA8B,EAAA;AACxD,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA;AAAA,MACL,MAAQ,EAAA,IAAA;AAAA,MACR,GAAK,EAAA,SAAA;AAAA,MACL,KAAO,EAAA,SAAA;AAAA,MACP,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,MAAQ,EAAA,wBAAA;AAAA,MACR,MAAQ,EAAA,SAAA;AAAA,MACR,UAAY,EAAA,wBAAA;AAAA,MACZ,SAAW,EAAA,SAAA;AAAA,MACX,IAAM,EAAA,SAAA;AAAA,MACN,OAAS,EAAA,SAAA;AAAA,MACT,MAAQ,EAAA,SAAA;AAAA,MACR,OAAS,EAAA;AAAA,KACX;AAAA;AAEF,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA,KAAA;AAAA,IACR,GAAK,EAAA,SAAA;AAAA,IACL,KAAO,EAAA,SAAA;AAAA,IACP,MAAQ,EAAA,SAAA;AAAA,IACR,IAAM,EAAA,SAAA;AAAA,IACN,MAAQ,EAAA,SAAA;AAAA,IACR,MAAQ,EAAA,SAAA;AAAA,IACR,UAAY,EAAA,SAAA;AAAA,IACZ,SAAW,EAAA,SAAA;AAAA,IACX,IAAM,EAAA,SAAA;AAAA,IACN,OAAS,EAAA,SAAA;AAAA,IACT,MAAQ,EAAA,SAAA;AAAA,IACR,OAAS,EAAA;AAAA,GACX;AACF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const RESUME_SKILL_HINT = "Use the resume-builder skill. Edit the OPEN resume \u2014 never invent experience.";
|
|
2
|
+
const RESUME_TOOLBOX_ACTIONS = [{
|
|
3
|
+
id: "tailor",
|
|
4
|
+
title: "Tailor to a job",
|
|
5
|
+
badge: "Tailor",
|
|
6
|
+
description: "Rewrite against a specific posting.",
|
|
7
|
+
prompt: `${RESUME_SKILL_HINT} Tailor this resume to a specific job posting. Ask me for the posting if I have not pasted one, then rewrite the summary, reorder sections and bullets by relevance, and mirror the posting's language where it is honest to do so.`,
|
|
8
|
+
icon: "target"
|
|
9
|
+
}, {
|
|
10
|
+
id: "ats",
|
|
11
|
+
title: "Optimise for ATS",
|
|
12
|
+
badge: "ATS",
|
|
13
|
+
description: "Plain headings and parseable dates.",
|
|
14
|
+
prompt: `${RESUME_SKILL_HINT} Make this resume parse cleanly through applicant tracking systems: conventional section headings, consistent and machine-readable date ranges, and the role's standard keywords worked into real experience.`,
|
|
15
|
+
icon: "file-search-outline"
|
|
16
|
+
}, {
|
|
17
|
+
id: "quantify",
|
|
18
|
+
title: "Quantify the bullets",
|
|
19
|
+
badge: "Impact",
|
|
20
|
+
description: "Turn duties into outcomes with numbers.",
|
|
21
|
+
prompt: `${RESUME_SKILL_HINT} Rewrite the experience bullets as outcomes rather than responsibilities: strong verb, what changed, and a number where I have given you one. Where a number is missing, ask me for it instead of inventing it.`,
|
|
22
|
+
icon: "briefcase-outline"
|
|
23
|
+
}, {
|
|
24
|
+
id: "shorten",
|
|
25
|
+
title: "Cut to one page",
|
|
26
|
+
badge: "One page",
|
|
27
|
+
description: "Keep the strongest material.",
|
|
28
|
+
prompt: `${RESUME_SKILL_HINT} Cut this resume to a single page. Keep the most recent and most relevant roles in full, compress older ones to one line, drop sections that are not earning their space, and tell me what you removed.`,
|
|
29
|
+
icon: "arrow-collapse-vertical"
|
|
30
|
+
}, {
|
|
31
|
+
id: "proofread",
|
|
32
|
+
title: "Proofread",
|
|
33
|
+
badge: "Grammar",
|
|
34
|
+
description: "Spelling, tense, parallel structure.",
|
|
35
|
+
prompt: `${RESUME_SKILL_HINT} Proofread the whole resume: spelling, punctuation, consistent tense (past for previous roles, present for the current one), and parallel bullet structure. List what you changed.`,
|
|
36
|
+
icon: "spellcheck"
|
|
37
|
+
}, {
|
|
38
|
+
id: "tone",
|
|
39
|
+
title: "Adjust the tone",
|
|
40
|
+
badge: "Tone",
|
|
41
|
+
description: "Senior understated or energetic.",
|
|
42
|
+
prompt: `${RESUME_SKILL_HINT} Adjust the tone of the summary and bullets. Ask me which register I want (senior and understated, or energetic and specific) and apply it consistently without inflating any claim.`,
|
|
43
|
+
icon: "translate"
|
|
44
|
+
}];
|
|
45
|
+
const NEW_RESUME_ASK = "Build me a resume - ask me for my background, or take it from a CV I upload.";
|
|
46
|
+
const TAILOR_ASK = "Tailor my resume to a job description - ask me for the posting.";
|
|
47
|
+
function composeEditContext(title, resumeJson, instruction) {
|
|
48
|
+
return [instruction.trim(), "", `Open resume: **${title}**`, "```json", resumeJson, "```", "", "Apply edits to this resume document. Return the updated resume when done."].join("\n");
|
|
49
|
+
}export{NEW_RESUME_ASK,RESUME_TOOLBOX_ACTIONS,TAILOR_ASK,composeEditContext};//# sourceMappingURL=resumeToolbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeToolbox.js","sources":["../../../src/features/resume/resumeToolbox.ts"],"sourcesContent":["/** Curated agent follow-ups — mirror of web resumeToolbox.ts (icons as MCI names). */\n\nexport type ResumeToolboxActionId = 'tailor' | 'ats' | 'quantify' | 'shorten' | 'proofread' | 'tone';\n\nexport interface ResumeToolboxAction {\n id: ResumeToolboxActionId;\n title: string;\n badge: string;\n description: string;\n prompt: string;\n icon: string;\n}\n\nconst RESUME_SKILL_HINT = 'Use the resume-builder skill. Edit the OPEN resume — never invent experience.';\n\nexport const RESUME_TOOLBOX_ACTIONS: ResumeToolboxAction[] = [\n {\n id: 'tailor',\n title: 'Tailor to a job',\n badge: 'Tailor',\n description: 'Rewrite against a specific posting.',\n prompt: `${RESUME_SKILL_HINT} Tailor this resume to a specific job posting. Ask me for the posting if I have not pasted one, then rewrite the summary, reorder sections and bullets by relevance, and mirror the posting's language where it is honest to do so.`,\n icon: 'target',\n },\n {\n id: 'ats',\n title: 'Optimise for ATS',\n badge: 'ATS',\n description: 'Plain headings and parseable dates.',\n prompt: `${RESUME_SKILL_HINT} Make this resume parse cleanly through applicant tracking systems: conventional section headings, consistent and machine-readable date ranges, and the role's standard keywords worked into real experience.`,\n icon: 'file-search-outline',\n },\n {\n id: 'quantify',\n title: 'Quantify the bullets',\n badge: 'Impact',\n description: 'Turn duties into outcomes with numbers.',\n prompt: `${RESUME_SKILL_HINT} Rewrite the experience bullets as outcomes rather than responsibilities: strong verb, what changed, and a number where I have given you one. Where a number is missing, ask me for it instead of inventing it.`,\n icon: 'briefcase-outline',\n },\n {\n id: 'shorten',\n title: 'Cut to one page',\n badge: 'One page',\n description: 'Keep the strongest material.',\n prompt: `${RESUME_SKILL_HINT} Cut this resume to a single page. Keep the most recent and most relevant roles in full, compress older ones to one line, drop sections that are not earning their space, and tell me what you removed.`,\n icon: 'arrow-collapse-vertical',\n },\n {\n id: 'proofread',\n title: 'Proofread',\n badge: 'Grammar',\n description: 'Spelling, tense, parallel structure.',\n prompt: `${RESUME_SKILL_HINT} Proofread the whole resume: spelling, punctuation, consistent tense (past for previous roles, present for the current one), and parallel bullet structure. List what you changed.`,\n icon: 'spellcheck',\n },\n {\n id: 'tone',\n title: 'Adjust the tone',\n badge: 'Tone',\n description: 'Senior understated or energetic.',\n prompt: `${RESUME_SKILL_HINT} Adjust the tone of the summary and bullets. Ask me which register I want (senior and understated, or energetic and specific) and apply it consistently without inflating any claim.`,\n icon: 'translate',\n },\n];\n\nexport const NEW_RESUME_ASK = 'Build me a resume - ask me for my background, or take it from a CV I upload.';\nexport const TAILOR_ASK = 'Tailor my resume to a job description - ask me for the posting.';\n\n/** Prefix the open resume JSON so the host agent edits this document. */\nexport function composeEditContext(title: string, resumeJson: string, instruction: string): string {\n return [\n instruction.trim(),\n '',\n `Open resume: **${title}**`,\n '```json',\n resumeJson,\n '```',\n '',\n 'Apply edits to this resume document. Return the updated resume when done.',\n ].join('\\n');\n}\n"],"names":[],"mappings":"AAWA,MAAM,iBAAoB,GAAA,oFAAA;AACnB,MAAM,yBAAgD,CAAC;AAAA,EAC5D,EAAI,EAAA,QAAA;AAAA,EACJ,KAAO,EAAA,iBAAA;AAAA,EACP,KAAO,EAAA,QAAA;AAAA,EACP,WAAa,EAAA,qCAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,mOAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,KAAA;AAAA,EACJ,KAAO,EAAA,kBAAA;AAAA,EACP,KAAO,EAAA,KAAA;AAAA,EACP,WAAa,EAAA,qCAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,6MAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,UAAA;AAAA,EACJ,KAAO,EAAA,sBAAA;AAAA,EACP,KAAO,EAAA,QAAA;AAAA,EACP,WAAa,EAAA,yCAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,+MAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,SAAA;AAAA,EACJ,KAAO,EAAA,iBAAA;AAAA,EACP,KAAO,EAAA,UAAA;AAAA,EACP,WAAa,EAAA,8BAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,uMAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,WAAA;AAAA,EACJ,KAAO,EAAA,WAAA;AAAA,EACP,KAAO,EAAA,SAAA;AAAA,EACP,WAAa,EAAA,sCAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,kLAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,MAAA;AAAA,EACJ,KAAO,EAAA,iBAAA;AAAA,EACP,KAAO,EAAA,MAAA;AAAA,EACP,WAAa,EAAA,kCAAA;AAAA,EACb,MAAA,EAAQ,GAAG,iBAAiB,CAAA,oLAAA,CAAA;AAAA,EAC5B,IAAM,EAAA;AACR,CAAC;AACM,MAAM,cAAiB,GAAA;AACvB,MAAM,UAAa,GAAA;AAGV,SAAA,kBAAA,CAAmB,KAAe,EAAA,UAAA,EAAoB,WAA6B,EAAA;AACjG,EAAA,OAAO,CAAC,WAAA,CAAY,IAAK,EAAA,EAAG,IAAI,CAAkB,eAAA,EAAA,KAAK,CAAM,EAAA,CAAA,EAAA,SAAA,EAAW,YAAY,KAAO,EAAA,EAAA,EAAI,2EAA2E,CAAA,CAAE,KAAK,IAAI,CAAA;AACvL"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const FALLBACK_TEMPLATE = {
|
|
2
|
+
id: "classic",
|
|
3
|
+
name: "Classic",
|
|
4
|
+
description: "Traditional single-column layout with a left-aligned header.",
|
|
5
|
+
layout: "classic",
|
|
6
|
+
colorScheme: {
|
|
7
|
+
primary: "#000000",
|
|
8
|
+
secondary: "#4b5563",
|
|
9
|
+
background: "#ffffff",
|
|
10
|
+
text: "#212529"
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const findTemplate = (catalog, id) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
return (_b = (_a = catalog.find((t) => t.id === id)) != null ? _a : catalog.find((t) => t.id === FALLBACK_TEMPLATE.id)) != null ? _b : FALLBACK_TEMPLATE;
|
|
16
|
+
};
|
|
17
|
+
const isTwoColumn = (layout) => layout === "left-right" || layout === "creative";
|
|
18
|
+
const FONT_OPTIONS = [{
|
|
19
|
+
value: "default",
|
|
20
|
+
label: "Sans"
|
|
21
|
+
}, {
|
|
22
|
+
value: "Georgia,serif",
|
|
23
|
+
label: "Serif"
|
|
24
|
+
}, {
|
|
25
|
+
value: "monospace",
|
|
26
|
+
label: "Mono"
|
|
27
|
+
}];
|
|
28
|
+
const DENSITY_OPTIONS = [{
|
|
29
|
+
value: "normal",
|
|
30
|
+
label: "Normal"
|
|
31
|
+
}, {
|
|
32
|
+
value: "compact",
|
|
33
|
+
label: "Compact"
|
|
34
|
+
}, {
|
|
35
|
+
value: "relaxed",
|
|
36
|
+
label: "Relaxed"
|
|
37
|
+
}];
|
|
38
|
+
const SANS_STACK = "-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif";
|
|
39
|
+
const densityMetrics = (density) => density === "compact" ? {
|
|
40
|
+
lineHeight: "1.32",
|
|
41
|
+
padding: "28px"
|
|
42
|
+
} : density === "relaxed" ? {
|
|
43
|
+
lineHeight: "1.7",
|
|
44
|
+
padding: "52px"
|
|
45
|
+
} : {
|
|
46
|
+
lineHeight: "1.5",
|
|
47
|
+
padding: "40px"
|
|
48
|
+
};
|
|
49
|
+
function rnDensity(density) {
|
|
50
|
+
if (density === "compact") return {
|
|
51
|
+
lineHeight: 17,
|
|
52
|
+
padding: 14,
|
|
53
|
+
fontSize: 12
|
|
54
|
+
};
|
|
55
|
+
if (density === "relaxed") return {
|
|
56
|
+
lineHeight: 24,
|
|
57
|
+
padding: 22,
|
|
58
|
+
fontSize: 14
|
|
59
|
+
};
|
|
60
|
+
return {
|
|
61
|
+
lineHeight: 20,
|
|
62
|
+
padding: 18,
|
|
63
|
+
fontSize: 13
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function fontFamily(font) {
|
|
67
|
+
if (!font || font === "default") return void 0;
|
|
68
|
+
if (font === "monospace") return "Courier";
|
|
69
|
+
if (font.startsWith("Georgia")) return "Georgia";
|
|
70
|
+
return void 0;
|
|
71
|
+
}
|
|
72
|
+
function coerceTemplate(raw) {
|
|
73
|
+
var _a, _b, _c, _d, _e;
|
|
74
|
+
const id = typeof raw.id === "string" ? raw.id : void 0;
|
|
75
|
+
if (!id) return null;
|
|
76
|
+
const scheme = (_a = raw.colorScheme) != null ? _a : {};
|
|
77
|
+
const color = (key, fallback) => typeof scheme[key] === "string" ? scheme[key] : fallback;
|
|
78
|
+
return {
|
|
79
|
+
id,
|
|
80
|
+
name: String((_c = (_b = raw.name) != null ? _b : raw.title) != null ? _c : id),
|
|
81
|
+
description: String((_d = raw.description) != null ? _d : ""),
|
|
82
|
+
layout: String((_e = raw.layout) != null ? _e : id),
|
|
83
|
+
colorScheme: {
|
|
84
|
+
primary: color("primary", FALLBACK_TEMPLATE.colorScheme.primary),
|
|
85
|
+
secondary: color("secondary", FALLBACK_TEMPLATE.colorScheme.secondary),
|
|
86
|
+
background: color("background", FALLBACK_TEMPLATE.colorScheme.background),
|
|
87
|
+
text: color("text", FALLBACK_TEMPLATE.colorScheme.text)
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}export{DENSITY_OPTIONS,FALLBACK_TEMPLATE,FONT_OPTIONS,SANS_STACK,coerceTemplate,densityMetrics,findTemplate,fontFamily,isTwoColumn,rnDensity};//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sources":["../../../src/features/resume/templates.ts"],"sourcesContent":["/**\n * Template plumbing — catalog from connector; FALLBACK keeps paper renderable.\n * Port of `@yantra/resume-surface` templates.ts (+ RN density helpers).\n */\n\nimport type { ResumeTemplateMeta } from './types';\n\nexport const FALLBACK_TEMPLATE: ResumeTemplateMeta = {\n id: 'classic',\n name: 'Classic',\n description: 'Traditional single-column layout with a left-aligned header.',\n layout: 'classic',\n colorScheme: { primary: '#000000', secondary: '#4b5563', background: '#ffffff', text: '#212529' },\n};\n\nexport const findTemplate = (catalog: ResumeTemplateMeta[], id: string | undefined): ResumeTemplateMeta =>\n catalog.find((t) => t.id === id) ?? catalog.find((t) => t.id === FALLBACK_TEMPLATE.id) ?? FALLBACK_TEMPLATE;\n\n/** Two-column families — skills/education/certificates move to the sidebar. */\nexport const isTwoColumn = (layout: string): boolean => layout === 'left-right' || layout === 'creative';\n\nexport const FONT_OPTIONS = [\n { value: 'default', label: 'Sans' },\n { value: 'Georgia,serif', label: 'Serif' },\n { value: 'monospace', label: 'Mono' },\n];\n\nexport const DENSITY_OPTIONS = [\n { value: 'normal', label: 'Normal' },\n { value: 'compact', label: 'Compact' },\n { value: 'relaxed', label: 'Relaxed' },\n];\n\nexport const SANS_STACK = '-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif';\n\n/** CSS density metrics for documentCss / export. */\nexport const densityMetrics = (density: string | undefined): { lineHeight: string; padding: string } =>\n density === 'compact'\n ? { lineHeight: '1.32', padding: '28px' }\n : density === 'relaxed'\n ? { lineHeight: '1.7', padding: '52px' }\n : { lineHeight: '1.5', padding: '40px' };\n\n/** RN StyleSheet density for the native paper editor. */\nexport function rnDensity(density: string | undefined): { lineHeight: number; padding: number; fontSize: number } {\n if (density === 'compact') return { lineHeight: 17, padding: 14, fontSize: 12 };\n if (density === 'relaxed') return { lineHeight: 24, padding: 22, fontSize: 14 };\n return { lineHeight: 20, padding: 18, fontSize: 13 };\n}\n\nexport function fontFamily(font: string | undefined): string | undefined {\n if (!font || font === 'default') return undefined;\n if (font === 'monospace') return 'Courier';\n if (font.startsWith('Georgia')) return 'Georgia';\n return undefined;\n}\n\nexport function coerceTemplate(raw: Record<string, unknown>): ResumeTemplateMeta | null {\n const id = typeof raw.id === 'string' ? raw.id : undefined;\n if (!id) return null;\n const scheme = (raw.colorScheme ?? {}) as Record<string, unknown>;\n const color = (key: string, fallback: string) =>\n typeof scheme[key] === 'string' ? (scheme[key] as string) : fallback;\n return {\n id,\n name: String(raw.name ?? raw.title ?? id),\n description: String(raw.description ?? ''),\n layout: String(raw.layout ?? id),\n colorScheme: {\n primary: color('primary', FALLBACK_TEMPLATE.colorScheme.primary),\n secondary: color('secondary', FALLBACK_TEMPLATE.colorScheme.secondary),\n background: color('background', FALLBACK_TEMPLATE.colorScheme.background),\n text: color('text', FALLBACK_TEMPLATE.colorScheme.text),\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const SECTION_KEYS = ["experience", "projects", "skills", "education", "certificates", "custom"];
|
|
2
|
+
const SIDEBAR_SECTIONS = ["skills", "education", "certificates"];
|
|
3
|
+
const SECTION_TITLES = {
|
|
4
|
+
experience: "Experience",
|
|
5
|
+
projects: "Projects",
|
|
6
|
+
skills: "Skills",
|
|
7
|
+
education: "Education",
|
|
8
|
+
certificates: "Certificates",
|
|
9
|
+
custom: "Custom"
|
|
10
|
+
};export{SECTION_KEYS,SECTION_TITLES,SIDEBAR_SECTIONS};//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/features/resume/types.ts"],"sourcesContent":["/**\n * Resume wire contract — twin of `@yantra/resume-surface` types and the\n * `yantra-resume-builder` connector. Keep in sync with both.\n */\n\nexport interface ResumeLink {\n label: string;\n url: string;\n}\n\nexport interface ResumeBasics {\n name: string;\n title?: string;\n email?: string;\n phone?: string;\n location?: string;\n website?: string;\n summary?: string;\n links?: ResumeLink[];\n photo?: string;\n}\n\nexport interface ExperienceItem {\n company: string;\n position: string;\n date?: string;\n location?: string;\n bullets: string[];\n}\n\nexport interface EducationItem {\n school: string;\n degree?: string;\n major?: string;\n date?: string;\n gpa?: string;\n description?: string;\n}\n\nexport interface ProjectItem {\n name: string;\n role?: string;\n date?: string;\n link?: string;\n description?: string;\n bullets?: string[];\n}\n\nexport interface SkillGroup {\n category?: string;\n items: string[];\n}\n\nexport interface CertificateItem {\n name: string;\n issuer?: string;\n date?: string;\n url?: string;\n}\n\nexport interface CustomSectionItem {\n heading?: string;\n subheading?: string;\n date?: string;\n description?: string;\n bullets?: string[];\n}\n\nexport interface CustomSection {\n title: string;\n items: CustomSectionItem[];\n}\n\nexport interface ResumeSettings {\n font?: string;\n density?: string;\n}\n\nexport interface ResumeData {\n title?: string;\n templateId?: string;\n language?: string;\n basics: ResumeBasics;\n experience: ExperienceItem[];\n education: EducationItem[];\n projects: ProjectItem[];\n skills: SkillGroup[];\n certificates?: CertificateItem[];\n customSections?: CustomSection[];\n settings?: ResumeSettings;\n order?: string[];\n hidden?: Record<string, boolean>;\n}\n\nexport const SECTION_KEYS = ['experience', 'projects', 'skills', 'education', 'certificates', 'custom'] as const;\nexport type SectionKey = (typeof SECTION_KEYS)[number];\n\n/** Sections that live in the sidebar of the two-column template families. */\nexport const SIDEBAR_SECTIONS: SectionKey[] = ['skills', 'education', 'certificates'];\n\nexport const SECTION_TITLES: Record<SectionKey, string> = {\n experience: 'Experience',\n projects: 'Projects',\n skills: 'Skills',\n education: 'Education',\n certificates: 'Certificates',\n custom: 'Custom',\n};\n\nexport interface ResumeTemplateColorScheme {\n primary: string;\n secondary: string;\n background: string;\n text: string;\n}\n\nexport interface ResumeTemplateMeta {\n id: string;\n name: string;\n description: string;\n layout: string;\n colorScheme: ResumeTemplateColorScheme;\n}\n"],"names":[],"mappings":"AAmFO,MAAM,eAAe,CAAC,YAAA,EAAc,YAAY,QAAU,EAAA,WAAA,EAAa,gBAAgB,QAAQ;AAI/F,MAAM,gBAAiC,GAAA,CAAC,QAAU,EAAA,WAAA,EAAa,cAAc;AAC7E,MAAM,cAA6C,GAAA;AAAA,EACxD,UAAY,EAAA,YAAA;AAAA,EACZ,QAAU,EAAA,UAAA;AAAA,EACV,MAAQ,EAAA,QAAA;AAAA,EACR,SAAW,EAAA,WAAA;AAAA,EACX,YAAc,EAAA,cAAA;AAAA,EACd,MAAQ,EAAA;AACV"}
|