@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 @@
|
|
|
1
|
+
{"version":3,"file":"DesignExperience.js","sources":["../../../src/features/design/DesignExperience.tsx"],"sourcesContent":["/**\n * The design studio - templates, saved designs, the editor, and export.\n *\n * Delivery-first architecture, same rules as CanvasExperience: everything\n * here ships OTA inside a federated surface, host seams win when present and\n * the remote builds its own connector/upload seams when they are not\n * (binaries that predate them still get the full studio). Designs persist to\n * the surface index under `surface: design`; export flattens pages through\n * the image connector and can land the results on a canvas board.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Linking, Pressable, ScrollView, Share, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { friendlyMediaError } from '../canvas/videoEditor/mediaActions';\nimport type { RunMediaAction } from '../canvas/videoEditor/mediaActions';\nimport { createRemoteRunAction, createRemoteUploadMedia } from '../canvas/videoEditor/remoteMediaClient';\nimport { buildBoardState, frameForUpload, newBoardId, type CanvasItem } from '../canvas/canvasCore';\nimport { fetchMyCanvasBoards, newBoardChannelId, pushCanvasBoard } from '../canvas/surfaceIndex';\nimport {\n buildDesignState,\n designSignature,\n newDesignChannelId,\n newDesignDoc,\n parseDesignDoc,\n type DesignKind,\n type PersistedDesignDoc,\n} from './designCore';\nimport { defaultTitle, fetchMyDesigns, pushDesignDoc, type DesignDocSummary } from './designIndex';\nimport { deriveBlankPixelUrl, renderDesignDoc } from './exportDesign';\nimport { DesignEditorExperience } from './DesignEditorExperience';\n\nconst SAVE_DEBOUNCE_MS = 2200;\n\nexport interface DesignExperienceProps {\n token?: string | null;\n indexUrl: string;\n /** Open straight into the editor (from the canvas grid); omit for home. */\n entry?: { kind: DesignKind } | { channelId: string };\n /** Back to whoever embedded the studio (canvas grid, host tab). */\n onClose?: () => void;\n onPickLocalMedia?: () => Promise<CanvasItem[]>;\n uploadMedia?: (localUri: string) => Promise<string>;\n runMediaAction?: RunMediaAction;\n testID?: string;\n}\n\ninterface OpenDoc {\n channelId: string;\n doc: PersistedDesignDoc;\n}\n\nexport function DesignExperience({\n token,\n indexUrl,\n entry,\n onClose,\n onPickLocalMedia,\n uploadMedia,\n runMediaAction,\n testID,\n}: DesignExperienceProps) {\n // Host seams win (they can refresh auth); otherwise the remote builds its\n // own from what it already holds - same fallback rule as the canvas.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [open, setOpen] = useState<OpenDoc | null>(() =>\n entry && 'kind' in entry ? { channelId: newDesignChannelId(), doc: newDesignDoc(entry.kind) } : null,\n );\n const [canvasImages, setCanvasImages] = useState<string[]>([]);\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n const [results, setResults] = useState<{\n pages: Array<{ name: string; url: string }>;\n savedToCanvas: boolean;\n } | null>(null);\n const lastSavedRef = useRef<Record<string, string>>({});\n\n // Load the caller's designs (home grid; also resolves an entry channelId).\n useEffect(() => {\n if (!token || !indexUrl) {\n setLoading(false);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n setLoading(true);\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n if (cancelled) return;\n setDesigns(result.designs);\n setError(result.error);\n setLoading(false);\n if (entry && 'channelId' in entry) {\n const match = result.designs.find((d) => d.channelId === entry.channelId);\n if (match) setOpen({ channelId: match.channelId, doc: match.doc });\n }\n });\n return () => {\n cancelled = true;\n controller.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [token, indexUrl]);\n\n // Image source for the editor's OTA-safe picker: the user's canvas media.\n useEffect(() => {\n if (!token || !indexUrl || !open) return undefined;\n const controller = new AbortController();\n void fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n const urls: string[] = [];\n for (const board of result.boards) {\n for (const item of board.board.items) {\n if (item.type === 'image' && /^https?:/i.test(item.src)) urls.push(item.src);\n }\n }\n setCanvasImages([...new Set(urls)].slice(0, 24));\n });\n return () => controller.abort();\n }, [token, indexUrl, open?.channelId]);\n\n // Debounced persistence - signature-gated, wholesale metadata replace.\n useEffect(() => {\n if (!open || !token || !indexUrl) return undefined;\n const sig = designSignature(open.doc);\n if (lastSavedRef.current[open.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n const state = buildDesignState(open.doc);\n void pushDesignDoc({ url: indexUrl, token, channelId: open.channelId, doc: state }).then((ok) => {\n if (ok) lastSavedRef.current[open.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [open, token, indexUrl]);\n\n const closeEditor = useCallback(() => {\n setOpen(null);\n setResults(null);\n // Straight-to-editor embeds (canvas grid) return to their owner.\n if (entry) onClose?.();\n else if (token && indexUrl) {\n void fetchMyDesigns({ url: indexUrl, token }).then((r) => setDesigns(r.designs));\n }\n }, [entry, onClose, token, indexUrl]);\n\n const exportBusyRef = useRef(false);\n const handleExport = useCallback(\n (doc: PersistedDesignDoc) => {\n const runAction = effectiveRunAction;\n const blankUrl = deriveBlankPixelUrl(indexUrl);\n if (!runAction || !blankUrl) {\n setExporting({ stage: '', error: 'Export needs a signed-in session.' });\n return;\n }\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n setExporting({ stage: 'Starting render' });\n void renderDesignDoc(doc.pages, {\n runAction,\n blankUrl,\n uploadMedia: effectiveUploadMedia,\n onProgress: (p) => setExporting(p),\n })\n .then((urls) => {\n setExporting(null);\n setResults({\n pages: urls.map((url, i) => ({ name: doc.pages[i]?.name ?? `Page ${i + 1}`, url })),\n savedToCanvas: false,\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'design export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n },\n [effectiveRunAction, effectiveUploadMedia, indexUrl],\n );\n\n // Land the rendered pages on a canvas board so they show up beside the\n // user's other media (and on the web canvas).\n const saveResultsToCanvas = useCallback(async () => {\n if (!results || !token || !indexUrl || !open) return;\n const items: CanvasItem[] = results.pages.map((p, i) => ({\n id: newBoardId(),\n type: 'image',\n src: p.url,\n generatedAssetName: `${open.doc.title || defaultTitle(open.doc)} - ${p.name}`,\n zIndex: i + 1,\n ...frameForUpload('image'),\n x: 100 + i * 560,\n }));\n const state = buildBoardState(items, 1, open.doc.title || defaultTitle(open.doc));\n const ok = await pushCanvasBoard({ url: indexUrl, token, channelId: newBoardChannelId(), state });\n setResults((prev) => (prev ? { ...prev, savedToCanvas: ok } : prev));\n }, [results, token, indexUrl, open]);\n\n if (open) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignEditorExperience\n doc={open.doc}\n onChange={(doc) => setOpen({ channelId: open.channelId, doc })}\n onClose={closeEditor}\n onExport={handleExport}\n onPickLocalMedia={onPickLocalMedia}\n canvasImages={canvasImages}\n />\n {exporting ? (\n <View style={styles.overlay}>\n <View style={styles.overlayCard}>\n {exporting.error ? (\n <>\n <Text style={styles.overlayError}>Export failed</Text>\n <Text style={styles.overlayStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable onPress={() => setExporting(null)} style={styles.overlayDismiss}>\n <Text style={styles.overlayDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.overlayStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n {results ? (\n <View style={styles.overlay}>\n <View style={styles.overlayCard}>\n <Text style={styles.overlayTitle}>Design exported</Text>\n {results.pages.map((p) => (\n <View key={p.url} style={styles.resultRow}>\n <Image source={{ uri: p.url }} style={styles.resultThumb} contentFit=\"cover\" />\n <Text style={styles.resultName}>{p.name}</Text>\n <Pressable onPress={() => void Linking.openURL(p.url)} hitSlop={8}>\n <Text style={styles.resultAction}>Open</Text>\n </Pressable>\n <Pressable\n onPress={() => void Share.share({ url: p.url, message: p.url })}\n hitSlop={8}\n >\n <Text style={styles.resultAction}>Share</Text>\n </Pressable>\n </View>\n ))}\n <Pressable\n onPress={() => void saveResultsToCanvas()}\n style={[styles.overlayCta, results.savedToCanvas && styles.overlayCtaDone]}\n disabled={results.savedToCanvas}\n >\n <MaterialCommunityIcons\n name={results.savedToCanvas ? 'check' : 'view-dashboard-outline'}\n size={15}\n color=\"#0f172a\"\n />\n <Text style={styles.overlayCtaLabel}>\n {results.savedToCanvas ? 'Saved to canvas' : 'Save to canvas'}\n </Text>\n </Pressable>\n <Pressable onPress={() => setResults(null)} style={styles.overlayDismiss}>\n <Text style={styles.overlayDismissLabel}>Done</Text>\n </Pressable>\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n // Home: template cards + saved designs.\n return (\n <ScrollView style={styles.home} contentContainerStyle={styles.homeContent} testID={testID}>\n <Text style={styles.homeTitle}>Design studio</Text>\n <View style={styles.templateRow}>\n <TemplateCard\n icon=\"shape-square-plus\"\n label=\"Design\"\n hint=\"1080 × 1080\"\n onPress={() => setOpen({ channelId: newDesignChannelId(), doc: newDesignDoc('design') })}\n />\n <TemplateCard\n icon=\"tshirt-crew-outline\"\n label=\"T-shirt\"\n hint=\"Front & back\"\n onPress={() => setOpen({ channelId: newDesignChannelId(), doc: newDesignDoc('tshirt') })}\n />\n <TemplateCard\n icon=\"email-outline\"\n label=\"Postcard\"\n hint=\"Front & back\"\n onPress={() => setOpen({ channelId: newDesignChannelId(), doc: newDesignDoc('postcard') })}\n />\n <TemplateCard\n icon=\"view-carousel-outline\"\n label=\"Carousel\"\n hint=\"3 slides\"\n onPress={() => setOpen({ channelId: newDesignChannelId(), doc: newDesignDoc('carousel') })}\n />\n </View>\n {loading ? (\n <ActivityIndicator style={styles.homeSpinner} />\n ) : error ? (\n <Text style={styles.homeError}>{error}</Text>\n ) : designs.length ? (\n <>\n <Text style={styles.homeSection}>Your designs</Text>\n {designs.map((d) => (\n <Pressable\n key={d.channelId}\n style={styles.designRow}\n onPress={() => {\n const doc = parseDesignDoc(d.doc) ?? d.doc;\n setOpen({ channelId: d.channelId, doc });\n }}\n >\n <MaterialCommunityIcons\n name={\n d.doc.kind === 'tshirt'\n ? 'tshirt-crew-outline'\n : d.doc.kind === 'postcard'\n ? 'email-outline'\n : d.doc.kind === 'carousel'\n ? 'view-carousel-outline'\n : 'shape-square-plus'\n }\n size={20}\n color=\"#475569\"\n />\n <View style={styles.designMeta}>\n <Text style={styles.designTitle}>{d.title || defaultTitle(d.doc)}</Text>\n <Text style={styles.designSub}>\n {d.doc.pages.length} page{d.doc.pages.length === 1 ? '' : 's'} ·{' '}\n {d.doc.pages.reduce((n, p) => n + p.layers.length, 0)} layers\n </Text>\n </View>\n <MaterialCommunityIcons name=\"chevron-right\" size={20} color=\"#94a3b8\" />\n </Pressable>\n ))}\n </>\n ) : (\n <Text style={styles.homeHint}>Pick a template to start - designs save automatically.</Text>\n )}\n </ScrollView>\n );\n}\n\nfunction TemplateCard({\n icon,\n label,\n hint,\n onPress,\n}: {\n icon: string;\n label: string;\n hint: string;\n onPress: () => void;\n}) {\n return (\n <Pressable onPress={onPress} style={styles.templateCard} accessibilityRole=\"button\">\n <MaterialCommunityIcons name={icon as 'plus'} size={26} color=\"#0f172a\" />\n <Text style={styles.templateLabel}>{label}</Text>\n <Text style={styles.templateHint}>{hint}</Text>\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1 },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 28,\n },\n overlayCard: {\n width: '100%',\n maxWidth: 360,\n alignItems: 'center',\n gap: 10,\n backgroundColor: '#17171C',\n borderRadius: 16,\n paddingVertical: 20,\n paddingHorizontal: 20,\n },\n overlayTitle: { fontSize: 16, fontWeight: '600', color: '#F7F7FA' },\n overlayStage: { fontSize: 13, color: '#CBD5E1', textAlign: 'center' },\n overlayError: { fontSize: 15, fontWeight: '600', color: '#F87171' },\n overlayDismiss: { marginTop: 4, paddingHorizontal: 14, paddingVertical: 8 },\n overlayDismissLabel: { fontSize: 13, fontWeight: '600', color: '#A5B4FC' },\n overlayCta: {\n marginTop: 6,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n backgroundColor: '#A5B4FC',\n borderRadius: 16,\n paddingHorizontal: 16,\n paddingVertical: 9,\n },\n overlayCtaDone: { backgroundColor: '#86EFAC' },\n overlayCtaLabel: { fontSize: 13, fontWeight: '600', color: '#0f172a' },\n resultRow: { flexDirection: 'row', alignItems: 'center', gap: 10, alignSelf: 'stretch' },\n resultThumb: { width: 44, height: 44, borderRadius: 8, backgroundColor: '#26262E' },\n resultName: { flex: 1, fontSize: 13, color: '#E2E8F0' },\n resultAction: { fontSize: 13, fontWeight: '600', color: '#A5B4FC', paddingHorizontal: 6 },\n home: { flex: 1, backgroundColor: '#eef1f4' },\n homeContent: { padding: 20, gap: 12 },\n homeTitle: { fontSize: 20, fontWeight: '600', color: '#0f172a' },\n templateRow: { flexDirection: 'row', gap: 12 },\n templateCard: {\n flex: 1,\n alignItems: 'center',\n gap: 4,\n backgroundColor: '#ffffff',\n borderRadius: 14,\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n paddingVertical: 18,\n },\n templateLabel: { fontSize: 14, fontWeight: '600', color: '#0f172a' },\n templateHint: { fontSize: 11, color: '#94a3b8' },\n homeSection: { marginTop: 8, fontSize: 13, fontWeight: '600', color: '#475569' },\n homeSpinner: { marginTop: 24 },\n homeError: { marginTop: 16, fontSize: 13, color: '#b91c1c' },\n homeHint: { marginTop: 12, fontSize: 13, color: '#64748b' },\n designRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n backgroundColor: '#ffffff',\n borderRadius: 12,\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n paddingHorizontal: 14,\n paddingVertical: 12,\n },\n designMeta: { flex: 1 },\n designTitle: { fontSize: 14, fontWeight: '600', color: '#0f172a' },\n designSub: { marginTop: 2, fontSize: 11, color: '#94a3b8' },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
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
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
const TSHIRT_COLORS = ["#ffffff", "#0f172a", "#dc2626", "#2563eb", "#16a34a", "#f59e0b"];
|
|
33
|
+
const DESIGN_SWATCHES = ["#0f172a", "#ffffff", "#ef4444", "#f97316", "#facc15", "#22c55e", "#3b82f6", "#8b5cf6", "#ec4899"];
|
|
34
|
+
const TSHIRT_PRINT_AREA = {
|
|
35
|
+
x: 0.28,
|
|
36
|
+
y: 0.22,
|
|
37
|
+
width: 0.44,
|
|
38
|
+
height: 0.5
|
|
39
|
+
};
|
|
40
|
+
let counter = 0;
|
|
41
|
+
function newId(prefix) {
|
|
42
|
+
counter += 1;
|
|
43
|
+
const c = globalThis.crypto;
|
|
44
|
+
if (c == null ? void 0 : c.randomUUID) return `${prefix}-${c.randomUUID().slice(0, 8)}`;
|
|
45
|
+
return `${prefix}-${counter}-${Math.random().toString(36).slice(2, 8)}`;
|
|
46
|
+
}
|
|
47
|
+
function newDesignChannelId() {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
const rand = () => Math.random().toString(36).slice(2, 10);
|
|
50
|
+
try {
|
|
51
|
+
const bytes = new Uint8Array(8);
|
|
52
|
+
(_b = (_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues) == null ? void 0 : _b.call(_a, bytes);
|
|
53
|
+
if (bytes.some((b) => b !== 0)) {
|
|
54
|
+
return `design-${Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("")}`;
|
|
55
|
+
}
|
|
56
|
+
} catch (e) {
|
|
57
|
+
}
|
|
58
|
+
return `design-${rand()}${rand()}`;
|
|
59
|
+
}
|
|
60
|
+
function newDesignDoc(kind) {
|
|
61
|
+
if (kind === "tshirt") {
|
|
62
|
+
return {
|
|
63
|
+
version: 1,
|
|
64
|
+
kind,
|
|
65
|
+
savedAt: 0,
|
|
66
|
+
pages: [{
|
|
67
|
+
id: newId("page"),
|
|
68
|
+
name: "Front",
|
|
69
|
+
width: 1200,
|
|
70
|
+
height: 1500,
|
|
71
|
+
background: "#ffffff",
|
|
72
|
+
layers: []
|
|
73
|
+
}, {
|
|
74
|
+
id: newId("page"),
|
|
75
|
+
name: "Back",
|
|
76
|
+
width: 1200,
|
|
77
|
+
height: 1500,
|
|
78
|
+
background: "#ffffff",
|
|
79
|
+
layers: []
|
|
80
|
+
}]
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (kind === "postcard") {
|
|
84
|
+
return {
|
|
85
|
+
version: 1,
|
|
86
|
+
kind,
|
|
87
|
+
savedAt: 0,
|
|
88
|
+
pages: [{
|
|
89
|
+
id: newId("page"),
|
|
90
|
+
name: "Front",
|
|
91
|
+
width: 1500,
|
|
92
|
+
height: 1060,
|
|
93
|
+
background: "#f8fafc",
|
|
94
|
+
layers: [__spreadProps(__spreadValues({}, newTextLayer("Greetings!", 1)), {
|
|
95
|
+
x: 90,
|
|
96
|
+
y: 90,
|
|
97
|
+
width: 900,
|
|
98
|
+
height: 160,
|
|
99
|
+
fontSize: 120,
|
|
100
|
+
bold: true
|
|
101
|
+
})]
|
|
102
|
+
}, {
|
|
103
|
+
id: newId("page"),
|
|
104
|
+
name: "Back",
|
|
105
|
+
width: 1500,
|
|
106
|
+
height: 1060,
|
|
107
|
+
background: "#ffffff",
|
|
108
|
+
layers: []
|
|
109
|
+
}]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (kind === "carousel") {
|
|
113
|
+
const slide = (n) => ({
|
|
114
|
+
id: newId("page"),
|
|
115
|
+
name: `Slide ${n}`,
|
|
116
|
+
width: 1080,
|
|
117
|
+
height: 1080,
|
|
118
|
+
background: "#ffffff",
|
|
119
|
+
layers: []
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
version: 1,
|
|
123
|
+
kind,
|
|
124
|
+
savedAt: 0,
|
|
125
|
+
title: "Carousel",
|
|
126
|
+
pages: [slide(1), slide(2), slide(3)]
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
version: 1,
|
|
131
|
+
kind: "design",
|
|
132
|
+
savedAt: 0,
|
|
133
|
+
pages: [{
|
|
134
|
+
id: newId("page"),
|
|
135
|
+
name: "Page 1",
|
|
136
|
+
width: 1080,
|
|
137
|
+
height: 1080,
|
|
138
|
+
background: "#ffffff",
|
|
139
|
+
layers: []
|
|
140
|
+
}]
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function newTextLayer(text, zIndex) {
|
|
144
|
+
return {
|
|
145
|
+
id: newId("text"),
|
|
146
|
+
type: "text",
|
|
147
|
+
text,
|
|
148
|
+
x: 120,
|
|
149
|
+
y: 120,
|
|
150
|
+
width: 640,
|
|
151
|
+
height: 120,
|
|
152
|
+
fontSize: 72,
|
|
153
|
+
color: "#0f172a",
|
|
154
|
+
bold: false,
|
|
155
|
+
align: "left",
|
|
156
|
+
opacity: 1,
|
|
157
|
+
zIndex
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function newShapeLayer(shape, zIndex) {
|
|
161
|
+
return {
|
|
162
|
+
id: newId("shape"),
|
|
163
|
+
type: "shape",
|
|
164
|
+
shape,
|
|
165
|
+
x: 140,
|
|
166
|
+
y: 200,
|
|
167
|
+
width: shape === "line" ? 600 : 420,
|
|
168
|
+
height: shape === "line" ? 12 : 300,
|
|
169
|
+
fill: "#3b82f6",
|
|
170
|
+
cornerRadius: shape === "line" ? 6 : 16,
|
|
171
|
+
opacity: 1,
|
|
172
|
+
zIndex
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
function newImageLayer(src, zIndex) {
|
|
176
|
+
return {
|
|
177
|
+
id: newId("image"),
|
|
178
|
+
type: "image",
|
|
179
|
+
src,
|
|
180
|
+
x: 160,
|
|
181
|
+
y: 160,
|
|
182
|
+
width: 640,
|
|
183
|
+
height: 480,
|
|
184
|
+
opacity: 1,
|
|
185
|
+
zIndex
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function parseDesignDoc(raw) {
|
|
189
|
+
if (!raw || typeof raw !== "object") return null;
|
|
190
|
+
const doc = raw;
|
|
191
|
+
if (doc.version !== 1 || !Array.isArray(doc.pages) || doc.pages.length === 0) return null;
|
|
192
|
+
const kind = doc.kind === "tshirt" || doc.kind === "postcard" || doc.kind === "carousel" ? doc.kind : "design";
|
|
193
|
+
const pages = doc.pages.map((page) => parsePage(page)).filter((page) => page !== null);
|
|
194
|
+
if (pages.length === 0) return null;
|
|
195
|
+
return __spreadValues({
|
|
196
|
+
version: 1,
|
|
197
|
+
kind,
|
|
198
|
+
savedAt: typeof doc.savedAt === "number" ? doc.savedAt : 0,
|
|
199
|
+
pages
|
|
200
|
+
}, typeof doc.title === "string" && doc.title ? {
|
|
201
|
+
title: doc.title
|
|
202
|
+
} : {});
|
|
203
|
+
}
|
|
204
|
+
function parsePage(raw) {
|
|
205
|
+
if (!raw || typeof raw !== "object") return null;
|
|
206
|
+
const page = raw;
|
|
207
|
+
if (typeof page.id !== "string" || typeof page.width !== "number" || typeof page.height !== "number" || page.width <= 0 || page.height <= 0) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
id: page.id,
|
|
212
|
+
name: typeof page.name === "string" && page.name ? page.name : "Page",
|
|
213
|
+
width: page.width,
|
|
214
|
+
height: page.height,
|
|
215
|
+
background: typeof page.background === "string" && page.background ? page.background : "#ffffff",
|
|
216
|
+
layers: Array.isArray(page.layers) ? page.layers.filter(isRenderableLayer) : []
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
function isRenderableLayer(raw) {
|
|
220
|
+
if (!raw || typeof raw !== "object") return false;
|
|
221
|
+
const layer = raw;
|
|
222
|
+
const baseOk = typeof layer.id === "string" && [layer.x, layer.y, layer.width, layer.height].every((n) => typeof n === "number" && Number.isFinite(n)) && layer.width > 0 && layer.height > 0 && typeof layer.zIndex === "number";
|
|
223
|
+
if (!baseOk) return false;
|
|
224
|
+
if (layer.type === "text") return typeof layer.text === "string" && typeof layer.fontSize === "number";
|
|
225
|
+
if (layer.type === "shape") return layer.shape === "rect" || layer.shape === "line";
|
|
226
|
+
if (layer.type === "image") return typeof layer.src === "string" && layer.src.length > 0 && !layer.src.startsWith("blob:");
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
function buildDesignState(doc, currentTitle) {
|
|
230
|
+
return __spreadValues(__spreadProps(__spreadValues({}, doc), {
|
|
231
|
+
savedAt: Date.now()
|
|
232
|
+
}), doc.title ? {
|
|
233
|
+
title: doc.title
|
|
234
|
+
} : {});
|
|
235
|
+
}
|
|
236
|
+
function designSignature(doc) {
|
|
237
|
+
var _a;
|
|
238
|
+
return JSON.stringify({
|
|
239
|
+
kind: doc.kind,
|
|
240
|
+
title: (_a = doc.title) != null ? _a : "",
|
|
241
|
+
pages: doc.pages.map((page) => [page.background, page.layers.map((layer) => {
|
|
242
|
+
const _a2 = layer, {
|
|
243
|
+
zIndex
|
|
244
|
+
} = _a2, rest = __objRest(_a2, [
|
|
245
|
+
"zIndex"
|
|
246
|
+
]);
|
|
247
|
+
return [zIndex, rest];
|
|
248
|
+
})])
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function layerPaintOrder(layers) {
|
|
252
|
+
return [...layers].sort((a, b) => a.zIndex - b.zIndex || a.id.localeCompare(b.id));
|
|
253
|
+
}
|
|
254
|
+
function replaceLayer(page, layer) {
|
|
255
|
+
return __spreadProps(__spreadValues({}, page), {
|
|
256
|
+
layers: page.layers.map((l) => l.id === layer.id ? layer : l)
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
function removeLayer(page, id) {
|
|
260
|
+
return __spreadProps(__spreadValues({}, page), {
|
|
261
|
+
layers: page.layers.filter((l) => l.id !== id)
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
function addLayer(page, layer) {
|
|
265
|
+
return __spreadProps(__spreadValues({}, page), {
|
|
266
|
+
layers: [...page.layers, layer]
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function nextZ(page) {
|
|
270
|
+
return Math.max(0, ...page.layers.map((l) => l.zIndex)) + 1;
|
|
271
|
+
}
|
|
272
|
+
function bringLayerToFront(page, id) {
|
|
273
|
+
const top = Math.max(...page.layers.map((l) => l.zIndex), 0);
|
|
274
|
+
return __spreadProps(__spreadValues({}, page), {
|
|
275
|
+
layers: page.layers.map((l) => l.id === id ? __spreadProps(__spreadValues({}, l), {
|
|
276
|
+
zIndex: top + 1
|
|
277
|
+
}) : l)
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
function sendLayerToBack(page, id) {
|
|
281
|
+
const bottom = Math.min(...page.layers.map((l) => l.zIndex), 0);
|
|
282
|
+
return __spreadProps(__spreadValues({}, page), {
|
|
283
|
+
layers: page.layers.map((l) => l.id === id ? __spreadProps(__spreadValues({}, l), {
|
|
284
|
+
zIndex: bottom - 1
|
|
285
|
+
}) : l)
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
function duplicateLayer(page, id) {
|
|
289
|
+
const source = page.layers.find((l) => l.id === id);
|
|
290
|
+
if (!source) return page;
|
|
291
|
+
const copy = __spreadProps(__spreadValues({}, source), {
|
|
292
|
+
id: newId(source.type),
|
|
293
|
+
x: source.x + 40,
|
|
294
|
+
y: source.y + 40,
|
|
295
|
+
zIndex: nextZ(page)
|
|
296
|
+
});
|
|
297
|
+
return addLayer(page, copy);
|
|
298
|
+
}export{DESIGN_SWATCHES,TSHIRT_COLORS,TSHIRT_PRINT_AREA,addLayer,bringLayerToFront,buildDesignState,designSignature,duplicateLayer,isRenderableLayer,layerPaintOrder,newDesignChannelId,newDesignDoc,newImageLayer,newShapeLayer,newTextLayer,nextZ,parseDesignDoc,removeLayer,replaceLayer,sendLayerToBack};//# sourceMappingURL=designCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designCore.js","sources":["../../../src/features/design/designCore.ts"],"sourcesContent":["/**\n * Design document model - the native design studio's persisted contract.\n *\n * Modeled on the IMG.LY CE.SDK starter kits (design editor, t-shirt designer,\n * postcard editor) but implemented as pure data + math so the whole editor\n * ships OTA inside a federated surface: no native design SDK in the binary.\n * The doc rides a surface-index row (`surface: design`) exactly like a canvas\n * board rides `surface: canvas` - `PersistedDesignDoc` version 1 IS the wire\n * shape, and the tests pin fixtures of that JSON so drift fails a test rather\n * than corrupting a saved design.\n *\n * Layer types are deliberately the set the connector-side export can render\n * faithfully (exportDesign.ts): solid shapes (PAD), images (RESIZE+COMPOSE)\n * and text (ANNOTATE). No rotation in v1 - the compose ops cannot rotate an\n * overlay, and an editor that shows what export cannot produce lies.\n */\n\nexport type DesignKind = 'design' | 'tshirt' | 'postcard' | 'carousel';\n\ninterface LayerBase {\n id: string;\n /** Page-space rect (page units, origin top-left). */\n x: number;\n y: number;\n width: number;\n height: number;\n /** 0..1 */\n opacity: number;\n zIndex: number;\n}\n\nexport interface TextLayer extends LayerBase {\n type: 'text';\n text: string;\n fontSize: number;\n color: string;\n bold: boolean;\n align: 'left' | 'center' | 'right';\n}\n\nexport interface ShapeLayer extends LayerBase {\n type: 'shape';\n shape: 'rect' | 'line';\n fill: string;\n cornerRadius: number;\n}\n\nexport interface ImageLayer extends LayerBase {\n type: 'image';\n src: string;\n}\n\nexport type DesignLayer = TextLayer | ShapeLayer | ImageLayer;\n\nexport interface DesignPage {\n id: string;\n name: string;\n width: number;\n height: number;\n /** Page fill; for a t-shirt this is the shirt colour. */\n background: string;\n layers: DesignLayer[];\n}\n\nexport interface PersistedDesignDoc {\n version: 1;\n kind: DesignKind;\n savedAt: number;\n title?: string;\n pages: DesignPage[];\n}\n\n/** Shirt colours the t-shirt designer offers (page.background). */\nexport const TSHIRT_COLORS = ['#ffffff', '#0f172a', '#dc2626', '#2563eb', '#16a34a', '#f59e0b'] as const;\n\n/** Fill / text swatches shared by the style panels. */\nexport const DESIGN_SWATCHES = [\n '#0f172a',\n '#ffffff',\n '#ef4444',\n '#f97316',\n '#facc15',\n '#22c55e',\n '#3b82f6',\n '#8b5cf6',\n '#ec4899',\n] as const;\n\n/**\n * Printable region of a t-shirt page, as fractions of the page rect - the\n * dashed outline the starter kit draws so designers know the safe print zone.\n * Chrome only: guides are never exported.\n */\nexport const TSHIRT_PRINT_AREA = { x: 0.28, y: 0.22, width: 0.44, height: 0.5 } as const;\n\nlet counter = 0;\n/** Test seam: deterministic ids. */\nexport function resetDesignIds(): void {\n counter = 0;\n}\n\nfunction newId(prefix: string): string {\n counter += 1;\n const c = globalThis.crypto as Crypto | undefined;\n if (c?.randomUUID) return `${prefix}-${c.randomUUID().slice(0, 8)}`;\n return `${prefix}-${counter}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/** Mint a doc id - the row IS its channel, like a canvas board. */\nexport function newDesignChannelId(): string {\n const rand = () => Math.random().toString(36).slice(2, 10);\n try {\n const bytes = new Uint8Array(8);\n (globalThis.crypto as Crypto | undefined)?.getRandomValues?.(bytes);\n if (bytes.some((b) => b !== 0)) {\n return `design-${Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('')}`;\n }\n } catch {\n // fall through to Math.random\n }\n return `design-${rand()}${rand()}`;\n}\n\n/**\n * Template starting points - the three starter kits.\n * Page sizes are pixel canvases at export resolution: square social design,\n * portrait apparel print, 6x4.25\" postcard at ~250dpi.\n */\nexport function newDesignDoc(kind: DesignKind): PersistedDesignDoc {\n if (kind === 'tshirt') {\n return {\n version: 1,\n kind,\n savedAt: 0,\n pages: [\n { id: newId('page'), name: 'Front', width: 1200, height: 1500, background: '#ffffff', layers: [] },\n { id: newId('page'), name: 'Back', width: 1200, height: 1500, background: '#ffffff', layers: [] },\n ],\n };\n }\n if (kind === 'postcard') {\n return {\n version: 1,\n kind,\n savedAt: 0,\n pages: [\n {\n id: newId('page'),\n name: 'Front',\n width: 1500,\n height: 1060,\n background: '#f8fafc',\n layers: [\n {\n ...newTextLayer('Greetings!', 1),\n x: 90,\n y: 90,\n width: 900,\n height: 160,\n fontSize: 120,\n bold: true,\n },\n ],\n },\n { id: newId('page'), name: 'Back', width: 1500, height: 1060, background: '#ffffff', layers: [] },\n ],\n };\n }\n if (kind === 'carousel') {\n // Web carousel studio: three square social slides (not a single design page).\n const slide = (n: number) => ({\n id: newId('page'),\n name: `Slide ${n}`,\n width: 1080,\n height: 1080,\n background: '#ffffff',\n layers: [] as DesignPage['layers'],\n });\n return {\n version: 1,\n kind,\n savedAt: 0,\n title: 'Carousel',\n pages: [slide(1), slide(2), slide(3)],\n };\n }\n return {\n version: 1,\n kind: 'design',\n savedAt: 0,\n pages: [{ id: newId('page'), name: 'Page 1', width: 1080, height: 1080, background: '#ffffff', layers: [] }],\n };\n}\n\nexport function newTextLayer(text: string, zIndex: number): TextLayer {\n return {\n id: newId('text'),\n type: 'text',\n text,\n x: 120,\n y: 120,\n width: 640,\n height: 120,\n fontSize: 72,\n color: '#0f172a',\n bold: false,\n align: 'left',\n opacity: 1,\n zIndex,\n };\n}\n\nexport function newShapeLayer(shape: ShapeLayer['shape'], zIndex: number): ShapeLayer {\n return {\n id: newId('shape'),\n type: 'shape',\n shape,\n x: 140,\n y: 200,\n width: shape === 'line' ? 600 : 420,\n height: shape === 'line' ? 12 : 300,\n fill: '#3b82f6',\n cornerRadius: shape === 'line' ? 6 : 16,\n opacity: 1,\n zIndex,\n };\n}\n\nexport function newImageLayer(src: string, zIndex: number): ImageLayer {\n return { id: newId('image'), type: 'image', src, x: 160, y: 160, width: 640, height: 480, opacity: 1, zIndex };\n}\n\n/** Parse a persisted doc, tolerating the unknown: bad rows drop, not throw. */\nexport function parseDesignDoc(raw: unknown): PersistedDesignDoc | null {\n if (!raw || typeof raw !== 'object') return null;\n const doc = raw as Partial<PersistedDesignDoc>;\n if (doc.version !== 1 || !Array.isArray(doc.pages) || doc.pages.length === 0) return null;\n const kind: DesignKind =\n doc.kind === 'tshirt' || doc.kind === 'postcard' || doc.kind === 'carousel' ? doc.kind : 'design';\n const pages = doc.pages.map((page) => parsePage(page)).filter((page): page is DesignPage => page !== null);\n if (pages.length === 0) return null;\n return {\n version: 1,\n kind,\n savedAt: typeof doc.savedAt === 'number' ? doc.savedAt : 0,\n pages,\n ...(typeof doc.title === 'string' && doc.title ? { title: doc.title } : {}),\n };\n}\n\nfunction parsePage(raw: unknown): DesignPage | null {\n if (!raw || typeof raw !== 'object') return null;\n const page = raw as Partial<DesignPage>;\n if (\n typeof page.id !== 'string' ||\n typeof page.width !== 'number' ||\n typeof page.height !== 'number' ||\n page.width <= 0 ||\n page.height <= 0\n ) {\n return null;\n }\n return {\n id: page.id,\n name: typeof page.name === 'string' && page.name ? page.name : 'Page',\n width: page.width,\n height: page.height,\n background: typeof page.background === 'string' && page.background ? page.background : '#ffffff',\n layers: Array.isArray(page.layers) ? page.layers.filter(isRenderableLayer) : [],\n };\n}\n\n/** A layer the editor and export can both draw. */\nexport function isRenderableLayer(raw: unknown): raw is DesignLayer {\n if (!raw || typeof raw !== 'object') return false;\n const layer = raw as Partial<DesignLayer> & { [key: string]: unknown };\n const baseOk =\n typeof layer.id === 'string' &&\n [layer.x, layer.y, layer.width, layer.height].every((n) => typeof n === 'number' && Number.isFinite(n)) &&\n (layer.width as number) > 0 &&\n (layer.height as number) > 0 &&\n typeof layer.zIndex === 'number';\n if (!baseOk) return false;\n if (layer.type === 'text') return typeof layer.text === 'string' && typeof layer.fontSize === 'number';\n if (layer.type === 'shape') return layer.shape === 'rect' || layer.shape === 'line';\n if (layer.type === 'image')\n return typeof layer.src === 'string' && layer.src.length > 0 && !layer.src.startsWith('blob:');\n return false;\n}\n\n/** State to write to the index - savedAt bumps, title is sticky once set. */\nexport function buildDesignState(doc: PersistedDesignDoc, currentTitle?: string): PersistedDesignDoc {\n return {\n ...doc,\n savedAt: Date.now(),\n ...(currentTitle || doc.title ? { title: currentTitle || doc.title } : {}),\n };\n}\n\n/** Comparable fingerprint of what is worth a write (geometry included - a\n * design IS its layout, unlike a canvas board where geometry is secondary). */\nexport function designSignature(doc: PersistedDesignDoc): string {\n return JSON.stringify({\n kind: doc.kind,\n title: doc.title ?? '',\n pages: doc.pages.map((page) => [\n page.background,\n page.layers.map((layer) => {\n const { zIndex, ...rest } = layer;\n return [zIndex, rest];\n }),\n ]),\n });\n}\n\n/** Painter's order: stable sort by zIndex. */\nexport function layerPaintOrder(layers: readonly DesignLayer[]): DesignLayer[] {\n return [...layers].sort((a, b) => a.zIndex - b.zIndex || a.id.localeCompare(b.id));\n}\n\nexport function replaceLayer(page: DesignPage, layer: DesignLayer): DesignPage {\n return { ...page, layers: page.layers.map((l) => (l.id === layer.id ? layer : l)) };\n}\n\nexport function removeLayer(page: DesignPage, id: string): DesignPage {\n return { ...page, layers: page.layers.filter((l) => l.id !== id) };\n}\n\nexport function addLayer(page: DesignPage, layer: DesignLayer): DesignPage {\n return { ...page, layers: [...page.layers, layer] };\n}\n\nexport function nextZ(page: DesignPage): number {\n return Math.max(0, ...page.layers.map((l) => l.zIndex)) + 1;\n}\n\nexport function bringLayerToFront(page: DesignPage, id: string): DesignPage {\n const top = Math.max(...page.layers.map((l) => l.zIndex), 0);\n return { ...page, layers: page.layers.map((l) => (l.id === id ? { ...l, zIndex: top + 1 } : l)) };\n}\n\nexport function sendLayerToBack(page: DesignPage, id: string): DesignPage {\n const bottom = Math.min(...page.layers.map((l) => l.zIndex), 0);\n return { ...page, layers: page.layers.map((l) => (l.id === id ? { ...l, zIndex: bottom - 1 } : l)) };\n}\n\nexport function duplicateLayer(page: DesignPage, id: string): DesignPage {\n const source = page.layers.find((l) => l.id === id);\n if (!source) return page;\n const copy: DesignLayer = {\n ...source,\n id: newId(source.type),\n x: source.x + 40,\n y: source.y + 40,\n zIndex: nextZ(page),\n };\n return addLayer(page, copy);\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import {parseDesignDoc}from'./designCore.js';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 CHANNEL_FIELDS = "id surface channelId title metadata updatedAt";
|
|
18
|
+
async function fetchMyDesigns(opts) {
|
|
19
|
+
var _a, _b, _c, _d;
|
|
20
|
+
if (!opts.url) return {
|
|
21
|
+
designs: [],
|
|
22
|
+
error: "No design index configured for this build."
|
|
23
|
+
};
|
|
24
|
+
let payload;
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(opts.url, {
|
|
27
|
+
method: "POST",
|
|
28
|
+
headers: __spreadValues({
|
|
29
|
+
"content-type": "application/json"
|
|
30
|
+
}, opts.token ? {
|
|
31
|
+
authorization: `Bearer ${opts.token}`
|
|
32
|
+
} : {}),
|
|
33
|
+
body: JSON.stringify({
|
|
34
|
+
query: `query MySurfaceChannels($surface: SurfaceType) {
|
|
35
|
+
mySurfaceChannels(surface: $surface) { ${CHANNEL_FIELDS} }
|
|
36
|
+
}`,
|
|
37
|
+
variables: {
|
|
38
|
+
surface: "design"
|
|
39
|
+
}
|
|
40
|
+
}),
|
|
41
|
+
signal: opts.signal
|
|
42
|
+
});
|
|
43
|
+
if (response.status === 401 || response.status === 403) {
|
|
44
|
+
return {
|
|
45
|
+
designs: [],
|
|
46
|
+
error: "Your session expired. Sign in again to see your designs."
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
return {
|
|
51
|
+
designs: [],
|
|
52
|
+
error: `The design index is unreachable (HTTP ${response.status}).`
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
payload = await response.json();
|
|
56
|
+
} catch (err) {
|
|
57
|
+
if (err instanceof Error && err.name === "AbortError") return {
|
|
58
|
+
designs: [],
|
|
59
|
+
error: null
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
designs: [],
|
|
63
|
+
error: "Could not reach the design index. Check your connection."
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if ((_a = payload == null ? void 0 : payload.errors) == null ? void 0 : _a.length) {
|
|
67
|
+
const raw = ((_b = payload.errors[0]) == null ? void 0 : _b.message) || "";
|
|
68
|
+
const isAuth = /tenantid|unauthenticated|unauthorized|not authorised|forbidden/i.test(raw);
|
|
69
|
+
return {
|
|
70
|
+
designs: [],
|
|
71
|
+
error: isAuth ? "Your session expired. Sign in again to see your designs." : raw || "The design index rejected the request."
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const designs = [];
|
|
75
|
+
for (const row of (_d = (_c = payload == null ? void 0 : payload.data) == null ? void 0 : _c.mySurfaceChannels) != null ? _d : []) {
|
|
76
|
+
const channelId = typeof (row == null ? void 0 : row.channelId) === "string" ? row.channelId : "";
|
|
77
|
+
if (!channelId) continue;
|
|
78
|
+
const doc = parseDesignDoc(coerceMetadata(row == null ? void 0 : row.metadata));
|
|
79
|
+
if (!doc) continue;
|
|
80
|
+
const title = typeof (row == null ? void 0 : row.title) === "string" ? row.title : void 0;
|
|
81
|
+
designs.push({
|
|
82
|
+
channelId,
|
|
83
|
+
title: doc.title || title,
|
|
84
|
+
savedAt: doc.savedAt,
|
|
85
|
+
doc
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
designs.sort((a, b) => b.savedAt - a.savedAt);
|
|
89
|
+
return {
|
|
90
|
+
designs,
|
|
91
|
+
error: null
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async function pushDesignDoc(opts) {
|
|
95
|
+
var _a, _b, _c, _d, _e;
|
|
96
|
+
const channelId = (_a = opts.channelId) == null ? void 0 : _a.trim();
|
|
97
|
+
if (!channelId || !opts.url) return false;
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetch(opts.url, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers: __spreadValues({
|
|
102
|
+
"content-type": "application/json"
|
|
103
|
+
}, opts.token ? {
|
|
104
|
+
authorization: `Bearer ${opts.token}`
|
|
105
|
+
} : {}),
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
query: `mutation RegisterSurfaceChannel($input: RegisterSurfaceChannelInput!) {
|
|
108
|
+
registerSurfaceChannel(input: $input) { ${CHANNEL_FIELDS} }
|
|
109
|
+
}`,
|
|
110
|
+
variables: {
|
|
111
|
+
input: {
|
|
112
|
+
surface: "design",
|
|
113
|
+
channelId,
|
|
114
|
+
sessionId: channelId,
|
|
115
|
+
title: opts.doc.title || defaultTitle(opts.doc),
|
|
116
|
+
metadata: opts.doc
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
});
|
|
121
|
+
if (!response.ok) return false;
|
|
122
|
+
const payload = await response.json();
|
|
123
|
+
if ((_b = payload == null ? void 0 : payload.errors) == null ? void 0 : _b.length) {
|
|
124
|
+
if (__DEV__) {
|
|
125
|
+
console.warn("[pushDesignDoc]", (_c = payload.errors[0]) == null ? void 0 : _c.message);
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
return Boolean((_e = (_d = payload == null ? void 0 : payload.data) == null ? void 0 : _d.registerSurfaceChannel) == null ? void 0 : _e.id);
|
|
130
|
+
} catch (err) {
|
|
131
|
+
if (__DEV__) {
|
|
132
|
+
console.warn("[pushDesignDoc] failed:", err);
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function defaultTitle(doc) {
|
|
138
|
+
if (doc.kind === "tshirt") return "T-shirt design";
|
|
139
|
+
if (doc.kind === "postcard") return "Postcard";
|
|
140
|
+
if (doc.kind === "carousel") return "Carousel";
|
|
141
|
+
return "Untitled design";
|
|
142
|
+
}
|
|
143
|
+
function coerceMetadata(value) {
|
|
144
|
+
if (typeof value !== "string") return value;
|
|
145
|
+
try {
|
|
146
|
+
return JSON.parse(value);
|
|
147
|
+
} catch (e) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}export{defaultTitle,fetchMyDesigns,pushDesignDoc};//# sourceMappingURL=designIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designIndex.js","sources":["../../../src/features/design/designIndex.ts"],"sourcesContent":["/**\n * Surface-index reader/writer for design documents.\n *\n * Same store and wire shape as the canvas boards (`surfaceIndex.ts`), under\n * the index's `design` surface namespace - `SurfaceType` already enumerates\n * it, so designs and canvases stay separate per-user collections with no\n * backend change. The whole `PersistedDesignDoc` rides the row's `metadata`\n * and is REPLACED wholesale on every write; never send a patch.\n */\nimport { parseDesignDoc, type PersistedDesignDoc } from './designCore';\n\nconst CHANNEL_FIELDS = 'id surface channelId title metadata updatedAt';\n\nexport interface DesignDocSummary {\n channelId: string;\n title?: string;\n savedAt: number;\n doc: PersistedDesignDoc;\n}\n\nexport interface FetchDesignsResult {\n designs: DesignDocSummary[];\n /** Plain sentence for the UI; null when the read succeeded. */\n error: string | null;\n}\n\n/** The caller's designs, newest first. Unparseable rows drop silently. */\nexport async function fetchMyDesigns(opts: {\n url: string;\n token?: string | null;\n signal?: AbortSignal;\n}): Promise<FetchDesignsResult> {\n if (!opts.url) return { designs: [], error: 'No design 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: 'design' },\n }),\n signal: opts.signal,\n });\n if (response.status === 401 || response.status === 403) {\n return { designs: [], error: 'Your session expired. Sign in again to see your designs.' };\n }\n if (!response.ok) {\n return { designs: [], error: `The design index is unreachable (HTTP ${response.status}).` };\n }\n payload = await response.json();\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') return { designs: [], error: null };\n return { designs: [], error: 'Could not reach the design 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 designs: [],\n error: isAuth\n ? 'Your session expired. Sign in again to see your designs.'\n : raw || 'The design index rejected the request.',\n };\n }\n\n const designs: DesignDocSummary[] = [];\n for (const row of payload?.data?.mySurfaceChannels ?? []) {\n const channelId = typeof row?.channelId === 'string' ? row.channelId : '';\n if (!channelId) continue;\n const doc = parseDesignDoc(coerceMetadata(row?.metadata));\n if (!doc) continue;\n const title = typeof row?.title === 'string' ? row.title : undefined;\n designs.push({ channelId, title: doc.title || title, savedAt: doc.savedAt, doc });\n }\n designs.sort((a, b) => b.savedAt - a.savedAt);\n return { designs, error: null };\n}\n\n/** Write one design to the index (idempotent upsert). Never throws. */\nexport async function pushDesignDoc(opts: {\n url: string;\n token?: string | null;\n channelId: string;\n doc: PersistedDesignDoc;\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: 'design',\n channelId,\n sessionId: channelId,\n title: opts.doc.title || defaultTitle(opts.doc),\n metadata: opts.doc,\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('[pushDesignDoc]', 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('[pushDesignDoc] failed:', err);\n }\n return false;\n }\n}\n\nexport function defaultTitle(doc: PersistedDesignDoc): string {\n if (doc.kind === 'tshirt') return 'T-shirt design';\n if (doc.kind === 'postcard') return 'Postcard';\n if (doc.kind === 'carousel') return 'Carousel';\n return 'Untitled design';\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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"}
|