@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,491 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import React__default,{useState,useCallback,useMemo}from'react';import {StyleSheet,Image,View,Pressable,Text,Linking,ActivityIndicator,ScrollView,TextInput}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {Image as Image$1}from'expo-image';import {generationImageUrl,friendlyMediaError,resultUrl}from'./videoEditor/mediaActions.js';import {markedEditPrompt,editRequest,settleVariants,EDIT_ASPECTS,EDIT_SIZES,VARIANT_COUNTS}from'./aiEdit.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.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 FILTER_NAMES = ["grayscale", "sepia", "chrome", "cold", "warm", "vintage", "fade", "posterize", "vivid", "invert"];
|
|
21
|
+
const CROP_ASPECTS = [{
|
|
22
|
+
label: "1:1",
|
|
23
|
+
ratio: 1
|
|
24
|
+
}, {
|
|
25
|
+
label: "4:3",
|
|
26
|
+
ratio: 4 / 3
|
|
27
|
+
}, {
|
|
28
|
+
label: "16:9",
|
|
29
|
+
ratio: 16 / 9
|
|
30
|
+
}, {
|
|
31
|
+
label: "9:16",
|
|
32
|
+
ratio: 9 / 16
|
|
33
|
+
}];
|
|
34
|
+
function ImageEditorExperience({
|
|
35
|
+
src,
|
|
36
|
+
name,
|
|
37
|
+
runAction,
|
|
38
|
+
onClose,
|
|
39
|
+
onSave,
|
|
40
|
+
initialTab
|
|
41
|
+
}) {
|
|
42
|
+
const [history, setHistory] = useState([src]);
|
|
43
|
+
const [busy, setBusy] = useState(null);
|
|
44
|
+
const [tab, setTab] = useState(initialTab === "aiedit" ? "aiedit" : "filters");
|
|
45
|
+
const [notice, setNotice] = useState(null);
|
|
46
|
+
const [adjust, setAdjust] = useState({
|
|
47
|
+
brightness: 0,
|
|
48
|
+
contrast: 1,
|
|
49
|
+
saturation: 1
|
|
50
|
+
});
|
|
51
|
+
const [editInstruction, setEditInstruction] = useState("");
|
|
52
|
+
const [editAspect, setEditAspect] = useState("original");
|
|
53
|
+
const [editSize, setEditSize] = useState("1K");
|
|
54
|
+
const [variantCount, setVariantCount] = useState(2);
|
|
55
|
+
const [variants, setVariants] = useState([]);
|
|
56
|
+
const [natural, setNatural] = useState(null);
|
|
57
|
+
const current = history[history.length - 1];
|
|
58
|
+
const edited = history.length > 1;
|
|
59
|
+
React__default.useEffect(() => {
|
|
60
|
+
Image.getSize(current, (w, h) => setNatural({
|
|
61
|
+
width: w,
|
|
62
|
+
height: h
|
|
63
|
+
}), () => setNatural(null));
|
|
64
|
+
}, [current]);
|
|
65
|
+
const runMarkEdit = useCallback(async () => {
|
|
66
|
+
if (!runAction) {
|
|
67
|
+
setNotice("Mark & edit needs the host connector.");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const ask = editInstruction.trim();
|
|
71
|
+
if (!ask || busy) return;
|
|
72
|
+
setBusy(`Generating ${variantCount} variant${variantCount === 1 ? "" : "s"}`);
|
|
73
|
+
setVariants([]);
|
|
74
|
+
try {
|
|
75
|
+
const prompt = markedEditPrompt(ask, false);
|
|
76
|
+
const request = editRequest(editAspect, editSize, natural);
|
|
77
|
+
const reference = unwrapProxyUrl(current);
|
|
78
|
+
const settled = await Promise.allSettled(Array.from({
|
|
79
|
+
length: variantCount
|
|
80
|
+
}, async () => {
|
|
81
|
+
const result = await runAction("yantra-image-generation", "YANTRA_GEMINI_IMAGE_EDIT", __spreadValues({
|
|
82
|
+
prompt,
|
|
83
|
+
referenceImages: [{
|
|
84
|
+
url: reference
|
|
85
|
+
}]
|
|
86
|
+
}, request));
|
|
87
|
+
return generationImageUrl(result);
|
|
88
|
+
}));
|
|
89
|
+
const {
|
|
90
|
+
urls,
|
|
91
|
+
failed
|
|
92
|
+
} = settleVariants(settled);
|
|
93
|
+
if (!urls.length) throw new Error("No variant came back");
|
|
94
|
+
setVariants(urls);
|
|
95
|
+
if (failed) setNotice(`${failed} variant${failed === 1 ? "" : "s"} failed \u2014 the rest are below.`);
|
|
96
|
+
else setNotice(null);
|
|
97
|
+
} catch (err) {
|
|
98
|
+
setNotice(friendlyMediaError(err, "mark & edit"));
|
|
99
|
+
} finally {
|
|
100
|
+
setBusy(null);
|
|
101
|
+
}
|
|
102
|
+
}, [busy, current, editAspect, editInstruction, editSize, natural, runAction, variantCount]);
|
|
103
|
+
const apply = useCallback((label, action, params) => {
|
|
104
|
+
if (!runAction) {
|
|
105
|
+
setNotice("Editing needs the host connector - not wired in this host.");
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (busy) return;
|
|
109
|
+
setBusy(label);
|
|
110
|
+
runAction("yantra-image-editing", action, __spreadValues({
|
|
111
|
+
input_url: current
|
|
112
|
+
}, params)).then((result) => {
|
|
113
|
+
setHistory((h) => [...h, resultUrl(result, action)]);
|
|
114
|
+
setNotice(null);
|
|
115
|
+
}).catch((err) => setNotice(friendlyMediaError(err, "image edit"))).finally(() => setBusy(null));
|
|
116
|
+
}, [busy, current, runAction]);
|
|
117
|
+
const applyCrop = useCallback((ratio, label) => {
|
|
118
|
+
if (ratio === null) return;
|
|
119
|
+
Image.getSize(current, (w, h) => {
|
|
120
|
+
let cw = w;
|
|
121
|
+
let ch = Math.round(w / ratio);
|
|
122
|
+
if (ch > h) {
|
|
123
|
+
ch = h;
|
|
124
|
+
cw = Math.round(h * ratio);
|
|
125
|
+
}
|
|
126
|
+
apply(label, "YANTRA_IMAGE_EDIT_CROP", {
|
|
127
|
+
width: cw,
|
|
128
|
+
height: ch,
|
|
129
|
+
x: Math.round((w - cw) / 2),
|
|
130
|
+
y: Math.round((h - ch) / 2)
|
|
131
|
+
});
|
|
132
|
+
}, () => setNotice("Could not read the image size for cropping."));
|
|
133
|
+
}, [apply, current]);
|
|
134
|
+
const tabs = useMemo(() => [{
|
|
135
|
+
id: "aiedit",
|
|
136
|
+
icon: "marker",
|
|
137
|
+
label: "Mark"
|
|
138
|
+
}, {
|
|
139
|
+
id: "filters",
|
|
140
|
+
icon: "blur",
|
|
141
|
+
label: "Filters"
|
|
142
|
+
}, {
|
|
143
|
+
id: "adjust",
|
|
144
|
+
icon: "tune-variant",
|
|
145
|
+
label: "Adjust"
|
|
146
|
+
}, {
|
|
147
|
+
id: "transform",
|
|
148
|
+
icon: "crop-rotate",
|
|
149
|
+
label: "Transform"
|
|
150
|
+
}, {
|
|
151
|
+
id: "effects",
|
|
152
|
+
icon: "creation",
|
|
153
|
+
label: "Effects"
|
|
154
|
+
}], []);
|
|
155
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.root, testID: "image-editor", children: [
|
|
156
|
+
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
157
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close editor", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: "#F7F7FA" }) }),
|
|
158
|
+
/* @__PURE__ */ jsx(Text, { style: styles.headerTitle, numberOfLines: 1, children: (name == null ? void 0 : name.trim()) || "Edit image" }),
|
|
159
|
+
/* @__PURE__ */ jsxs(View, { style: styles.headerActions, children: [
|
|
160
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => setHistory((h) => h.length > 1 ? h.slice(0, -1) : h), hitSlop: 10, disabled: !edited || busy !== null, accessibilityRole: "button", accessibilityLabel: "Undo", style: !edited || busy ? styles.disabled : null, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "undo-variant", size: 21, color: "#F7F7FA" }) }),
|
|
161
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => Linking.openURL(current), hitSlop: 10, disabled: !edited, accessibilityRole: "button", accessibilityLabel: "Open result", style: !edited ? styles.disabled : null, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "open-in-new", size: 20, color: "#F7F7FA" }) }),
|
|
162
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
163
|
+
if (edited) onSave == null ? void 0 : onSave(current);
|
|
164
|
+
onClose();
|
|
165
|
+
}, hitSlop: 10, disabled: busy !== null, accessibilityRole: "button", accessibilityLabel: "Done", style: busy ? styles.disabled : null, children: /* @__PURE__ */ jsx(Text, { style: styles.doneLabel, children: edited ? "Done" : "Close" }) })
|
|
166
|
+
] })
|
|
167
|
+
] }),
|
|
168
|
+
/* @__PURE__ */ jsxs(View, { style: styles.stage, children: [
|
|
169
|
+
/* @__PURE__ */ jsx(Image$1, { source: {
|
|
170
|
+
uri: current
|
|
171
|
+
}, style: StyleSheet.absoluteFill, contentFit: "contain", transition: 150 }),
|
|
172
|
+
busy ? /* @__PURE__ */ jsxs(View, { style: styles.busyVeil, children: [
|
|
173
|
+
/* @__PURE__ */ jsx(ActivityIndicator, { color: "#F7F7FA" }),
|
|
174
|
+
/* @__PURE__ */ jsxs(Text, { style: styles.busyLabel, children: [
|
|
175
|
+
busy,
|
|
176
|
+
"\u2026"
|
|
177
|
+
] })
|
|
178
|
+
] }) : null,
|
|
179
|
+
edited && !busy ? /* @__PURE__ */ jsx(View, { style: styles.editedBadge, children: /* @__PURE__ */ jsxs(Text, { style: styles.editedBadgeLabel, children: [
|
|
180
|
+
"edit ",
|
|
181
|
+
history.length - 1
|
|
182
|
+
] }) }) : null
|
|
183
|
+
] }),
|
|
184
|
+
/* @__PURE__ */ jsx(View, { style: styles.panel, children: tab === "aiedit" ? /* @__PURE__ */ jsxs(ScrollView, { style: {
|
|
185
|
+
maxHeight: 220
|
|
186
|
+
}, contentContainerStyle: {
|
|
187
|
+
paddingBottom: 8
|
|
188
|
+
}, children: [
|
|
189
|
+
/* @__PURE__ */ jsx(Text, { style: styles.aiHint, children: "Say what should change. Phone Mark & edit sends the whole picture (scribble bake is web/Konva); Original framing keeps the photo's own ratio." }),
|
|
190
|
+
/* @__PURE__ */ jsx(TextInput, { value: editInstruction, onChangeText: setEditInstruction, placeholder: "Add a top hat and monocle", placeholderTextColor: "#7A7A88", style: styles.aiInput, multiline: true }),
|
|
191
|
+
/* @__PURE__ */ jsxs(View, { style: styles.row, children: [
|
|
192
|
+
EDIT_ASPECTS.map((a) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setEditAspect(a.id), style: [styles.chip, editAspect === a.id && styles.chipOn], children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: a.label }) }, a.id)),
|
|
193
|
+
EDIT_SIZES.map((s) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setEditSize(s), style: [styles.chip, editSize === s && styles.chipOn], children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: s }) }, s)),
|
|
194
|
+
VARIANT_COUNTS.map((n) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setVariantCount(n), style: [styles.chip, variantCount === n && styles.chipOn], children: /* @__PURE__ */ jsxs(Text, { style: styles.chipLabel, children: [
|
|
195
|
+
n,
|
|
196
|
+
"\xD7"
|
|
197
|
+
] }) }, n))
|
|
198
|
+
] }),
|
|
199
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => void runMarkEdit(), disabled: !editInstruction.trim() || Boolean(busy), style: [styles.aiCta, (!editInstruction.trim() || busy) && styles.disabled], children: /* @__PURE__ */ jsx(Text, { style: styles.aiCtaLabel, children: "Generate variants" }) }),
|
|
200
|
+
variants.length ? /* @__PURE__ */ jsx(ScrollView, { horizontal: true, contentContainerStyle: styles.row, children: variants.map((url) => /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
201
|
+
setHistory((h) => [...h, url]);
|
|
202
|
+
setVariants([]);
|
|
203
|
+
setNotice("Applied \u2014 Undo brings the original back.");
|
|
204
|
+
}, style: styles.variantThumb, children: /* @__PURE__ */ jsx(Image$1, { source: {
|
|
205
|
+
uri: url
|
|
206
|
+
}, style: styles.variantImg, contentFit: "cover" }) }, url)) }) : null
|
|
207
|
+
] }) : tab === "filters" ? /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: FILTER_NAMES.map((filter) => /* @__PURE__ */ jsx(Pressable, { onPress: () => apply(`Filter ${filter}`, "YANTRA_IMAGE_EDIT_FILTER", {
|
|
208
|
+
name: filter
|
|
209
|
+
}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: filter }) }, filter)) }) : tab === "adjust" ? /* @__PURE__ */ jsxs(View, { children: [
|
|
210
|
+
/* @__PURE__ */ jsx(AdjustRow, { label: "Brightness", value: adjust.brightness, format: (v) => v.toFixed(2), onChange: (d) => setAdjust((a) => __spreadProps(__spreadValues({}, a), {
|
|
211
|
+
brightness: Math.min(1, Math.max(-1, a.brightness + d * 0.1))
|
|
212
|
+
})) }),
|
|
213
|
+
/* @__PURE__ */ jsx(AdjustRow, { label: "Contrast", value: adjust.contrast, format: (v) => v.toFixed(2), onChange: (d) => setAdjust((a) => __spreadProps(__spreadValues({}, a), {
|
|
214
|
+
contrast: Math.min(3, Math.max(0.2, a.contrast + d * 0.1))
|
|
215
|
+
})) }),
|
|
216
|
+
/* @__PURE__ */ jsx(AdjustRow, { label: "Saturation", value: adjust.saturation, format: (v) => v.toFixed(2), onChange: (d) => setAdjust((a) => __spreadProps(__spreadValues({}, a), {
|
|
217
|
+
saturation: Math.min(3, Math.max(0, a.saturation + d * 0.1))
|
|
218
|
+
})) }),
|
|
219
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Adjusting", "YANTRA_IMAGE_EDIT_FINETUNE", {
|
|
220
|
+
brightness: adjust.brightness,
|
|
221
|
+
contrast: adjust.contrast,
|
|
222
|
+
saturation: adjust.saturation
|
|
223
|
+
}), style: [styles.chip, styles.chipAccent, styles.applyBtn], accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, styles.chipLabelDark], children: "Apply adjustments" }) })
|
|
224
|
+
] }) : tab === "transform" ? /* @__PURE__ */ jsxs(View, { style: styles.row, children: [
|
|
225
|
+
/* @__PURE__ */ jsxs(Pressable, { onPress: () => apply("Rotating", "YANTRA_IMAGE_EDIT_ROTATE", {
|
|
226
|
+
degrees: 90
|
|
227
|
+
}), style: styles.chip, accessibilityRole: "button", children: [
|
|
228
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "rotate-right", size: 14, color: "#F7F7FA" }),
|
|
229
|
+
/* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: "90\xB0" })
|
|
230
|
+
] }),
|
|
231
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Flipping", "YANTRA_IMAGE_EDIT_FLIP", {
|
|
232
|
+
horizontal: true
|
|
233
|
+
}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "flip-horizontal", size: 14, color: "#F7F7FA" }) }),
|
|
234
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Flipping", "YANTRA_IMAGE_EDIT_FLIP", {
|
|
235
|
+
vertical: true
|
|
236
|
+
}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "flip-vertical", size: 14, color: "#F7F7FA" }) }),
|
|
237
|
+
CROP_ASPECTS.map((aspect) => /* @__PURE__ */ jsx(Pressable, { onPress: () => applyCrop(aspect.ratio, `Cropping ${aspect.label}`), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: aspect.label }) }, aspect.label))
|
|
238
|
+
] }) : /* @__PURE__ */ jsxs(View, { style: styles.row, children: [
|
|
239
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Vignette", "YANTRA_IMAGE_EDIT_VIGNETTE", {}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: "Vignette" }) }),
|
|
240
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Framing", "YANTRA_IMAGE_EDIT_FRAME", {
|
|
241
|
+
thickness: 24,
|
|
242
|
+
color: "white"
|
|
243
|
+
}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: "Frame" }) }),
|
|
244
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Shadow", "YANTRA_IMAGE_EDIT_DROP_SHADOW", {
|
|
245
|
+
offset_x: 12,
|
|
246
|
+
offset_y: 12,
|
|
247
|
+
blur: 18
|
|
248
|
+
}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: "Shadow" }) }),
|
|
249
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => apply("Removing background", "YANTRA_IMAGE_EDIT_REMOVE_BACKGROUND", {}), style: styles.chip, accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: "Cut out" }) })
|
|
250
|
+
] }) }),
|
|
251
|
+
/* @__PURE__ */ jsx(View, { style: styles.toolbar, children: tabs.map((entry) => {
|
|
252
|
+
const active = tab === entry.id;
|
|
253
|
+
return /* @__PURE__ */ jsxs(Pressable, { onPress: () => setTab(entry.id), style: styles.toolbarTab, accessibilityRole: "tab", accessibilityState: {
|
|
254
|
+
selected: active
|
|
255
|
+
}, children: [
|
|
256
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: entry.icon, size: 21, color: active ? "#8B7CFF" : "#9A9AA5" }),
|
|
257
|
+
/* @__PURE__ */ jsx(Text, { style: [styles.toolbarLabel, active && styles.toolbarLabelActive], children: entry.label })
|
|
258
|
+
] }, entry.id);
|
|
259
|
+
}) }),
|
|
260
|
+
notice ? /* @__PURE__ */ jsxs(View, { style: styles.notice, children: [
|
|
261
|
+
/* @__PURE__ */ jsx(Text, { style: styles.noticeText, children: notice }),
|
|
262
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => setNotice(null), hitSlop: 8, children: /* @__PURE__ */ jsx(Text, { style: styles.noticeDismiss, children: "OK" }) })
|
|
263
|
+
] }) : null
|
|
264
|
+
] });
|
|
265
|
+
}
|
|
266
|
+
function AdjustRow({
|
|
267
|
+
label,
|
|
268
|
+
value,
|
|
269
|
+
format,
|
|
270
|
+
onChange
|
|
271
|
+
}) {
|
|
272
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.adjustRow, children: [
|
|
273
|
+
/* @__PURE__ */ jsx(Text, { style: styles.adjustLabel, children: label }),
|
|
274
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(-1), hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} less`, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "minus", size: 16, color: "#F7F7FA" }) }),
|
|
275
|
+
/* @__PURE__ */ jsx(Text, { style: styles.adjustValue, children: format(value) }),
|
|
276
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(1), hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} more`, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "plus", size: 16, color: "#F7F7FA" }) })
|
|
277
|
+
] });
|
|
278
|
+
}
|
|
279
|
+
const styles = StyleSheet.create({
|
|
280
|
+
root: {
|
|
281
|
+
flex: 1,
|
|
282
|
+
backgroundColor: "#0A0A0C"
|
|
283
|
+
},
|
|
284
|
+
header: {
|
|
285
|
+
flexDirection: "row",
|
|
286
|
+
alignItems: "center",
|
|
287
|
+
justifyContent: "space-between",
|
|
288
|
+
paddingHorizontal: 16,
|
|
289
|
+
paddingVertical: 12,
|
|
290
|
+
gap: 12
|
|
291
|
+
},
|
|
292
|
+
headerTitle: {
|
|
293
|
+
flex: 1,
|
|
294
|
+
color: "#F7F7FA",
|
|
295
|
+
fontSize: 15,
|
|
296
|
+
fontWeight: "600",
|
|
297
|
+
textAlign: "center"
|
|
298
|
+
},
|
|
299
|
+
headerActions: {
|
|
300
|
+
flexDirection: "row",
|
|
301
|
+
alignItems: "center",
|
|
302
|
+
gap: 16
|
|
303
|
+
},
|
|
304
|
+
doneLabel: {
|
|
305
|
+
color: "#A5B4FC",
|
|
306
|
+
fontSize: 15,
|
|
307
|
+
fontWeight: "600"
|
|
308
|
+
},
|
|
309
|
+
disabled: {
|
|
310
|
+
opacity: 0.35
|
|
311
|
+
},
|
|
312
|
+
stage: {
|
|
313
|
+
flex: 1,
|
|
314
|
+
marginHorizontal: 14,
|
|
315
|
+
borderRadius: 18,
|
|
316
|
+
overflow: "hidden",
|
|
317
|
+
backgroundColor: "#000000"
|
|
318
|
+
},
|
|
319
|
+
busyVeil: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
|
|
320
|
+
alignItems: "center",
|
|
321
|
+
justifyContent: "center",
|
|
322
|
+
gap: 10,
|
|
323
|
+
backgroundColor: "rgba(10, 10, 12, 0.55)"
|
|
324
|
+
}),
|
|
325
|
+
busyLabel: {
|
|
326
|
+
color: "#E8E8EE",
|
|
327
|
+
fontSize: 12.5
|
|
328
|
+
},
|
|
329
|
+
editedBadge: {
|
|
330
|
+
position: "absolute",
|
|
331
|
+
right: 10,
|
|
332
|
+
top: 10,
|
|
333
|
+
paddingHorizontal: 8,
|
|
334
|
+
paddingVertical: 3,
|
|
335
|
+
borderRadius: 9,
|
|
336
|
+
backgroundColor: "rgba(139, 124, 255, 0.9)"
|
|
337
|
+
},
|
|
338
|
+
editedBadgeLabel: {
|
|
339
|
+
color: "#0A0A0C",
|
|
340
|
+
fontSize: 10.5,
|
|
341
|
+
fontWeight: "700"
|
|
342
|
+
},
|
|
343
|
+
aiHint: {
|
|
344
|
+
color: "#9A9AA5",
|
|
345
|
+
fontSize: 11,
|
|
346
|
+
lineHeight: 15,
|
|
347
|
+
marginBottom: 8
|
|
348
|
+
},
|
|
349
|
+
aiInput: {
|
|
350
|
+
minHeight: 56,
|
|
351
|
+
borderRadius: 10,
|
|
352
|
+
paddingHorizontal: 10,
|
|
353
|
+
paddingVertical: 8,
|
|
354
|
+
backgroundColor: "#1F1F24",
|
|
355
|
+
color: "#F7F7FA",
|
|
356
|
+
textAlignVertical: "top",
|
|
357
|
+
marginBottom: 8
|
|
358
|
+
},
|
|
359
|
+
chipOn: {
|
|
360
|
+
borderColor: "#8B7CFF",
|
|
361
|
+
backgroundColor: "rgba(139,124,255,0.2)"
|
|
362
|
+
},
|
|
363
|
+
aiCta: {
|
|
364
|
+
marginTop: 6,
|
|
365
|
+
marginBottom: 8,
|
|
366
|
+
paddingVertical: 10,
|
|
367
|
+
borderRadius: 10,
|
|
368
|
+
backgroundColor: "#F7F7FA",
|
|
369
|
+
alignItems: "center"
|
|
370
|
+
},
|
|
371
|
+
aiCtaLabel: {
|
|
372
|
+
color: "#0f172a",
|
|
373
|
+
fontWeight: "700",
|
|
374
|
+
fontSize: 13
|
|
375
|
+
},
|
|
376
|
+
variantThumb: {
|
|
377
|
+
width: 64,
|
|
378
|
+
height: 64,
|
|
379
|
+
borderRadius: 8,
|
|
380
|
+
overflow: "hidden",
|
|
381
|
+
marginRight: 8,
|
|
382
|
+
backgroundColor: "#1F1F24"
|
|
383
|
+
},
|
|
384
|
+
variantImg: {
|
|
385
|
+
width: "100%",
|
|
386
|
+
height: "100%"
|
|
387
|
+
},
|
|
388
|
+
panel: {
|
|
389
|
+
minHeight: 92,
|
|
390
|
+
justifyContent: "center",
|
|
391
|
+
paddingHorizontal: 14,
|
|
392
|
+
paddingVertical: 10,
|
|
393
|
+
borderTopWidth: StyleSheet.hairlineWidth,
|
|
394
|
+
borderTopColor: "rgba(255,255,255,0.08)"
|
|
395
|
+
},
|
|
396
|
+
row: {
|
|
397
|
+
flexDirection: "row",
|
|
398
|
+
alignItems: "center",
|
|
399
|
+
gap: 8,
|
|
400
|
+
flexWrap: "wrap",
|
|
401
|
+
paddingVertical: 4
|
|
402
|
+
},
|
|
403
|
+
chip: {
|
|
404
|
+
flexDirection: "row",
|
|
405
|
+
alignItems: "center",
|
|
406
|
+
gap: 5,
|
|
407
|
+
paddingHorizontal: 12,
|
|
408
|
+
paddingVertical: 8,
|
|
409
|
+
borderRadius: 9,
|
|
410
|
+
backgroundColor: "#1F1F24",
|
|
411
|
+
borderWidth: 1,
|
|
412
|
+
borderColor: "transparent"
|
|
413
|
+
},
|
|
414
|
+
chipAccent: {
|
|
415
|
+
backgroundColor: "#8B7CFF"
|
|
416
|
+
},
|
|
417
|
+
chipLabel: {
|
|
418
|
+
color: "#F7F7FA",
|
|
419
|
+
fontSize: 12.5,
|
|
420
|
+
fontWeight: "500"
|
|
421
|
+
},
|
|
422
|
+
chipLabelDark: {
|
|
423
|
+
color: "#0A0A0C"
|
|
424
|
+
},
|
|
425
|
+
applyBtn: {
|
|
426
|
+
alignSelf: "flex-start",
|
|
427
|
+
marginTop: 8
|
|
428
|
+
},
|
|
429
|
+
adjustRow: {
|
|
430
|
+
flexDirection: "row",
|
|
431
|
+
alignItems: "center",
|
|
432
|
+
gap: 12,
|
|
433
|
+
paddingVertical: 5
|
|
434
|
+
},
|
|
435
|
+
adjustLabel: {
|
|
436
|
+
color: "#9A9AA5",
|
|
437
|
+
fontSize: 12.5,
|
|
438
|
+
width: 82
|
|
439
|
+
},
|
|
440
|
+
adjustValue: {
|
|
441
|
+
color: "#F7F7FA",
|
|
442
|
+
fontSize: 12.5,
|
|
443
|
+
fontVariant: ["tabular-nums"],
|
|
444
|
+
minWidth: 44,
|
|
445
|
+
textAlign: "center"
|
|
446
|
+
},
|
|
447
|
+
toolbar: {
|
|
448
|
+
flexDirection: "row",
|
|
449
|
+
justifyContent: "space-around",
|
|
450
|
+
paddingVertical: 8,
|
|
451
|
+
paddingBottom: 10,
|
|
452
|
+
borderTopWidth: StyleSheet.hairlineWidth,
|
|
453
|
+
borderTopColor: "rgba(255,255,255,0.08)"
|
|
454
|
+
},
|
|
455
|
+
toolbarTab: {
|
|
456
|
+
alignItems: "center",
|
|
457
|
+
gap: 3,
|
|
458
|
+
minWidth: 56
|
|
459
|
+
},
|
|
460
|
+
toolbarLabel: {
|
|
461
|
+
color: "#9A9AA5",
|
|
462
|
+
fontSize: 10
|
|
463
|
+
},
|
|
464
|
+
toolbarLabelActive: {
|
|
465
|
+
color: "#8B7CFF",
|
|
466
|
+
fontWeight: "600"
|
|
467
|
+
},
|
|
468
|
+
notice: {
|
|
469
|
+
position: "absolute",
|
|
470
|
+
left: 20,
|
|
471
|
+
right: 20,
|
|
472
|
+
bottom: 84,
|
|
473
|
+
flexDirection: "row",
|
|
474
|
+
alignItems: "center",
|
|
475
|
+
gap: 12,
|
|
476
|
+
paddingHorizontal: 14,
|
|
477
|
+
paddingVertical: 11,
|
|
478
|
+
borderRadius: 12,
|
|
479
|
+
backgroundColor: "rgba(248, 250, 252, 0.96)"
|
|
480
|
+
},
|
|
481
|
+
noticeText: {
|
|
482
|
+
flex: 1,
|
|
483
|
+
color: "#0f172a",
|
|
484
|
+
fontSize: 13
|
|
485
|
+
},
|
|
486
|
+
noticeDismiss: {
|
|
487
|
+
color: "#6C5CE7",
|
|
488
|
+
fontSize: 13,
|
|
489
|
+
fontWeight: "600"
|
|
490
|
+
}
|
|
491
|
+
});export{ImageEditorExperience,ImageEditorExperience as default};//# sourceMappingURL=ImageEditorExperience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageEditorExperience.js","sources":["../../../src/features/canvas/ImageEditorExperience.tsx"],"sourcesContent":["/**\n * Native image editor - apply-based: every Apply runs ONE real connector op\n * (yantra-image-editing / ffmpeg) and the returned URL becomes the preview,\n * so what you see after Apply is the true render, not an approximation. The\n * URL history is the undo stack. Ships in the federated remote; the host\n * provides only the action runner (auth + transport).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Image as RNImage,\n Linking,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { friendlyMediaError, generationImageUrl, resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n EDIT_ASPECTS,\n EDIT_SIZES,\n VARIANT_COUNTS,\n editRequest,\n markedEditPrompt,\n settleVariants,\n type EditAspect,\n type EditSize,\n} from './aiEdit';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\n\ntype Tab = 'filters' | 'adjust' | 'transform' | 'effects' | 'aiedit';\n\nexport interface ImageEditorExperienceProps {\n src: string;\n name?: string;\n runAction?: RunMediaAction;\n onClose: () => void;\n /** Persist the working URL onto the board item (web Done). */\n onSave?: (url: string) => void;\n /** Open on Mark & edit (web board entry). */\n initialTab?: Tab;\n}\n\n/** Backend filter preset names supported by image.filter (image_ops.rs). */\nconst FILTER_NAMES = [\n 'grayscale',\n 'sepia',\n 'chrome',\n 'cold',\n 'warm',\n 'vintage',\n 'fade',\n 'posterize',\n 'vivid',\n 'invert',\n] as const;\n\nconst CROP_ASPECTS: ReadonlyArray<{ label: string; ratio: number | null }> = [\n { label: '1:1', ratio: 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '9:16', ratio: 9 / 16 },\n];\n\nexport function ImageEditorExperience({\n src,\n name,\n runAction,\n onClose,\n onSave,\n initialTab,\n}: ImageEditorExperienceProps) {\n const [history, setHistory] = useState<string[]>([src]);\n const [busy, setBusy] = useState<string | null>(null);\n const [tab, setTab] = useState<Tab>(initialTab === 'aiedit' ? 'aiedit' : 'filters');\n const [notice, setNotice] = useState<string | null>(null);\n const [adjust, setAdjust] = useState({ brightness: 0, contrast: 1, saturation: 1 });\n const [editInstruction, setEditInstruction] = useState('');\n const [editAspect, setEditAspect] = useState<EditAspect>('original');\n const [editSize, setEditSize] = useState<EditSize>('1K');\n const [variantCount, setVariantCount] = useState<(typeof VARIANT_COUNTS)[number]>(2);\n const [variants, setVariants] = useState<string[]>([]);\n const [natural, setNatural] = useState<{ width: number; height: number } | null>(null);\n const current = history[history.length - 1];\n const edited = history.length > 1;\n\n React.useEffect(() => {\n RNImage.getSize(\n current,\n (w, h) => setNatural({ width: w, height: h }),\n () => setNatural(null),\n );\n }, [current]);\n\n const runMarkEdit = useCallback(async () => {\n if (!runAction) {\n setNotice('Mark & edit needs the host connector.');\n return;\n }\n const ask = editInstruction.trim();\n if (!ask || busy) return;\n setBusy(`Generating ${variantCount} variant${variantCount === 1 ? '' : 's'}`);\n setVariants([]);\n try {\n const prompt = markedEditPrompt(ask, false);\n const request = editRequest(editAspect, editSize, natural);\n const reference = unwrapProxyUrl(current);\n const settled = await Promise.allSettled(\n Array.from({ length: variantCount }, async () => {\n const result = await runAction('yantra-image-generation', 'YANTRA_GEMINI_IMAGE_EDIT', {\n prompt,\n referenceImages: [{ url: reference }],\n ...request,\n });\n return generationImageUrl(result);\n }),\n );\n const { urls, failed } = settleVariants(settled);\n if (!urls.length) throw new Error('No variant came back');\n setVariants(urls);\n if (failed) setNotice(`${failed} variant${failed === 1 ? '' : 's'} failed — the rest are below.`);\n else setNotice(null);\n } catch (err: unknown) {\n setNotice(friendlyMediaError(err, 'mark & edit'));\n } finally {\n setBusy(null);\n }\n }, [busy, current, editAspect, editInstruction, editSize, natural, runAction, variantCount]);\n\n const apply = useCallback(\n (label: string, action: string, params: Record<string, unknown>) => {\n if (!runAction) {\n setNotice('Editing needs the host connector - not wired in this host.');\n return;\n }\n if (busy) return;\n setBusy(label);\n runAction('yantra-image-editing', action, { input_url: current, ...params })\n .then((result) => {\n setHistory((h) => [...h, resultUrl(result, action)]);\n setNotice(null);\n })\n .catch((err: unknown) => setNotice(friendlyMediaError(err, 'image edit')))\n .finally(() => setBusy(null));\n },\n [busy, current, runAction],\n );\n\n const applyCrop = useCallback(\n (ratio: number | null, label: string) => {\n if (ratio === null) return;\n RNImage.getSize(\n current,\n (w, h) => {\n // Largest centered window with the requested ratio.\n let cw = w;\n let ch = Math.round(w / ratio);\n if (ch > h) {\n ch = h;\n cw = Math.round(h * ratio);\n }\n apply(label, 'YANTRA_IMAGE_EDIT_CROP', {\n width: cw,\n height: ch,\n x: Math.round((w - cw) / 2),\n y: Math.round((h - ch) / 2),\n });\n },\n () => setNotice('Could not read the image size for cropping.'),\n );\n },\n [apply, current],\n );\n\n const tabs = useMemo(\n () =>\n [\n { id: 'aiedit' as Tab, icon: 'marker' as const, label: 'Mark' },\n { id: 'filters' as Tab, icon: 'blur' as const, label: 'Filters' },\n { id: 'adjust' as Tab, icon: 'tune-variant' as const, label: 'Adjust' },\n { id: 'transform' as Tab, icon: 'crop-rotate' as const, label: 'Transform' },\n { id: 'effects' as Tab, icon: 'creation' as const, label: 'Effects' },\n ] as const,\n [],\n );\n\n return (\n <View style={styles.root} testID=\"image-editor\">\n <View style={styles.header}>\n <Pressable onPress={onClose} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close editor\">\n <MaterialCommunityIcons name=\"close\" size={22} color=\"#F7F7FA\" />\n </Pressable>\n <Text style={styles.headerTitle} numberOfLines={1}>\n {name?.trim() || 'Edit image'}\n </Text>\n <View style={styles.headerActions}>\n <Pressable\n onPress={() => setHistory((h) => (h.length > 1 ? h.slice(0, -1) : h))}\n hitSlop={10}\n disabled={!edited || busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Undo\"\n style={!edited || busy ? styles.disabled : null}\n >\n <MaterialCommunityIcons name=\"undo-variant\" size={21} color=\"#F7F7FA\" />\n </Pressable>\n <Pressable\n onPress={() => Linking.openURL(current)}\n hitSlop={10}\n disabled={!edited}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Open result\"\n style={!edited ? styles.disabled : null}\n >\n <MaterialCommunityIcons name=\"open-in-new\" size={20} color=\"#F7F7FA\" />\n </Pressable>\n <Pressable\n onPress={() => {\n if (edited) onSave?.(current);\n onClose();\n }}\n hitSlop={10}\n disabled={busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done\"\n style={busy ? styles.disabled : null}\n >\n <Text style={styles.doneLabel}>{edited ? 'Done' : 'Close'}</Text>\n </Pressable>\n </View>\n </View>\n\n <View style={styles.stage}>\n <Image\n source={{ uri: current }}\n style={StyleSheet.absoluteFill}\n contentFit=\"contain\"\n transition={150}\n />\n {busy ? (\n <View style={styles.busyVeil}>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.busyLabel}>{busy}…</Text>\n </View>\n ) : null}\n {edited && !busy ? (\n <View style={styles.editedBadge}>\n <Text style={styles.editedBadgeLabel}>edit {history.length - 1}</Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.panel}>\n {tab === 'aiedit' ? (\n <ScrollView style={{ maxHeight: 220 }} contentContainerStyle={{ paddingBottom: 8 }}>\n <Text style={styles.aiHint}>\n Say what should change. Phone Mark & edit sends the whole picture (scribble bake is\n web/Konva); Original framing keeps the photo's own ratio.\n </Text>\n <TextInput\n value={editInstruction}\n onChangeText={setEditInstruction}\n placeholder=\"Add a top hat and monocle\"\n placeholderTextColor=\"#7A7A88\"\n style={styles.aiInput}\n multiline\n />\n <View style={styles.row}>\n {EDIT_ASPECTS.map((a) => (\n <Pressable\n key={a.id}\n onPress={() => setEditAspect(a.id)}\n style={[styles.chip, editAspect === a.id && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{a.label}</Text>\n </Pressable>\n ))}\n {EDIT_SIZES.map((s) => (\n <Pressable\n key={s}\n onPress={() => setEditSize(s)}\n style={[styles.chip, editSize === s && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{s}</Text>\n </Pressable>\n ))}\n {VARIANT_COUNTS.map((n) => (\n <Pressable\n key={n}\n onPress={() => setVariantCount(n)}\n style={[styles.chip, variantCount === n && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{n}×</Text>\n </Pressable>\n ))}\n </View>\n <Pressable\n onPress={() => void runMarkEdit()}\n disabled={!editInstruction.trim() || Boolean(busy)}\n style={[styles.aiCta, (!editInstruction.trim() || busy) && styles.disabled]}\n >\n <Text style={styles.aiCtaLabel}>Generate variants</Text>\n </Pressable>\n {variants.length ? (\n <ScrollView horizontal contentContainerStyle={styles.row}>\n {variants.map((url) => (\n <Pressable\n key={url}\n onPress={() => {\n setHistory((h) => [...h, url]);\n setVariants([]);\n setNotice('Applied — Undo brings the original back.');\n }}\n style={styles.variantThumb}\n >\n <Image source={{ uri: url }} style={styles.variantImg} contentFit=\"cover\" />\n </Pressable>\n ))}\n </ScrollView>\n ) : null}\n </ScrollView>\n ) : tab === 'filters' ? (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.row}>\n {FILTER_NAMES.map((filter) => (\n <Pressable\n key={filter}\n onPress={() => apply(`Filter ${filter}`, 'YANTRA_IMAGE_EDIT_FILTER', { name: filter })}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>{filter}</Text>\n </Pressable>\n ))}\n </ScrollView>\n ) : tab === 'adjust' ? (\n <View>\n <AdjustRow\n label=\"Brightness\"\n value={adjust.brightness}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({\n ...a,\n brightness: Math.min(1, Math.max(-1, a.brightness + d * 0.1)),\n }))\n }\n />\n <AdjustRow\n label=\"Contrast\"\n value={adjust.contrast}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({ ...a, contrast: Math.min(3, Math.max(0.2, a.contrast + d * 0.1)) }))\n }\n />\n <AdjustRow\n label=\"Saturation\"\n value={adjust.saturation}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({\n ...a,\n saturation: Math.min(3, Math.max(0, a.saturation + d * 0.1)),\n }))\n }\n />\n <Pressable\n onPress={() =>\n apply('Adjusting', 'YANTRA_IMAGE_EDIT_FINETUNE', {\n brightness: adjust.brightness,\n contrast: adjust.contrast,\n saturation: adjust.saturation,\n })\n }\n style={[styles.chip, styles.chipAccent, styles.applyBtn]}\n accessibilityRole=\"button\"\n >\n <Text style={[styles.chipLabel, styles.chipLabelDark]}>Apply adjustments</Text>\n </Pressable>\n </View>\n ) : tab === 'transform' ? (\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Rotating', 'YANTRA_IMAGE_EDIT_ROTATE', { degrees: 90 })}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"rotate-right\" size={14} color=\"#F7F7FA\" />\n <Text style={styles.chipLabel}>90°</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'YANTRA_IMAGE_EDIT_FLIP', { horizontal: true })}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"flip-horizontal\" size={14} color=\"#F7F7FA\" />\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'YANTRA_IMAGE_EDIT_FLIP', { vertical: true })}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"flip-vertical\" size={14} color=\"#F7F7FA\" />\n </Pressable>\n {CROP_ASPECTS.map((aspect) => (\n <Pressable\n key={aspect.label}\n onPress={() => applyCrop(aspect.ratio, `Cropping ${aspect.label}`)}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>{aspect.label}</Text>\n </Pressable>\n ))}\n </View>\n ) : (\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Vignette', 'YANTRA_IMAGE_EDIT_VIGNETTE', {})}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Vignette</Text>\n </Pressable>\n <Pressable\n onPress={() =>\n apply('Framing', 'YANTRA_IMAGE_EDIT_FRAME', { thickness: 24, color: 'white' })\n }\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Frame</Text>\n </Pressable>\n <Pressable\n onPress={() =>\n apply('Shadow', 'YANTRA_IMAGE_EDIT_DROP_SHADOW', {\n offset_x: 12,\n offset_y: 12,\n blur: 18,\n })\n }\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Shadow</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Removing background', 'YANTRA_IMAGE_EDIT_REMOVE_BACKGROUND', {})}\n style={styles.chip}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Cut out</Text>\n </Pressable>\n </View>\n )}\n </View>\n\n <View style={styles.toolbar}>\n {tabs.map((entry) => {\n const active = tab === entry.id;\n return (\n <Pressable\n key={entry.id}\n onPress={() => setTab(entry.id)}\n style={styles.toolbarTab}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: active }}\n >\n <MaterialCommunityIcons\n name={entry.icon}\n size={21}\n color={active ? '#8B7CFF' : '#9A9AA5'}\n />\n <Text style={[styles.toolbarLabel, active && styles.toolbarLabelActive]}>\n {entry.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n\n {notice ? (\n <View style={styles.notice}>\n <Text style={styles.noticeText}>{notice}</Text>\n <Pressable onPress={() => setNotice(null)} hitSlop={8}>\n <Text style={styles.noticeDismiss}>OK</Text>\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction AdjustRow({\n label,\n value,\n format,\n onChange,\n}: {\n label: string;\n value: number;\n format: (v: number) => string;\n onChange: (dir: -1 | 1) => void;\n}) {\n return (\n <View style={styles.adjustRow}>\n <Text style={styles.adjustLabel}>{label}</Text>\n <Pressable\n onPress={() => onChange(-1)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} less`}\n >\n <MaterialCommunityIcons name=\"minus\" size={16} color=\"#F7F7FA\" />\n </Pressable>\n <Text style={styles.adjustValue}>{format(value)}</Text>\n <Pressable\n onPress={() => onChange(1)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} more`}\n >\n <MaterialCommunityIcons name=\"plus\" size={16} color=\"#F7F7FA\" />\n </Pressable>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#0A0A0C' },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n paddingVertical: 12,\n gap: 12,\n },\n headerTitle: { flex: 1, color: '#F7F7FA', fontSize: 15, fontWeight: '600', textAlign: 'center' },\n headerActions: { flexDirection: 'row', alignItems: 'center', gap: 16 },\n doneLabel: { color: '#A5B4FC', fontSize: 15, fontWeight: '600' },\n disabled: { opacity: 0.35 },\n stage: { flex: 1, marginHorizontal: 14, borderRadius: 18, overflow: 'hidden', backgroundColor: '#000000' },\n busyVeil: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center',\n justifyContent: 'center',\n gap: 10,\n backgroundColor: 'rgba(10, 10, 12, 0.55)',\n },\n busyLabel: { color: '#E8E8EE', fontSize: 12.5 },\n editedBadge: {\n position: 'absolute',\n right: 10,\n top: 10,\n paddingHorizontal: 8,\n paddingVertical: 3,\n borderRadius: 9,\n backgroundColor: 'rgba(139, 124, 255, 0.9)',\n },\n editedBadgeLabel: { color: '#0A0A0C', fontSize: 10.5, fontWeight: '700' },\n aiHint: { color: '#9A9AA5', fontSize: 11, lineHeight: 15, marginBottom: 8 },\n aiInput: {\n minHeight: 56,\n borderRadius: 10,\n paddingHorizontal: 10,\n paddingVertical: 8,\n backgroundColor: '#1F1F24',\n color: '#F7F7FA',\n textAlignVertical: 'top',\n marginBottom: 8,\n },\n chipOn: { borderColor: '#8B7CFF', backgroundColor: 'rgba(139,124,255,0.2)' },\n aiCta: {\n marginTop: 6,\n marginBottom: 8,\n paddingVertical: 10,\n borderRadius: 10,\n backgroundColor: '#F7F7FA',\n alignItems: 'center',\n },\n aiCtaLabel: { color: '#0f172a', fontWeight: '700', fontSize: 13 },\n variantThumb: {\n width: 64,\n height: 64,\n borderRadius: 8,\n overflow: 'hidden',\n marginRight: 8,\n backgroundColor: '#1F1F24',\n },\n variantImg: { width: '100%', height: '100%' },\n panel: {\n minHeight: 92,\n justifyContent: 'center',\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: 'rgba(255,255,255,0.08)',\n },\n row: { flexDirection: 'row', alignItems: 'center', gap: 8, flexWrap: 'wrap', paddingVertical: 4 },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 5,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 9,\n backgroundColor: '#1F1F24',\n borderWidth: 1,\n borderColor: 'transparent',\n },\n chipAccent: { backgroundColor: '#8B7CFF' },\n chipLabel: { color: '#F7F7FA', fontSize: 12.5, fontWeight: '500' },\n chipLabelDark: { color: '#0A0A0C' },\n applyBtn: { alignSelf: 'flex-start', marginTop: 8 },\n adjustRow: { flexDirection: 'row', alignItems: 'center', gap: 12, paddingVertical: 5 },\n adjustLabel: { color: '#9A9AA5', fontSize: 12.5, width: 82 },\n adjustValue: { color: '#F7F7FA', fontSize: 12.5, fontVariant: ['tabular-nums'], minWidth: 44, textAlign: 'center' },\n toolbar: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n paddingVertical: 8,\n paddingBottom: 10,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: 'rgba(255,255,255,0.08)',\n },\n toolbarTab: { alignItems: 'center', gap: 3, minWidth: 56 },\n toolbarLabel: { color: '#9A9AA5', fontSize: 10 },\n toolbarLabelActive: { color: '#8B7CFF', fontWeight: '600' },\n notice: {\n position: 'absolute',\n left: 20,\n right: 20,\n bottom: 84,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingHorizontal: 14,\n paddingVertical: 11,\n borderRadius: 12,\n backgroundColor: 'rgba(248, 250, 252, 0.96)',\n },\n noticeText: { flex: 1, color: '#0f172a', fontSize: 13 },\n noticeDismiss: { color: '#6C5CE7', fontSize: 13, fontWeight: '600' },\n});\n\nexport default ImageEditorExperience;\n"],"names":["React","RNImage","Image"],"mappings":"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"}
|