@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 12.0.129
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/compute.js +57 -1
- package/lib/compute.js.map +1 -1
- package/lib/features/agent-chat/NativeAgentChat.js +3 -2
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +10 -0
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/apps/mobileAppCatalog.js +11 -0
- package/lib/features/apps/mobileAppCatalog.js.map +1 -1
- package/lib/features/canvas/AudioEditorExperience.js +448 -105
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +33 -14
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +493 -41
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +37 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +237 -22
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +119 -26
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +17 -6
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +18 -1
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/DesignCategoryGallery.js +423 -0
- package/lib/features/canvas/DesignCategoryGallery.js.map +1 -0
- package/lib/features/canvas/ImageEditorExperience.js +763 -187
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +199 -11
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +59 -40
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +134 -34
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/aiEdit.js +4 -2
- package/lib/features/canvas/aiEdit.js.map +1 -1
- package/lib/features/canvas/audioEditor/AudioWaveform.js +96 -0
- package/lib/features/canvas/audioEditor/AudioWaveform.js.map +1 -0
- package/lib/features/canvas/audioEditor/audioPeaks.js +93 -0
- package/lib/features/canvas/audioEditor/audioPeaks.js.map +1 -0
- package/lib/features/canvas/canvasTaskSync.js +34 -7
- package/lib/features/canvas/canvasTaskSync.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +23 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +10 -24
- package/lib/features/canvas/canvasTheme.js.map +1 -1
- package/lib/features/canvas/canvasUi.js +1 -1
- package/lib/features/canvas/canvasUi.js.map +1 -1
- package/lib/features/canvas/createTiles.js +17 -9
- package/lib/features/canvas/createTiles.js.map +1 -1
- package/lib/features/canvas/deepLinks.js +35 -5
- package/lib/features/canvas/deepLinks.js.map +1 -1
- package/lib/features/canvas/designCatalog.js +165 -0
- package/lib/features/canvas/designCatalog.js.map +1 -0
- package/lib/features/canvas/designCategories.js +262 -0
- package/lib/features/canvas/designCategories.js.map +1 -0
- package/lib/features/canvas/editorControls.js +406 -0
- package/lib/features/canvas/editorControls.js.map +1 -0
- package/lib/features/canvas/generationModels.js +5 -3
- package/lib/features/canvas/generationModels.js.map +1 -1
- package/lib/features/canvas/generationTasks.js +162 -0
- package/lib/features/canvas/generationTasks.js.map +1 -0
- package/lib/features/canvas/generator/BottomSheet.js +167 -0
- package/lib/features/canvas/generator/BottomSheet.js.map +1 -0
- package/lib/features/canvas/generator/BusinessCardChatCard.js +155 -0
- package/lib/features/canvas/generator/BusinessCardChatCard.js.map +1 -0
- package/lib/features/canvas/generator/DirectorSheet.js +163 -0
- package/lib/features/canvas/generator/DirectorSheet.js.map +1 -0
- package/lib/features/canvas/generator/ReframePreview.js +122 -0
- package/lib/features/canvas/generator/ReframePreview.js.map +1 -0
- package/lib/features/canvas/generator/RunLogCard.js +119 -0
- package/lib/features/canvas/generator/RunLogCard.js.map +1 -0
- package/lib/features/canvas/generator/ShotPanel.js +261 -0
- package/lib/features/canvas/generator/ShotPanel.js.map +1 -0
- package/lib/features/canvas/generator/businessCardWidget.js +117 -0
- package/lib/features/canvas/generator/businessCardWidget.js.map +1 -0
- package/lib/features/canvas/generator/cameraVocabulary.js +142 -0
- package/lib/features/canvas/generator/cameraVocabulary.js.map +1 -0
- package/lib/features/canvas/generator/cinematicVocabulary.js +416 -0
- package/lib/features/canvas/generator/cinematicVocabulary.js.map +1 -0
- package/lib/features/canvas/generator/direction.js +41 -0
- package/lib/features/canvas/generator/direction.js.map +1 -0
- package/lib/features/canvas/generator/reframeGeometry.js +108 -0
- package/lib/features/canvas/generator/reframeGeometry.js.map +1 -0
- package/lib/features/canvas/generator/runLog.js +71 -0
- package/lib/features/canvas/generator/runLog.js.map +1 -0
- package/lib/features/canvas/generator/shot.js +133 -0
- package/lib/features/canvas/generator/shot.js.map +1 -0
- package/lib/features/canvas/generator/useShotSpec.js +87 -0
- package/lib/features/canvas/generator/useShotSpec.js.map +1 -0
- package/lib/features/canvas/home/HeroComposer.js +214 -0
- package/lib/features/canvas/home/HeroComposer.js.map +1 -0
- package/lib/features/canvas/home/HeroMonitor.js +225 -0
- package/lib/features/canvas/home/HeroMonitor.js.map +1 -0
- package/lib/features/canvas/home/LookDetail.js +185 -0
- package/lib/features/canvas/home/LookDetail.js.map +1 -0
- package/lib/features/canvas/home/LoopingVideo.js +37 -0
- package/lib/features/canvas/home/LoopingVideo.js.map +1 -0
- package/lib/features/canvas/home/TemplatesGallery.js +253 -0
- package/lib/features/canvas/home/TemplatesGallery.js.map +1 -0
- package/lib/features/canvas/home/heroShots.js +100 -0
- package/lib/features/canvas/home/heroShots.js.map +1 -0
- package/lib/features/canvas/homeWork.js +62 -3
- package/lib/features/canvas/homeWork.js.map +1 -1
- package/lib/features/canvas/imageEditor/ImageMarkup.js +195 -0
- package/lib/features/canvas/imageEditor/ImageMarkup.js.map +1 -0
- package/lib/features/canvas/imageEditor/imageEditOps.js +367 -0
- package/lib/features/canvas/imageEditor/imageEditOps.js.map +1 -0
- package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
- package/lib/features/canvas/rankedCatalogSearch.js +375 -0
- package/lib/features/canvas/rankedCatalogSearch.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +68 -20
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/recorder/RecordingReview.js +272 -0
- package/lib/features/canvas/recorder/RecordingReview.js.map +1 -0
- package/lib/features/canvas/recorder/RecordingsList.js +179 -0
- package/lib/features/canvas/recorder/RecordingsList.js.map +1 -0
- package/lib/features/canvas/recorder/recorderOps.js +99 -0
- package/lib/features/canvas/recorder/recorderOps.js.map +1 -0
- package/lib/features/canvas/seedanceShowcase.js +314 -0
- package/lib/features/canvas/seedanceShowcase.js.map +1 -0
- package/lib/features/canvas/serverTasks.js +149 -15
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/sessionRenewal.js +114 -0
- package/lib/features/canvas/sessionRenewal.js.map +1 -0
- package/lib/features/canvas/set/SetViewportWebView.js +34 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/set/agent/setTurn.js +4 -2
- package/lib/features/canvas/set/agent/setTurn.js.map +1 -1
- package/lib/features/canvas/set/setPresets.js +85 -0
- package/lib/features/canvas/set/setPresets.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +4 -1
- package/lib/features/canvas/set/setProject.js.map +1 -1
- package/lib/features/canvas/studioCatalog.js +59 -4
- package/lib/features/canvas/studioCatalog.js.map +1 -1
- package/lib/features/canvas/studioLooks.js +31 -4
- package/lib/features/canvas/studioLooks.js.map +1 -1
- package/lib/features/canvas/surfaceIndex.js +1 -14
- package/lib/features/canvas/surfaceIndex.js.map +1 -1
- package/lib/features/canvas/templateSearch.js +489 -0
- package/lib/features/canvas/templateSearch.js.map +1 -0
- package/lib/features/canvas/useCanvasSession.js +28 -6
- package/lib/features/canvas/useCanvasSession.js.map +1 -1
- package/lib/features/canvas/useStudioCatalogTemplates.js +41 -5
- package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -1
- package/lib/features/canvas/videoEditor/EditorPanels.js +531 -0
- package/lib/features/canvas/videoEditor/EditorPanels.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +48 -4
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +2 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/brainClient.js +97 -27
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/cutTools.js +707 -3
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
- package/lib/features/canvas/videoEditor/audioServices.js +165 -0
- package/lib/features/canvas/videoEditor/audioServices.js.map +1 -0
- package/lib/features/canvas/videoEditor/captions.js +144 -0
- package/lib/features/canvas/videoEditor/captions.js.map +1 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js +24 -16
- package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -1
- package/lib/features/canvas/videoEditor/editorModel.js +12 -2
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +89 -7
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/layers.js +117 -0
- package/lib/features/canvas/videoEditor/layers.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +45 -18
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/renderTimeline.js +18 -6
- package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -1
- package/lib/features/canvas/videoEditor/revoice.js +138 -0
- package/lib/features/canvas/videoEditor/revoice.js.map +1 -0
- package/lib/features/canvas/videoEditor/storageUpload.js +34 -0
- package/lib/features/canvas/videoEditor/storageUpload.js.map +1 -0
- package/lib/features/canvas/videoEditor/textMotion.js +109 -0
- package/lib/features/canvas/videoEditor/textMotion.js.map +1 -0
- package/lib/features/canvas/videoEditor/transitions.js +31 -0
- package/lib/features/canvas/videoEditor/transitions.js.map +1 -0
- package/lib/features/chat/TemplatesChatCards.js +8 -3
- package/lib/features/chat/TemplatesChatCards.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +674 -644
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +285 -538
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/design/designCore.js +2 -212
- package/lib/features/design/designCore.js.map +1 -1
- package/lib/features/design/designIndex.js +1 -50
- package/lib/features/design/designIndex.js.map +1 -1
- package/lib/features/design/doc/aiDesign.js +247 -0
- package/lib/features/design/doc/aiDesign.js.map +1 -0
- package/lib/features/design/doc/artifacts.js +280 -0
- package/lib/features/design/doc/artifacts.js.map +1 -0
- package/lib/features/design/doc/chart.js +98 -0
- package/lib/features/design/doc/chart.js.map +1 -0
- package/lib/features/design/doc/crop.js +104 -0
- package/lib/features/design/doc/crop.js.map +1 -0
- package/lib/features/design/doc/curve.js +49 -0
- package/lib/features/design/doc/curve.js.map +1 -0
- package/lib/features/design/doc/docOps.js +397 -0
- package/lib/features/design/doc/docOps.js.map +1 -0
- package/lib/features/design/doc/findReplace.js +112 -0
- package/lib/features/design/doc/findReplace.js.map +1 -0
- package/lib/features/design/doc/fonts.js +79 -0
- package/lib/features/design/doc/fonts.js.map +1 -0
- package/lib/features/design/doc/frames.js +17 -0
- package/lib/features/design/doc/frames.js.map +1 -0
- package/lib/features/design/doc/geometry.js +133 -0
- package/lib/features/design/doc/geometry.js.map +1 -0
- package/lib/features/design/doc/imageAdjust.js +203 -0
- package/lib/features/design/doc/imageAdjust.js.map +1 -0
- package/lib/features/design/doc/legacyDoc.js +107 -0
- package/lib/features/design/doc/legacyDoc.js.map +1 -0
- package/lib/features/design/doc/newDoc.js +335 -0
- package/lib/features/design/doc/newDoc.js.map +1 -0
- package/lib/features/design/doc/pageRange.js +17 -0
- package/lib/features/design/doc/pageRange.js.map +1 -0
- package/lib/features/design/doc/pathScale.js +68 -0
- package/lib/features/design/doc/pathScale.js.map +1 -0
- package/lib/features/design/doc/qr.js +62 -0
- package/lib/features/design/doc/qr.js.map +1 -0
- package/lib/features/design/doc/shapes.js +366 -0
- package/lib/features/design/doc/shapes.js.map +1 -0
- package/lib/features/design/doc/sizes.js +230 -0
- package/lib/features/design/doc/sizes.js.map +1 -0
- package/lib/features/design/doc/textEffects.js +134 -0
- package/lib/features/design/doc/textEffects.js.map +1 -0
- package/lib/features/design/doc/textLayout.js +182 -0
- package/lib/features/design/doc/textLayout.js.map +1 -0
- package/lib/features/design/doc/types.js +30 -0
- package/lib/features/design/doc/types.js.map +1 -0
- package/lib/features/design/editor/AiPanel.js +194 -0
- package/lib/features/design/editor/AiPanel.js.map +1 -0
- package/lib/features/design/editor/ChartDataPanel.js +182 -0
- package/lib/features/design/editor/ChartDataPanel.js.map +1 -0
- package/lib/features/design/editor/CropOverlay.js +199 -0
- package/lib/features/design/editor/CropOverlay.js.map +1 -0
- package/lib/features/design/editor/DesignCanvas.js +363 -0
- package/lib/features/design/editor/DesignCanvas.js.map +1 -0
- package/lib/features/design/editor/ExportSheet.js +123 -0
- package/lib/features/design/editor/ExportSheet.js.map +1 -0
- package/lib/features/design/editor/FindReplacePanel.js +93 -0
- package/lib/features/design/editor/FindReplacePanel.js.map +1 -0
- package/lib/features/design/editor/ImageTools.js +188 -0
- package/lib/features/design/editor/ImageTools.js.map +1 -0
- package/lib/features/design/editor/LayerTools.js +485 -0
- package/lib/features/design/editor/LayerTools.js.map +1 -0
- package/lib/features/design/editor/PageStrip.js +203 -0
- package/lib/features/design/editor/PageStrip.js.map +1 -0
- package/lib/features/design/editor/Slideshow.js +97 -0
- package/lib/features/design/editor/Slideshow.js.map +1 -0
- package/lib/features/design/editor/ToolPanels.js +695 -0
- package/lib/features/design/editor/ToolPanels.js.map +1 -0
- package/lib/features/design/editor/controls.js +630 -0
- package/lib/features/design/editor/controls.js.map +1 -0
- package/lib/features/design/editor/useDesignSave.js +91 -0
- package/lib/features/design/editor/useDesignSave.js.map +1 -0
- package/lib/features/design/export/exportDesign.js +170 -0
- package/lib/features/design/export/exportDesign.js.map +1 -0
- package/lib/features/design/export/pdf.js +143 -0
- package/lib/features/design/export/pdf.js.map +1 -0
- package/lib/features/design/home/DesignHome.js +688 -0
- package/lib/features/design/home/DesignHome.js.map +1 -0
- package/lib/features/design/home/studioHome.js +61 -0
- package/lib/features/design/home/studioHome.js.map +1 -0
- package/lib/features/design/pickDesignImage.js +60 -0
- package/lib/features/design/pickDesignImage.js.map +1 -0
- package/lib/features/design/render/DesignPageView.js +69 -0
- package/lib/features/design/render/DesignPageView.js.map +1 -0
- package/lib/features/design/render/PageCapture.js +288 -0
- package/lib/features/design/render/PageCapture.js.map +1 -0
- package/lib/features/design/render/TextMeasure.js +115 -0
- package/lib/features/design/render/TextMeasure.js.map +1 -0
- package/lib/features/design/render/fontRegistry.js +110 -0
- package/lib/features/design/render/fontRegistry.js.map +1 -0
- package/lib/features/design/render/layers.js +392 -0
- package/lib/features/design/render/layers.js.map +1 -0
- package/lib/features/design/render/svg.js +35 -0
- package/lib/features/design/render/svg.js.map +1 -0
- package/lib/features/design/render/svgParts.js +435 -0
- package/lib/features/design/render/svgParts.js.map +1 -0
- package/lib/features/design/surface/BoardScreen.js +529 -0
- package/lib/features/design/surface/BoardScreen.js.map +1 -0
- package/lib/features/design/surface/CompareView.js +138 -0
- package/lib/features/design/surface/CompareView.js.map +1 -0
- package/lib/features/design/surface/CreationScreen.js +294 -0
- package/lib/features/design/surface/CreationScreen.js.map +1 -0
- package/lib/features/design/surface/DesignAgentChatPane.js +444 -0
- package/lib/features/design/surface/DesignAgentChatPane.js.map +1 -0
- package/lib/features/design/surface/DesignBoards.js +441 -0
- package/lib/features/design/surface/DesignBoards.js.map +1 -0
- package/lib/features/design/surface/DesignPreview.js +159 -0
- package/lib/features/design/surface/DesignPreview.js.map +1 -0
- package/lib/features/design/surface/DesignSurfaceExperience.js +80 -0
- package/lib/features/design/surface/DesignSurfaceExperience.js.map +1 -0
- package/lib/features/design/surface/FullScreenPreview.js +59 -0
- package/lib/features/design/surface/FullScreenPreview.js.map +1 -0
- package/lib/features/design/surface/NewSystemDialog.js +122 -0
- package/lib/features/design/surface/NewSystemDialog.js.map +1 -0
- package/lib/features/design/surface/PickerSheet.js +175 -0
- package/lib/features/design/surface/PickerSheet.js.map +1 -0
- package/lib/features/design/surface/TemplatesGallery.js +156 -0
- package/lib/features/design/surface/TemplatesGallery.js.map +1 -0
- package/lib/features/design/surface/WetPaint.js +140 -0
- package/lib/features/design/surface/WetPaint.js.map +1 -0
- package/lib/features/design/surface/agentTurn.js +229 -0
- package/lib/features/design/surface/agentTurn.js.map +1 -0
- package/lib/features/design/surface/designBoard.js +218 -0
- package/lib/features/design/surface/designBoard.js.map +1 -0
- package/lib/features/design/surface/designChannel.js +186 -0
- package/lib/features/design/surface/designChannel.js.map +1 -0
- package/lib/features/design/surface/designChat.js +141 -0
- package/lib/features/design/surface/designChat.js.map +1 -0
- package/lib/features/design/surface/designConnector.js +266 -0
- package/lib/features/design/surface/designConnector.js.map +1 -0
- package/lib/features/design/surface/designDocument.js +40 -0
- package/lib/features/design/surface/designDocument.js.map +1 -0
- package/lib/features/design/surface/designExport.js +55 -0
- package/lib/features/design/surface/designExport.js.map +1 -0
- package/lib/features/design/surface/designLinks.js +64 -0
- package/lib/features/design/surface/designLinks.js.map +1 -0
- package/lib/features/design/surface/designPalette.js +24 -0
- package/lib/features/design/surface/designPalette.js.map +1 -0
- package/lib/features/design/surface/designRun.js +161 -0
- package/lib/features/design/surface/designRun.js.map +1 -0
- package/lib/features/design/surface/designTheme.js +119 -0
- package/lib/features/design/surface/designTheme.js.map +1 -0
- package/lib/features/design/surface/execStream.js +206 -0
- package/lib/features/design/surface/execStream.js.map +1 -0
- package/lib/features/design/surface/metaball.js +48 -0
- package/lib/features/design/surface/metaball.js.map +1 -0
- package/lib/features/design/surface/pickReferenceFiles.js +35 -0
- package/lib/features/design/surface/pickReferenceFiles.js.map +1 -0
- package/lib/features/design/surface/useDesignSurface.js +379 -0
- package/lib/features/design/surface/useDesignSurface.js.map +1 -0
- package/lib/features/docs/DocBlockRow.js +336 -0
- package/lib/features/docs/DocBlockRow.js.map +1 -0
- package/lib/features/docs/DocsEditorExperience.js +949 -0
- package/lib/features/docs/DocsEditorExperience.js.map +1 -0
- package/lib/features/docs/DocsToolbar.js +247 -0
- package/lib/features/docs/DocsToolbar.js.map +1 -0
- package/lib/features/docs/blocks.js +560 -0
- package/lib/features/docs/blocks.js.map +1 -0
- package/lib/features/docs/docArtifacts.js +129 -0
- package/lib/features/docs/docArtifacts.js.map +1 -0
- package/lib/features/docs/docEdits.js +201 -0
- package/lib/features/docs/docEdits.js.map +1 -0
- package/lib/features/docs/docExport.js +235 -0
- package/lib/features/docs/docExport.js.map +1 -0
- package/lib/features/docs/docShare.js +62 -0
- package/lib/features/docs/docShare.js.map +1 -0
- package/lib/features/links/openInApp.js +38 -2
- package/lib/features/links/openInApp.js.map +1 -1
- package/lib/routes.json +54 -0
- package/lib/screens/DesignNative/index.js +35 -0
- package/lib/screens/DesignNative/index.js.map +1 -0
- package/package.json +4 -4
- package/lib/features/design/exportDesign.js +0 -133
- package/lib/features/design/exportDesign.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasBoardsGrid.js","sources":["../../../src/features/canvas/CanvasBoardsGrid.tsx"],"sourcesContent":["/**\n * Canvas home - native twin of canvas-surface screen one (`CreateStrip` + `YourWork`),\n * laid out for a phone: start something in one tap, then get back to recent work.\n *\n * Create title + theme toggle, the prompt bar (opens AI Chat)\n * Generate the AI lanes as a 3-up grid of tinted tiles\n * Design formats drawn at their own proportions\n * Tools editors and studios as one scrolling row of pills\n * Looks featured studio looks, cover-first\n * Your work boards and designs merged newest first, filtered by kind\n *\n * Renders 10 work tiles at a time; scrolling to the bottom appends the next 10.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FlatList, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { DesignDocSummary } from '../design/designIndex';\nimport type { DesignLayer, PersistedDesignDoc } from '../design/designCore';\nimport { isUnsetBoardTitle, type CanvasItem } from './canvasCore';\nimport { CANVAS_BOARD_PAGE_SIZE } from './canvasBoardsCatalog';\nimport type { StudioLook } from './studioLooks';\nimport type { CreateAction, visibleCreateGroups } from './createTiles';\nimport {\n WORK_FILTERS,\n availableFilters,\n boardCover,\n designNoun,\n matchesFilter,\n mergeWork,\n pageCount,\n videoCoverFrame,\n type WorkFilter,\n type WorkItem,\n} from './homeWork';\nimport { resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { renewMediaUrl, useMediaSource } from './useMediaSource';\nimport { CanvasThemeToggle, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport {\n CoverPlaceholder,\n Pressable,\n RADIUS,\n SPACE,\n SectionHeader,\n Segmented,\n Skeleton,\n TYPE,\n pressedStyle,\n} from './canvasUi';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\ntype VisibleGroup = ReturnType<typeof visibleCreateGroups>[number];\ntype VisibleTile = VisibleGroup['tiles'][number];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst GUTTER = SPACE.lg;\n/** How long a cover may load before the skeleton gives way to its tinted placeholder (the image keeps loading). */\nconst COVER_STALL_MS = 12_000;\n\nfunction relativeTime(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < HOUR) return `${Math.max(1, Math.round(diff / MINUTE))}m ago`;\n if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;\n if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;\n return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/**\n * Each AI lane keeps one hue so it is found by colour as well as by name.\n * Light: a pale wash with the 700 step as ink; dark: a low-alpha wash with the 300 step.\n */\nconst LANE_HUES: Record<string, { light: [string, string]; dark: [string, string] }> = {\n image: { light: ['#fef3c7', '#b45309'], dark: ['rgba(251,191,36,0.14)', '#fcd34d'] },\n video: { light: ['#ffe4e6', '#be123c'], dark: ['rgba(251,113,133,0.14)', '#fda4af'] },\n audio: { light: ['#e0f2fe', '#0369a1'], dark: ['rgba(56,189,248,0.14)', '#7dd3fc'] },\n slides: { light: ['#ede9fe', '#6d28d9'], dark: ['rgba(167,139,250,0.16)', '#c4b5fd'] },\n clips: { light: ['#d1fae5', '#047857'], dark: ['rgba(52,211,153,0.14)', '#6ee7b7'] },\n promo: { light: ['#ffedd5', '#c2410c'], dark: ['rgba(251,146,60,0.14)', '#fdba74'] },\n};\n\n/** Design formats drawn at their real proportions (w:h), so the row reads as \"what shape\". */\nconst FORMAT_SHAPE: Record<string, { w: number; h: number; stack?: boolean; round?: boolean }> = {\n social: { w: 1, h: 1 },\n carousel: { w: 4, h: 5, stack: true },\n flyer: { w: 3, h: 4 },\n logo: { w: 1, h: 1, round: true },\n tshirt: { w: 5, h: 6 },\n};\n\ntype GridItem = { kind: 'new'; id: string } | { kind: 'work'; id: string; work: WorkItem };\n\nexport function CanvasBoardsGrid({\n boards,\n onOpen,\n onNewCanvas,\n designs = [],\n onOpenDesign,\n onAskAgent,\n createGroups = [],\n onCreate,\n featuredLooks = [],\n onRecreateLook,\n runAction,\n}: {\n boards: CanvasBoardSummary[];\n onOpen: (channelId: string) => void;\n onNewCanvas: () => void;\n designs?: DesignDocSummary[];\n onOpenDesign?: (channelId: string) => void;\n onAskAgent?: () => void;\n /** Screen one's Create rows (web CreateStrip), already narrowed to what this host runs. */\n createGroups?: ReturnType<typeof visibleCreateGroups>;\n onCreate?: (action: CreateAction, tileId: string) => void;\n /** Web Featured Looks rail on home. */\n featuredLooks?: StudioLook[];\n onRecreateLook?: (look: StudioLook) => void;\n /** Connector runner - renews dead cover links and fetches a real frame for a video-only board. */\n runAction?: RunMediaAction;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const { width } = useWindowDimensions();\n const tileWidth = Math.max(140, (width - GUTTER * 3) / 2);\n const laneWidth = (width - GUTTER * 2 - SPACE.sm * 2) / 3;\n const [visible, setVisible] = useState(CANVAS_BOARD_PAGE_SIZE);\n const [filter, setFilter] = useState<WorkFilter>('all');\n const renew = useMemo(() => renewMediaUrl(runAction), [runAction]);\n\n const work = useMemo(() => mergeWork(boards, designs), [boards, designs]);\n const filters = useMemo(() => availableFilters(work), [work]);\n // A chosen kind that is gone (its last design deleted) falls back to everything.\n const active = filters.includes(filter) ? filter : 'all';\n const shown = useMemo(() => work.filter((item) => matchesFilter(item, active)), [work, active]);\n\n useEffect(() => {\n setVisible(CANVAS_BOARD_PAGE_SIZE);\n }, [boards, designs, active]);\n\n const tiles = useMemo<GridItem[]>(\n () => [\n { kind: 'new', id: '__new__' },\n ...shown\n .slice(0, visible)\n .map((entry) => ({ kind: 'work' as const, id: `${entry.type}:${entry.id}`, work: entry })),\n ],\n [shown, visible],\n );\n\n const rows = useMemo(() => {\n const chunked: GridItem[][] = [];\n for (let i = 0; i < tiles.length; i += 2) chunked.push(tiles.slice(i, i + 2));\n return chunked;\n }, [tiles]);\n\n const loadMore = useCallback(() => {\n setVisible((count) => (count >= shown.length ? count : Math.min(count + CANVAS_BOARD_PAGE_SIZE, shown.length)));\n }, [shown.length]);\n\n const group = (id: string) => createGroups.find((g) => g.id === id);\n const generate = group('generate');\n const edit = group('edit');\n const designGroup = group('design');\n\n const lane = (tile: VisibleTile) => {\n const hue = LANE_HUES[tile.id];\n const [wash, ink] = hue ? (theme.isDark ? hue.dark : hue.light) : [theme.card, theme.foreground];\n return (\n <Pressable\n key={tile.id}\n onPress={() => onCreate?.(tile.action, tile.id)}\n style={({ pressed }) => [\n styles.lane,\n { width: laneWidth, backgroundColor: wash },\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={24} color={ink} />\n <Text style={[styles.laneLabel, { color: theme.isDark ? theme.foreground : ink }]} numberOfLines={2}>\n {tile.label}\n </Text>\n </Pressable>\n );\n };\n\n const header = (\n <View style={styles.header}>\n <View style={styles.titleRow}>\n <Text style={styles.title} accessibilityRole=\"header\">\n Create\n </Text>\n <CanvasThemeToggle size={20} style={styles.toggle} />\n </View>\n\n {onAskAgent ? (\n <Pressable\n onPress={onAskAgent}\n style={({ pressed }) => [styles.prompt, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ask AI Chat to make something\"\n >\n <MaterialCommunityIcons name=\"creation\" size={20} color={theme.mutedForeground} />\n <Text style={styles.promptText} numberOfLines={1}>\n Describe what you want to make\n </Text>\n <View style={styles.promptGo}>\n <MaterialCommunityIcons name=\"arrow-up\" size={18} color={theme.primaryForeground} />\n </View>\n </Pressable>\n ) : null}\n\n {onCreate && generate ? (\n <View style={styles.section}>\n <SectionHeader title=\"Generate with AI\" />\n <View style={styles.lanes}>{generate.tiles.map(lane)}</View>\n </View>\n ) : null}\n\n {onCreate && designGroup ? (\n <View style={styles.section}>\n <SectionHeader title=\"Design\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {designGroup.tiles.map((tile) => (\n <FormatTile key={tile.id} tile={tile} onPress={() => onCreate(tile.action, tile.id)} />\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {onCreate && edit ? (\n <View style={styles.section}>\n <SectionHeader title=\"Edit & produce\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {edit.tiles.map((tile) => (\n <Pressable\n key={tile.id}\n onPress={() => onCreate(tile.action, tile.id)}\n style={({ pressed }) => [styles.tool, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons\n name={tile.icon as IconName}\n size={18}\n color={theme.foreground}\n />\n <Text style={styles.toolLabel}>{tile.label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {featuredLooks.length > 0 && onRecreateLook ? (\n <View style={styles.section}>\n <SectionHeader title=\"Looks\" detail=\"Recreate a studio style\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {featuredLooks.map((look) => (\n <Pressable\n key={look.id}\n onPress={() => onRecreateLook(look)}\n style={({ pressed }) => [styles.look, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Recreate ${look.name}`}\n >\n {look.cover ? (\n <Image source={{ uri: look.cover }} style={styles.fill} contentFit=\"cover\" />\n ) : (\n <View style={[styles.fill, styles.centered]}>\n <MaterialCommunityIcons\n name=\"movie-open-outline\"\n size={22}\n color={theme.mutedForeground}\n />\n </View>\n )}\n <View style={styles.lookCaption}>\n <Text style={styles.lookName} numberOfLines={2}>\n {look.name}\n </Text>\n </View>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n <View style={styles.workHead}>\n <SectionHeader\n title=\"Your work\"\n detail={work.length > 0 ? String(work.length) : undefined}\n style={styles.noMargin}\n />\n {filters.length > 0 ? (\n <Segmented\n options={WORK_FILTERS.filter((f) => filters.includes(f.id))}\n value={active}\n onChange={setFilter}\n style={styles.segmented}\n />\n ) : null}\n </View>\n </View>\n );\n\n const renderTile = (item: GridItem) => {\n if (item.kind === 'new') {\n return (\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"New canvas\"\n >\n <View style={[styles.cover, styles.coverNew]}>\n <View style={styles.newPlus}>\n <MaterialCommunityIcons name=\"plus\" size={24} color={theme.primaryForeground} />\n </View>\n </View>\n <Text style={styles.workTitle}>New canvas</Text>\n <Text style={styles.workMeta}>Start blank</Text>\n </Pressable>\n );\n }\n const { work: entry } = item;\n if (entry.type === 'design') {\n const { design } = entry;\n const noun = designNoun(design.doc);\n const title = design.title?.trim() || `Untitled ${noun.toLowerCase()}`;\n const meta = [noun, pageCount(design.doc), relativeTime(design.savedAt)].filter(Boolean).join(' · ');\n return (\n <Pressable\n onPress={() => onOpenDesign?.(design.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${noun.toLowerCase()} ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n <DesignThumb\n doc={design.doc}\n maxWidth={tileWidth - SPACE.xl * 2}\n maxHeight={tileWidth - SPACE.xl * 2}\n />\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {meta}\n </Text>\n </Pressable>\n );\n }\n const { board } = entry;\n const cover = boardCover(board.board.items);\n const title = !isUnsetBoardTitle(board.title)\n ? board.title\n : board.board.items.find((it) => it.generatedAssetName)?.generatedAssetName || 'Untitled canvas';\n return (\n <Pressable\n onPress={() => onOpen(board.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open canvas ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n {cover ? (\n <BoardCover\n key={cover.src}\n item={cover}\n seed={board.channelId}\n runAction={runAction}\n renew={renew}\n />\n ) : (\n <CoverPlaceholder seed={board.channelId} icon=\"image-multiple-outline\" />\n )}\n {board.itemCount > 1 ? (\n <View style={styles.countBadge} pointerEvents=\"none\">\n <Text style={styles.countBadgeText}>{board.itemCount}</Text>\n </View>\n ) : null}\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {`Canvas · ${relativeTime(board.savedAt)}`}\n </Text>\n </Pressable>\n );\n };\n\n return (\n <View style={styles.plane}>\n {work.length === 0 ? (\n <ScrollView contentContainerStyle={styles.list} showsVerticalScrollIndicator={false}>\n {header}\n <View style={styles.empty}>\n <View style={styles.emptyIcon}>\n <MaterialCommunityIcons name=\"image-multiple-outline\" size={26} color={theme.foreground} />\n </View>\n <Text style={styles.emptyTitle}>Nothing here yet</Text>\n <Text style={styles.emptyDetail}>\n Every chat gets its own canvas. Generate an image, video or audio and it lands here.\n </Text>\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [styles.emptyCta, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"plus\" size={18} color={theme.primaryForeground} />\n <Text style={styles.emptyCtaLabel}>New canvas</Text>\n </Pressable>\n </View>\n </ScrollView>\n ) : (\n <FlatList\n data={rows}\n keyExtractor={(pair) => pair.map((item) => item.id).join(':')}\n contentContainerStyle={styles.list}\n showsVerticalScrollIndicator={false}\n onEndReached={loadMore}\n onEndReachedThreshold={0.4}\n ListHeaderComponent={header}\n renderItem={({ item: pair }) => (\n <View style={styles.row}>\n {pair.map((entry) => (\n <View key={entry.id}>{renderTile(entry)}</View>\n ))}\n {pair.length < 2 ? <View style={{ width: tileWidth }} /> : null}\n </View>\n )}\n />\n )}\n </View>\n );\n}\n\n/** A design format, drawn at its own proportions on a neutral well. */\nfunction FormatTile({ tile, onPress }: { tile: VisibleTile; onPress: () => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const shape = FORMAT_SHAPE[tile.id] ?? { w: 1, h: 1 };\n const box = 56;\n const scale = box / Math.max(shape.w, shape.h);\n const pageW = shape.w * scale;\n const pageH = shape.h * scale;\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.format, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <View style={styles.formatWell}>\n {shape.stack ? (\n <View style={[styles.formatPage, styles.formatPageBack, { width: pageW, height: pageH }]} />\n ) : null}\n <View\n style={[\n styles.formatPage,\n { width: pageW, height: pageH },\n shape.round && { borderRadius: pageW / 2 },\n ]}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={18} color={theme.mutedForeground} />\n </View>\n </View>\n <Text style={styles.formatLabel} numberOfLines={1}>\n {tile.label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * A board's cover: the image itself, renewed once if its link died, or for a\n * video-only board a real frame fetched once per clip (connector THUMBNAIL,\n * cached in memory). A cover that cannot load shows a quiet glyph.\n */\nfunction BoardCover({\n item,\n seed,\n runAction,\n renew,\n}: {\n item: CanvasItem;\n /** Stable per board, so its fallback colour never changes. */\n seed: string;\n runAction?: RunMediaAction;\n renew: (url: string) => Promise<string>;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const isVideo = item.type === 'video';\n const [frame, setFrame] = useState<string | null | undefined>(isVideo ? undefined : item.src);\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n if (!isVideo) return undefined;\n if (!runAction) {\n setFrame(null);\n return undefined;\n }\n let live = true;\n void videoCoverFrame(unwrapProxyUrl(item.src), runAction, (result) =>\n resultUrl(result, 'YANTRA_VIDEO_EDIT_THUMBNAIL'),\n ).then((url) => {\n if (live) setFrame(url);\n });\n return () => {\n live = false;\n };\n }, [item.src, isVideo, runAction]);\n\n const media = useMediaSource(frame ?? '', 'image', renew);\n const [stalled, setStalled] = useState(false);\n useEffect(() => {\n setLoaded(false);\n setStalled(false);\n // A request that neither paints nor fails must not pulse forever.\n const timer = setTimeout(() => setStalled(true), COVER_STALL_MS);\n return () => clearTimeout(timer);\n }, [media.key]);\n\n // No picture to be had: a tinted cover that says what the board holds.\n if (frame === null || media.phase === 'broken') {\n return (\n <CoverPlaceholder\n seed={seed}\n icon={isVideo ? 'play' : 'image-outline'}\n label={isVideo ? 'Video' : undefined}\n />\n );\n }\n return (\n <>\n {/* Until the picture paints (or while its link is renewed) the cover breathes instead of sitting blank. */}\n {loaded && media.phase === 'ok' ? null : stalled ? (\n <CoverPlaceholder seed={seed} icon={isVideo ? 'play' : 'image-outline'} />\n ) : (\n <Skeleton />\n )}\n {frame ? (\n <Image\n key={media.key}\n source={{ uri: media.src }}\n style={styles.fill}\n contentFit=\"cover\"\n transition={200}\n onLoad={() => setLoaded(true)}\n onError={media.onError}\n />\n ) : null}\n {isVideo && loaded ? (\n <View style={styles.playBadge} pointerEvents=\"none\">\n <MaterialCommunityIcons name=\"play\" size={16} color=\"#fafafa\" />\n </View>\n ) : null}\n </>\n );\n}\n\n/** A design's first page, scaled into the tile: fill, shapes, images and text as laid out. */\nfunction DesignThumb({ doc, maxWidth, maxHeight }: { doc: PersistedDesignDoc; maxWidth: number; maxHeight: number }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const page = doc.pages[0];\n if (!page || !(page.width > 0) || !(page.height > 0)) {\n return <MaterialCommunityIcons name=\"shape-outline\" size={28} color={theme.mutedForeground} />;\n }\n const scale = Math.min(maxWidth / page.width, maxHeight / page.height);\n const layers = [...page.layers].sort((a, b) => a.zIndex - b.zIndex);\n return (\n <View\n style={[\n styles.designPage,\n {\n width: page.width * scale,\n height: page.height * scale,\n backgroundColor: page.background || '#ffffff',\n },\n ]}\n pointerEvents=\"none\"\n >\n {layers.length === 0 ? (\n // An untouched page: a faint layout sketch (title, lines, picture) instead of a blank sheet.\n <View style={styles.sketch}>\n <View style={[styles.sketchBar, { width: '62%', height: '9%' }]} />\n <View style={[styles.sketchBar, { width: '86%', height: '5%' }]} />\n <View style={[styles.sketchBar, { width: '70%', height: '5%' }]} />\n <View style={[styles.sketchBar, styles.sketchBlock]}>\n <MaterialCommunityIcons name=\"image-outline\" size={16} color=\"#b4b4bb\" />\n </View>\n <Text style={styles.blankPage}>{designNoun(doc)}</Text>\n </View>\n ) : (\n layers.map((layer) => <DesignThumbLayer key={layer.id} layer={layer} scale={scale} />)\n )}\n </View>\n );\n}\n\nfunction DesignThumbLayer({ layer, scale }: { layer: DesignLayer; scale: number }) {\n const box = {\n position: 'absolute' as const,\n left: layer.x * scale,\n top: layer.y * scale,\n width: layer.width * scale,\n height: layer.height * scale,\n opacity: layer.opacity,\n };\n if (layer.type === 'image') {\n return <Image source={{ uri: layer.src }} style={box} contentFit=\"cover\" />;\n }\n if (layer.type === 'shape') {\n return <View style={[box, { backgroundColor: layer.fill, borderRadius: layer.cornerRadius * scale }]} />;\n }\n return (\n <Text\n style={[\n box,\n {\n color: layer.color,\n fontSize: Math.max(4, layer.fontSize * scale),\n lineHeight: Math.max(5, layer.fontSize * scale * 1.15),\n fontWeight: layer.bold ? '700' : '400',\n textAlign: layer.align,\n },\n ]}\n numberOfLines={3}\n >\n {layer.text}\n </Text>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n plane: { flex: 1, backgroundColor: theme.background },\n list: { paddingHorizontal: GUTTER, paddingTop: SPACE.sm, paddingBottom: SPACE.xxl },\n header: { alignSelf: 'stretch', width: '100%' },\n titleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: SPACE.md,\n },\n title: { ...TYPE.display, color: theme.foreground },\n toggle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.card,\n },\n prompt: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n minHeight: 56,\n paddingLeft: SPACE.lg,\n paddingRight: SPACE.sm,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n marginBottom: SPACE.xl,\n },\n promptText: { ...TYPE.body, flex: 1, color: theme.mutedForeground },\n promptGo: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n section: { marginBottom: SPACE.xl },\n bleed: { marginHorizontal: -GUTTER },\n railContent: { paddingHorizontal: GUTTER, gap: SPACE.sm },\n lanes: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.sm },\n lane: {\n height: 92,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n justifyContent: 'space-between',\n },\n laneLabel: { ...TYPE.label, lineHeight: 17 },\n format: { width: 84, alignItems: 'center', gap: SPACE.sm },\n formatWell: {\n width: 84,\n height: 84,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n },\n formatPage: {\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n },\n formatPageBack: { position: 'absolute', transform: [{ translateX: 6 }, { translateY: -6 }], opacity: 0.6 },\n formatLabel: { ...TYPE.caption, color: theme.foreground },\n tool: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.lg - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n toolLabel: { ...TYPE.label, color: theme.foreground },\n look: {\n width: 136,\n height: 176,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n },\n lookCaption: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n paddingHorizontal: SPACE.md - 2,\n paddingVertical: SPACE.sm + 2,\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n lookName: { ...TYPE.label, color: '#fafafa' },\n workHead: { gap: SPACE.md, marginBottom: SPACE.lg },\n noMargin: { marginBottom: 0 },\n segmented: { flexGrow: 0, alignSelf: 'flex-start' },\n row: { flexDirection: 'row', gap: GUTTER, marginBottom: SPACE.xl - 4 },\n cover: {\n aspectRatio: 1,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n marginBottom: SPACE.sm,\n },\n coverNew: {\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1.5,\n borderStyle: 'dashed',\n borderColor: theme.borderStrong,\n backgroundColor: 'transparent',\n },\n newPlus: {\n width: 48,\n height: 48,\n borderRadius: 24,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n centered: { alignItems: 'center', justifyContent: 'center' },\n fill: { ...StyleSheet.absoluteFillObject },\n workTitle: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n workMeta: { ...TYPE.caption, marginTop: 1, color: theme.mutedForeground },\n countBadge: {\n position: 'absolute',\n top: SPACE.sm,\n right: SPACE.sm,\n minWidth: 24,\n height: 24,\n paddingHorizontal: 7,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n countBadgeText: { fontSize: 12, fontWeight: '600', color: '#fafafa' },\n playBadge: {\n position: 'absolute',\n left: SPACE.sm,\n bottom: SPACE.sm,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n designPage: {\n overflow: 'hidden',\n borderRadius: 3,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0 : 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n // The sketch sits on the design's own (usually white) page, so its ink is fixed, not themed.\n sketch: { ...StyleSheet.absoluteFillObject, padding: '10%', gap: 6 },\n sketchBar: { borderRadius: 3, backgroundColor: '#ececef' },\n sketchBlock: { flex: 1, width: '100%', marginTop: 4, alignItems: 'center', justifyContent: 'center' },\n blankPage: { fontSize: 10, fontWeight: '600', color: '#a1a1aa', textAlign: 'center' },\n empty: {\n alignItems: 'center',\n paddingVertical: SPACE.xxl,\n paddingHorizontal: SPACE.xl,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n },\n emptyIcon: {\n width: 52,\n height: 52,\n borderRadius: 26,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.background,\n marginBottom: SPACE.md,\n },\n emptyTitle: { ...TYPE.title, color: theme.foreground, textAlign: 'center' },\n emptyDetail: {\n ...TYPE.body,\n fontSize: 14,\n marginTop: SPACE.xs,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n emptyCta: {\n marginTop: SPACE.lg + 2,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.xl - 4,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n },\n emptyCtaLabel: { ...TYPE.label, fontSize: 15, color: theme.primaryForeground },\n }),\n);\n"],"names":["title"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasBoardsGrid.js","sources":["../../../src/features/canvas/CanvasBoardsGrid.tsx"],"sourcesContent":["/**\n * Canvas home - native twin of canvas-surface screen one (`CreateStrip` + `YourWork`),\n * laid out for a phone: start something in one tap, then get back to recent work.\n *\n * Create title + theme toggle, the prompt bar (opens AI Chat)\n * Hero \"Direct the shot\": the looping monitor and the shot composer\n * Generate the AI lanes as a 3-up grid of tinted tiles\n * Design formats drawn at their own proportions\n * Tools editors and studios as one scrolling row of pills\n * Looks featured studio looks, cover-first\n * Templates \"Templates for you\": flyers and slides interleaved over two rows, at their own shapes\n * Seedance \"Made with Seedance 2.0\": community clips (credited), their prompt one tap away\n * Your work boards and designs merged newest first, filtered by kind\n *\n * Web puts Templates and Seedance after Your work; here Your work is the long\n * paged list, so both sit above it, still in the list header.\n *\n * Your work shows three rows, then \"Show all N\" (web YourWork); expanded, it\n * renders 10 tiles at a time and scrolling to the bottom appends the next 10.\n *\n * One clip plays at a time: the hero monitor or the centred Seedance tile,\n * whichever is nearer the middle of the screen (`pickPlayingRegion`).\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n FlatList,\n Linking,\n ScrollView,\n StyleSheet,\n Text,\n useWindowDimensions,\n View,\n type LayoutChangeEvent,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { DesignDocSummary } from '../design/designIndex';\nimport type { DesignLayer, PersistedDesignDoc } from '../design/designCore';\nimport type { DesignArtifact } from '../design/doc/artifacts';\nimport type { DocArtifact } from '../docs/docArtifacts';\nimport { DesignPageView } from '../design/render/DesignPageView';\nimport { isUnsetBoardTitle, type CanvasItem } from './canvasCore';\nimport { CANVAS_BOARD_PAGE_SIZE } from './canvasBoardsCatalog';\nimport type { StudioLook } from './studioLooks';\nimport type { CreateAction, visibleCreateGroups } from './createTiles';\nimport type { DesignCatalogCard } from './designCatalog';\nimport type { ShowcaseClip } from './seedanceShowcase';\nimport {\n WORK_ARTIFACTS,\n WORK_FILTERS,\n availableFilters,\n boardCover,\n collapsedWorkCount,\n designNoun,\n docPreviewLines,\n matchesFilter,\n mergeWork,\n pageCount,\n showAllLabel,\n studioNoun,\n videoCoverFrame,\n type WorkFilter,\n type WorkItem,\n} from './homeWork';\nimport { HeroComposer } from './home/HeroComposer';\nimport { LookDetail } from './home/LookDetail';\nimport { LoopingVideo } from './home/LoopingVideo';\nimport { centredIndex, pickPlayingRegion, type HeroSettings } from './home/heroShots';\nimport { resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { renewMediaUrl, useMediaSource } from './useMediaSource';\nimport { CanvasThemeToggle, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport {\n CoverPlaceholder,\n Pressable,\n RADIUS,\n SPACE,\n SectionHeader,\n Segmented,\n Skeleton,\n TYPE,\n pressedStyle,\n} from './canvasUi';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\ntype VisibleGroup = ReturnType<typeof visibleCreateGroups>[number];\ntype VisibleTile = VisibleGroup['tiles'][number];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst GUTTER = SPACE.lg;\n/** How long a cover may load before the skeleton gives way to its tinted placeholder (the image keeps loading). */\nconst COVER_STALL_MS = 12_000;\n\nfunction relativeTime(ts: number): string {\n const diff = Date.now() - ts;\n if (diff < HOUR) return `${Math.max(1, Math.round(diff / MINUTE))}m ago`;\n if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;\n if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;\n return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/**\n * Each AI lane keeps one hue so it is found by colour as well as by name.\n * Light: a pale wash with the 700 step as ink; dark: a low-alpha wash with the 300 step.\n */\nconst LANE_HUES: Record<string, { light: [string, string]; dark: [string, string] }> = {\n image: { light: ['#fef3c7', '#b45309'], dark: ['rgba(251,191,36,0.14)', '#fcd34d'] },\n video: { light: ['#ffe4e6', '#be123c'], dark: ['rgba(251,113,133,0.14)', '#fda4af'] },\n audio: { light: ['#e0f2fe', '#0369a1'], dark: ['rgba(56,189,248,0.14)', '#7dd3fc'] },\n slides: { light: ['#ede9fe', '#6d28d9'], dark: ['rgba(167,139,250,0.16)', '#c4b5fd'] },\n clips: { light: ['#d1fae5', '#047857'], dark: ['rgba(52,211,153,0.14)', '#6ee7b7'] },\n promo: { light: ['#ffedd5', '#c2410c'], dark: ['rgba(251,146,60,0.14)', '#fdba74'] },\n};\n\n/** Design formats drawn at their real proportions (w:h), so the row reads as \"what shape\". */\nconst FORMAT_SHAPE: Record<string, { w: number; h: number; stack?: boolean; round?: boolean }> = {\n presentation: { w: 16, h: 9, stack: true },\n social: { w: 1, h: 1 },\n carousel: { w: 4, h: 5, stack: true },\n flyer: { w: 3, h: 4 },\n 'business-card': { w: 7, h: 4, stack: true },\n logo: { w: 1, h: 1, round: true },\n banner: { w: 3, h: 1 },\n brochure: { w: 11, h: 8.5, stack: true },\n branding: { w: 8.5, h: 11 },\n doc: { w: 8.5, h: 11 },\n custom: { w: 5, h: 4 },\n tshirt: { w: 5, h: 6 },\n};\n\n/** Phone height of a \"Templates for you\" cover (web TemplateRails `compact`). */\nconst TEMPLATE_HEIGHT = 176;\n/** Loading stand-ins: an A4 sheet and a 16:9 slide, alternating, like web. */\nconst TEMPLATE_SKELETON_RATIOS = [210 / 297, 16 / 9];\nconst SHOWCASE_WIDTH = 248;\n\n/** \"Templates for you\", already split into its two rows. */\nexport type TemplateRailsState =\n | { status: 'loading'; rows: [DesignCatalogCard[], DesignCatalogCard[]] }\n | { status: 'ready'; rows: [DesignCatalogCard[], DesignCatalogCard[]] }\n | { status: 'failed'; rows: [DesignCatalogCard[], DesignCatalogCard[]] };\n\ntype GridItem =\n | { kind: 'new'; id: string }\n | { kind: 'start'; id: string; sessionId: string }\n | { kind: 'work'; id: string; work: WorkItem };\n\n/** Regions the playback governor weighs, measured inside the list header. */\ntype PlayRegion = 'hero' | 'showcase';\n\nexport function CanvasBoardsGrid({\n boards,\n onOpen,\n onNewCanvas,\n designs = [],\n onOpenDesign,\n studioDesigns = [],\n onOpenStudioDesign,\n docs = [],\n onOpenDoc,\n onAskAgent,\n createGroups = [],\n onCreate,\n featuredLooks = [],\n onRecreateLook,\n onOpenCategory,\n templateRails,\n onOpenTemplate,\n onSeeAllTemplates,\n onRetryTemplates,\n showcase = [],\n onUseShowcasePrompt,\n runAction,\n onStartWithPrompt,\n onPickReference,\n onBrowseTemplates,\n studioMore = false,\n studioError = null,\n onRetryStudioDesigns,\n onExpandWork,\n currentSessionId,\n onOpenSession,\n}: {\n boards: CanvasBoardSummary[];\n onOpen: (channelId: string) => void;\n onNewCanvas: () => void;\n designs?: DesignDocSummary[];\n onOpenDesign?: (channelId: string) => void;\n /** Design studio designs (phone and web alike), drawn from their first page. */\n studioDesigns?: DesignArtifact[];\n onOpenStudioDesign?: (artifactId: string) => void;\n /** Rich-text docs (`doc:` rows, phone and web alike), drawn as a sheet of paper. */\n docs?: DocArtifact[];\n onOpenDoc?: (docId: string) => void;\n onAskAgent?: () => void;\n /** Screen one's Create rows (web CreateStrip), already narrowed to what this host runs. */\n createGroups?: ReturnType<typeof visibleCreateGroups>;\n onCreate?: (action: CreateAction, tileId: string) => void;\n /** Web Featured Looks rail on home. */\n featuredLooks?: StudioLook[];\n onRecreateLook?: (look: StudioLook) => void;\n /**\n * A Design & write tile with a category gallery (flyer, business card...):\n * answers true when it opened one, else the tile runs its own action.\n */\n onOpenCategory?: (tileId: string) => boolean;\n /** Web \"Templates for you\". Absent: templates cannot open on this host, the section hides. */\n templateRails?: TemplateRailsState;\n onOpenTemplate?: (templateId: string) => void;\n onSeeAllTemplates?: () => void;\n onRetryTemplates?: () => void;\n /** Web \"Made with Seedance 2.0\" (CC-BY clips, credited on the tile). */\n showcase?: readonly ShowcaseClip[];\n onUseShowcasePrompt?: (clip: ShowcaseClip) => void;\n /** Connector runner - renews dead cover links and fetches a real frame for a video-only board. */\n runAction?: RunMediaAction;\n /** Web hero \"Direct the shot\": a fresh canvas, the generator seeded. Absent: no hero. */\n onStartWithPrompt?: (prompt: string, settings: HeroSettings) => void;\n /** Hero Product chip: pick a device image, answer its uploaded URL. */\n onPickReference?: () => Promise<string | null>;\n /** Hero \"Start from a template\": the templates gallery on its Video source. */\n onBrowseTemplates?: () => void;\n /** The design index had rows past the read limit (web `listing.more`). */\n studioMore?: boolean;\n /** The design index read failed; Your work offers Retry. */\n studioError?: string | null;\n onRetryStudioDesigns?: () => void;\n /** \"Show all\" / \"Show less\": the host re-reads 96 designs while expanded. */\n onExpandWork?: (expanded: boolean) => void;\n /** The chat this canvas is scoped to; a \"This chat's canvas\" card while it has no board. */\n currentSessionId?: string;\n onOpenSession?: (sessionId: string) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const { width } = useWindowDimensions();\n const tileWidth = Math.max(140, (width - GUTTER * 3) / 2);\n const laneWidth = (width - GUTTER * 2 - SPACE.sm * 2) / 3;\n const [visible, setVisible] = useState(CANVAS_BOARD_PAGE_SIZE);\n const [expanded, setExpanded] = useState(false);\n const [filter, setFilter] = useState<WorkFilter>('all');\n const [lookIndex, setLookIndex] = useState(-1);\n const renew = useMemo(() => renewMediaUrl(runAction), [runAction]);\n\n const work = useMemo(() => mergeWork(boards, designs, studioDesigns, docs), [boards, designs, studioDesigns, docs]);\n const filters = useMemo(() => availableFilters(work), [work]);\n // A chosen kind that is gone (its last design deleted) falls back to everything.\n const active = filters.includes(filter) ? filter : 'all';\n const shown = useMemo(() => work.filter((item) => matchesFilter(item, active)), [work, active]);\n\n useEffect(() => {\n setVisible(CANVAS_BOARD_PAGE_SIZE);\n }, [boards, designs, studioDesigns, docs, active]);\n\n // Web: only a real chat session gets a \"this chat\" card, and only while it has no board.\n const startSession =\n currentSessionId &&\n onOpenSession &&\n (active === 'all' || active === 'canvases') &&\n !boards.some((b) => b.channelId === currentSessionId)\n ? currentSessionId\n : null;\n const lead: GridItem[] = useMemo(\n () => [\n { kind: 'new', id: '__new__' },\n ...(startSession ? [{ kind: 'start' as const, id: '__start__', sessionId: startSession }] : []),\n ],\n [startSession],\n );\n const collapsedCount = collapsedWorkCount(2);\n const totalTiles = lead.length + shown.length;\n const tiles = useMemo<GridItem[]>(() => {\n const limit = expanded ? visible : Math.max(0, collapsedCount - lead.length);\n return [\n ...lead,\n ...shown\n .slice(0, limit)\n .map((entry) => ({ kind: 'work' as const, id: `${entry.type}:${entry.id}`, work: entry })),\n ];\n }, [lead, shown, visible, expanded, collapsedCount]);\n const toggleExpanded = useCallback(() => {\n setExpanded((was) => {\n onExpandWork?.(!was);\n return !was;\n });\n setVisible(CANVAS_BOARD_PAGE_SIZE);\n }, [onExpandWork]);\n\n // ── Playback governor: one clip at a time, the region nearest mid-screen ──\n const { height: windowHeight } = useWindowDimensions();\n const regions = useRef<Record<PlayRegion, { top: number; height: number }>>({\n hero: { top: 0, height: 0 },\n showcase: { top: 0, height: 0 },\n });\n const viewport = useRef({ top: 0, height: windowHeight });\n const [playing, setPlaying] = useState<PlayRegion | null>(null);\n const [showcaseIndex, setShowcaseIndex] = useState(0);\n const govern = useCallback(() => {\n const next = pickPlayingRegion(\n (Object.keys(regions.current) as PlayRegion[]).map((id) => ({ id, ...regions.current[id] })),\n viewport.current.top,\n viewport.current.height,\n ) as PlayRegion | null;\n setPlaying((prev) => (prev === next ? prev : next));\n }, []);\n const measure = (id: PlayRegion) => (e: LayoutChangeEvent) => {\n const { y, height } = e.nativeEvent.layout;\n // Header children sit below the list's top padding.\n regions.current[id] = { top: y + SPACE.sm, height };\n govern();\n };\n const onListScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, layoutMeasurement } = e.nativeEvent;\n viewport.current = { top: contentOffset.y, height: layoutMeasurement.height };\n govern();\n },\n [govern],\n );\n const onShowcaseScroll = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, layoutMeasurement } = e.nativeEvent;\n const next = centredIndex(\n contentOffset.x,\n layoutMeasurement.width,\n SHOWCASE_WIDTH,\n SPACE.sm,\n GUTTER,\n showcase.length,\n );\n setShowcaseIndex((prev) => (prev === next ? prev : next));\n };\n // A look open full screen plays its own clip; home holds still underneath.\n const playingNow = lookIndex >= 0 ? null : playing;\n\n const rows = useMemo(() => {\n const chunked: GridItem[][] = [];\n for (let i = 0; i < tiles.length; i += 2) chunked.push(tiles.slice(i, i + 2));\n return chunked;\n }, [tiles]);\n\n const loadMore = useCallback(() => {\n if (!expanded) return;\n setVisible((count) => (count >= shown.length ? count : Math.min(count + CANVAS_BOARD_PAGE_SIZE, shown.length)));\n }, [shown.length, expanded]);\n\n const group = (id: string) => createGroups.find((g) => g.id === id);\n const generate = group('generate');\n const edit = group('edit');\n const designGroup = group('design');\n\n const lane = (tile: VisibleTile) => {\n const hue = LANE_HUES[tile.id];\n const [wash, ink] = hue ? (theme.isDark ? hue.dark : hue.light) : [theme.card, theme.foreground];\n return (\n <Pressable\n key={tile.id}\n onPress={() => onCreate?.(tile.action, tile.id)}\n style={({ pressed }) => [\n styles.lane,\n { width: laneWidth, backgroundColor: wash },\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={24} color={ink} />\n <Text style={[styles.laneLabel, { color: theme.isDark ? theme.foreground : ink }]} numberOfLines={2}>\n {tile.label}\n </Text>\n </Pressable>\n );\n };\n\n const header = (\n <View style={styles.header}>\n <View style={styles.titleRow}>\n <Text style={styles.title} accessibilityRole=\"header\">\n Create\n </Text>\n <View style={styles.titleActions}>\n {onAskAgent && onStartWithPrompt ? (\n // The hero is the prompt box; AI Chat stays one tap away without a second box.\n <Pressable\n onPress={onAskAgent}\n style={({ pressed }) => [styles.toggle, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Open AI Chat\"\n >\n <MaterialCommunityIcons name=\"creation\" size={20} color={theme.foreground} />\n </Pressable>\n ) : null}\n <CanvasThemeToggle size={20} style={styles.toggle} />\n </View>\n </View>\n\n {onAskAgent && !onStartWithPrompt ? (\n <Pressable\n onPress={onAskAgent}\n style={({ pressed }) => [styles.prompt, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ask AI Chat to make something\"\n >\n <MaterialCommunityIcons name=\"creation\" size={20} color={theme.mutedForeground} />\n <Text style={styles.promptText} numberOfLines={1}>\n Describe what you want to make\n </Text>\n <View style={styles.promptGo}>\n <MaterialCommunityIcons name=\"arrow-up\" size={18} color={theme.primaryForeground} />\n </View>\n </Pressable>\n ) : null}\n\n {onStartWithPrompt ? (\n <View onLayout={measure('hero')}>\n <HeroComposer\n featuredLooks={featuredLooks}\n showcase={showcase}\n playing={playingNow === 'hero'}\n onStartWithPrompt={onStartWithPrompt}\n onPickReference={onPickReference}\n onBrowseTemplates={onBrowseTemplates}\n />\n </View>\n ) : null}\n\n {onCreate && generate ? (\n <View style={styles.section}>\n <SectionHeader title=\"Generate with AI\" />\n <View style={styles.lanes}>{generate.tiles.map(lane)}</View>\n </View>\n ) : null}\n\n {onCreate && designGroup ? (\n <View style={styles.section}>\n <SectionHeader title=\"Design\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {designGroup.tiles.map((tile) => (\n <FormatTile\n key={tile.id}\n tile={tile}\n onPress={() => {\n if (!onOpenCategory?.(tile.id)) onCreate(tile.action, tile.id);\n }}\n />\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {onCreate && edit ? (\n <View style={styles.section}>\n <SectionHeader title=\"Edit & produce\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {edit.tiles.map((tile) => (\n <Pressable\n key={tile.id}\n onPress={() => onCreate(tile.action, tile.id)}\n style={({ pressed }) => [styles.tool, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <MaterialCommunityIcons\n name={tile.icon as IconName}\n size={18}\n color={theme.foreground}\n />\n <Text style={styles.toolLabel}>{tile.label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {featuredLooks.length > 0 && onRecreateLook ? (\n <View style={styles.section}>\n <SectionHeader title=\"Looks\" detail=\"Recreate a studio style\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n >\n {featuredLooks.map((look, i) => (\n <Pressable\n key={look.id}\n onPress={() => setLookIndex(i)}\n style={({ pressed }) => [styles.look, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open look ${look.name}`}\n >\n {look.cover ? (\n <Image\n source={{ uri: look.cover }}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n />\n ) : (\n <View style={[styles.fill, styles.centered]}>\n <MaterialCommunityIcons\n name=\"movie-open-outline\"\n size={22}\n color={theme.mutedForeground}\n />\n </View>\n )}\n <View style={styles.lookCaption}>\n <Text style={styles.lookName} numberOfLines={2}>\n {look.name}\n </Text>\n </View>\n </Pressable>\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n {templateRails && onOpenTemplate ? (\n <TemplateRails\n state={templateRails}\n onOpenTemplate={onOpenTemplate}\n onSeeAll={onSeeAllTemplates}\n onRetry={onRetryTemplates}\n />\n ) : null}\n\n {showcase.length > 0 && onUseShowcasePrompt ? (\n <View style={styles.section} onLayout={measure('showcase')}>\n <SectionHeader title=\"Made with Seedance 2.0\" />\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.bleed}\n contentContainerStyle={styles.railContent}\n onScroll={onShowcaseScroll}\n scrollEventThrottle={100}\n >\n {showcase.map((clip, i) => (\n <ShowcaseTile\n key={clip.id}\n clip={clip}\n playing={playingNow === 'showcase' && i === showcaseIndex}\n onUse={() => onUseShowcasePrompt(clip)}\n />\n ))}\n </ScrollView>\n </View>\n ) : null}\n\n <View style={styles.workHead}>\n <SectionHeader\n title=\"Your work\"\n detail={work.length > 0 ? String(work.length) : undefined}\n style={styles.noMargin}\n />\n {filters.length > 0 ? (\n <Segmented\n options={WORK_FILTERS.filter((f) => filters.includes(f.id))}\n value={active}\n onChange={setFilter}\n style={styles.segmented}\n />\n ) : null}\n </View>\n {studioError ? (\n <View style={styles.railError} accessibilityRole=\"alert\">\n <Text style={styles.railErrorText}>Couldn't load your designs.</Text>\n {onRetryStudioDesigns ? (\n <Pressable\n onPress={onRetryStudioDesigns}\n hitSlop={8}\n style={({ pressed }) => [styles.retry, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"refresh\" size={16} color={theme.foreground} />\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n </View>\n );\n\n const footer =\n totalTiles > collapsedCount || expanded ? (\n <View style={styles.workFooter}>\n <Pressable\n onPress={toggleExpanded}\n style={({ pressed }) => [styles.showAll, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityState={{ expanded }}\n testID=\"your-work-show-all\"\n >\n <Text style={styles.retryLabel}>\n {expanded ? 'Show less' : showAllLabel(shown.length, studioMore)}\n </Text>\n </Pressable>\n {expanded && studioMore ? (\n <Text style={styles.workNote}>\n {`Showing your ${WORK_ARTIFACTS.expanded} most recent designs of each kind.`}\n </Text>\n ) : null}\n </View>\n ) : null;\n\n const renderTile = (item: GridItem) => {\n if (item.kind === 'new') {\n return (\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"New canvas\"\n >\n <View style={[styles.cover, styles.coverNew]}>\n <View style={styles.newPlus}>\n <MaterialCommunityIcons name=\"plus\" size={24} color={theme.primaryForeground} />\n </View>\n </View>\n <Text style={styles.workTitle}>New canvas</Text>\n <Text style={styles.workMeta}>Start blank</Text>\n </Pressable>\n );\n }\n if (item.kind === 'start') {\n return (\n <Pressable\n onPress={() => onOpenSession?.(item.sessionId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Open this chat's canvas\"\n >\n <View style={[styles.cover, styles.coverNew]}>\n <MaterialCommunityIcons name=\"image-outline\" size={26} color={theme.mutedForeground} />\n </View>\n <Text style={styles.workTitle}>This chat's canvas</Text>\n <Text style={styles.workMeta}>Canvas · Start creating here</Text>\n </Pressable>\n );\n }\n const { work: entry } = item;\n if (entry.type === 'doc') {\n const title = entry.doc.title?.trim() || 'Untitled doc';\n return (\n <Pressable\n onPress={() => onOpenDoc?.(entry.doc.id)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open doc ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n <DocPaper blocks={entry.doc.doc.blocks} title={title} height={tileWidth - SPACE.lg * 2} />\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {`Doc · ${relativeTime(entry.doc.updatedAt)}`}\n </Text>\n </Pressable>\n );\n }\n if (entry.type === 'studio') {\n const { doc, title } = entry.studio;\n const page = doc.pages[0];\n const frame = tileWidth - SPACE.xl * 2;\n const ratio = doc.pageHeight / doc.pageWidth;\n const pageW = ratio > 1 ? frame / ratio : frame;\n // Docs never land here: `doc:` rows are their own work items, drawn by DocPaper.\n const noun = studioNoun(entry.studio);\n const meta = [\n noun,\n doc.pages.length > 1 ? `${doc.pages.length} pages` : '',\n relativeTime(entry.studio.updatedAt),\n ]\n .filter(Boolean)\n .join(' · ');\n return (\n <Pressable\n onPress={() => onOpenStudioDesign?.(entry.studio.id)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${noun.toLowerCase()} ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n {page ? <DesignPageView doc={doc} page={page} width={pageW} /> : null}\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title || 'Untitled design'}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {meta}\n </Text>\n </Pressable>\n );\n }\n if (entry.type === 'design') {\n const { design } = entry;\n const noun = designNoun(design.doc);\n const title = design.title?.trim() || `Untitled ${noun.toLowerCase()}`;\n const meta = [noun, pageCount(design.doc), relativeTime(design.savedAt)].filter(Boolean).join(' · ');\n return (\n <Pressable\n onPress={() => onOpenDesign?.(design.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${noun.toLowerCase()} ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n <DesignThumb\n doc={design.doc}\n maxWidth={tileWidth - SPACE.xl * 2}\n maxHeight={tileWidth - SPACE.xl * 2}\n />\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {meta}\n </Text>\n </Pressable>\n );\n }\n const { board } = entry;\n const cover = boardCover(board.board.items);\n const title = !isUnsetBoardTitle(board.title)\n ? board.title\n : board.board.items.find((it) => it.generatedAssetName)?.generatedAssetName || 'Untitled canvas';\n return (\n <Pressable\n onPress={() => onOpen(board.channelId)}\n style={({ pressed }) => [{ width: tileWidth }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open canvas ${title}`}\n >\n <View style={[styles.cover, styles.centered]}>\n {cover ? (\n <BoardCover\n key={cover.src}\n item={cover}\n seed={board.channelId}\n runAction={runAction}\n renew={renew}\n />\n ) : (\n <CoverPlaceholder seed={board.channelId} icon=\"image-multiple-outline\" />\n )}\n {board.itemCount > 1 ? (\n <View style={styles.countBadge} pointerEvents=\"none\">\n <Text style={styles.countBadgeText}>{board.itemCount}</Text>\n </View>\n ) : null}\n </View>\n <Text style={styles.workTitle} numberOfLines={1}>\n {title}\n </Text>\n <Text style={styles.workMeta} numberOfLines={1}>\n {`Canvas · ${relativeTime(board.savedAt)}`}\n </Text>\n </Pressable>\n );\n };\n\n return (\n <View style={styles.plane}>\n {work.length === 0 ? (\n <ScrollView\n contentContainerStyle={styles.list}\n showsVerticalScrollIndicator={false}\n onScroll={onListScroll}\n scrollEventThrottle={100}\n >\n {header}\n <View style={styles.empty}>\n <View style={styles.emptyIcon}>\n <MaterialCommunityIcons name=\"image-multiple-outline\" size={26} color={theme.foreground} />\n </View>\n <Text style={styles.emptyTitle}>Nothing here yet</Text>\n <Text style={styles.emptyDetail}>\n Every chat gets its own canvas. Generate an image, video or audio and it lands here.\n </Text>\n <Pressable\n onPress={onNewCanvas}\n style={({ pressed }) => [styles.emptyCta, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"plus\" size={18} color={theme.primaryForeground} />\n <Text style={styles.emptyCtaLabel}>New canvas</Text>\n </Pressable>\n </View>\n </ScrollView>\n ) : (\n <FlatList\n data={rows}\n keyExtractor={(pair) => pair.map((item) => item.id).join(':')}\n contentContainerStyle={styles.list}\n showsVerticalScrollIndicator={false}\n onEndReached={loadMore}\n onEndReachedThreshold={0.4}\n onScroll={onListScroll}\n scrollEventThrottle={100}\n ListHeaderComponent={header}\n ListFooterComponent={footer}\n renderItem={({ item: pair }) => (\n <View style={styles.row}>\n {pair.map((entry) => (\n <View key={entry.id}>{renderTile(entry)}</View>\n ))}\n {pair.length < 2 ? <View style={{ width: tileWidth }} /> : null}\n </View>\n )}\n />\n )}\n {onRecreateLook ? (\n <LookDetail\n looks={featuredLooks}\n index={lookIndex}\n onIndexChange={setLookIndex}\n onRecreate={(look) => {\n setLookIndex(-1);\n onRecreateLook(look);\n }}\n onClose={() => setLookIndex(-1)}\n />\n ) : null}\n </View>\n );\n}\n\n/**\n * Web TemplateRails on a phone: one heading, two swipeable rows of covers at\n * their own page shape (176 high), skeletons while the catalog reads.\n */\nfunction TemplateRails({\n state,\n onOpenTemplate,\n onSeeAll,\n onRetry,\n}: {\n state: TemplateRailsState;\n onOpenTemplate: (templateId: string) => void;\n onSeeAll?: () => void;\n onRetry?: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const count = state.rows[0].length + state.rows[1].length;\n const pending = state.status === 'loading';\n if (state.status === 'ready' && count === 0) return null;\n return (\n <View style={styles.section}>\n <SectionHeader title=\"Templates for you\" action={onSeeAll ? 'See all' : undefined} onAction={onSeeAll} />\n {state.status === 'failed' ? (\n <View style={styles.railError}>\n <Text style={styles.railErrorText}>\n {count ? \"Some templates couldn't load.\" : \"Templates couldn't load.\"}\n </Text>\n {onRetry ? (\n <Pressable\n onPress={onRetry}\n hitSlop={8}\n style={({ pressed }) => [styles.retry, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"refresh\" size={16} color={theme.foreground} />\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n ) : null}\n </View>\n ) : null}\n {state.rows.map((row, index) =>\n row.length || pending ? (\n <ScrollView\n key={index}\n horizontal\n showsHorizontalScrollIndicator={false}\n style={[styles.bleed, index === 0 && styles.templateRowGap]}\n contentContainerStyle={styles.railContent}\n >\n {row.map((card) => (\n <TemplateCover key={card.id} card={card} onPress={() => onOpenTemplate(card.id)} />\n ))}\n {pending\n ? Array.from({ length: row.length ? 2 : 4 }, (_, i) => (\n <Skeleton\n key={`skeleton-${i}`}\n radius={RADIUS.md}\n style={{\n width: Math.round(\n TEMPLATE_HEIGHT *\n TEMPLATE_SKELETON_RATIOS[\n (i + index) % TEMPLATE_SKELETON_RATIOS.length\n ],\n ),\n height: TEMPLATE_HEIGHT,\n }}\n />\n ))\n : null}\n </ScrollView>\n ) : null,\n )}\n </View>\n );\n}\n\nfunction TemplateCover({ card, onPress }: { card: DesignCatalogCard; onPress: () => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const [loaded, setLoaded] = useState(false);\n // A web banner (728 x 90) would run off the screen; cap it like a wide slide.\n const width = Math.min(Math.round((TEMPLATE_HEIGHT * card.pageWidth) / card.pageHeight), TEMPLATE_HEIGHT * 2);\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.templateCover, { width, height: TEMPLATE_HEIGHT }, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Use template ${card.title}`}\n >\n {loaded ? null : <Skeleton />}\n <Image\n source={{ uri: card.coverUrl }}\n style={StyleSheet.absoluteFill}\n contentFit=\"contain\"\n transition={150}\n onLoad={() => setLoaded(true)}\n />\n </Pressable>\n );\n}\n\n/**\n * A Seedance community clip: its poster, its title, the credit its CC-BY\n * licence requires (tap opens the original post) and its prompt one tap away.\n */\nfunction ShowcaseTile({ clip, playing, onUse }: { clip: ShowcaseClip; playing: boolean; onUse: () => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const openSource = () => {\n void Linking.openURL(clip.sourceUrl).catch(() => undefined);\n };\n return (\n <View style={styles.showcase}>\n <Pressable\n onPress={onUse}\n style={({ pressed }) => [styles.showcasePoster, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Use the prompt from ${clip.title}`}\n >\n <CoverPlaceholder seed={clip.id} icon=\"play\" />\n {/* The centred tile loops its clip (governed: one player on home); the rest hold their poster. */}\n <LoopingVideo src={clip.hls} poster={clip.poster} playing={playing} />\n {playing ? null : (\n <View style={styles.playBadge} pointerEvents=\"none\">\n <MaterialCommunityIcons name=\"play\" size={16} color=\"#fafafa\" />\n </View>\n )}\n </Pressable>\n <Text style={styles.workTitle} numberOfLines={1}>\n {clip.title}\n </Text>\n <Pressable\n onPress={openSource}\n hitSlop={6}\n style={styles.credit}\n accessibilityRole=\"link\"\n accessibilityLabel={`By ${clip.author}, ${clip.license}. Open the original post`}\n >\n <Text style={styles.creditText} numberOfLines={1}>\n {`By ${clip.author} · CC BY 4.0`}\n </Text>\n <MaterialCommunityIcons name=\"open-in-new\" size={12} color={theme.mutedForeground} />\n </Pressable>\n <Pressable\n onPress={onUse}\n style={({ pressed }) => [styles.usePrompt, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"creation\" size={14} color={theme.foreground} />\n <Text style={styles.usePromptLabel}>Use this prompt</Text>\n </Pressable>\n </View>\n );\n}\n\n/** A design format, drawn at its own proportions on a neutral well. */\nfunction FormatTile({ tile, onPress }: { tile: VisibleTile; onPress: () => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const shape = FORMAT_SHAPE[tile.id] ?? { w: 1, h: 1 };\n const box = 56;\n const scale = box / Math.max(shape.w, shape.h);\n const pageW = shape.w * scale;\n const pageH = shape.h * scale;\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.format, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`${tile.label}: ${tile.hint}`}\n testID={`create-tile-${tile.id}`}\n >\n <View style={styles.formatWell}>\n {shape.stack ? (\n <View style={[styles.formatPage, styles.formatPageBack, { width: pageW, height: pageH }]} />\n ) : null}\n <View\n style={[\n styles.formatPage,\n { width: pageW, height: pageH },\n shape.round && { borderRadius: pageW / 2 },\n ]}\n >\n <MaterialCommunityIcons name={tile.icon as IconName} size={18} color={theme.mutedForeground} />\n </View>\n </View>\n <Text style={styles.formatLabel} numberOfLines={1}>\n {tile.label}\n </Text>\n </Pressable>\n );\n}\n\n/**\n * A board's cover: the image itself, renewed once if its link died, or for a\n * video-only board a real frame fetched once per clip (connector THUMBNAIL,\n * cached in memory). A cover that cannot load shows a quiet glyph.\n */\nfunction BoardCover({\n item,\n seed,\n runAction,\n renew,\n}: {\n item: CanvasItem;\n /** Stable per board, so its fallback colour never changes. */\n seed: string;\n runAction?: RunMediaAction;\n renew: (url: string) => Promise<string>;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const isVideo = item.type === 'video';\n const [frame, setFrame] = useState<string | null | undefined>(isVideo ? undefined : item.src);\n const [loaded, setLoaded] = useState(false);\n\n useEffect(() => {\n if (!isVideo) return undefined;\n if (!runAction) {\n setFrame(null);\n return undefined;\n }\n let live = true;\n void videoCoverFrame(unwrapProxyUrl(item.src), runAction, (result) =>\n resultUrl(result, 'YANTRA_VIDEO_EDIT_THUMBNAIL'),\n ).then((url) => {\n if (live) setFrame(url);\n });\n return () => {\n live = false;\n };\n }, [item.src, isVideo, runAction]);\n\n const media = useMediaSource(frame ?? '', 'image', renew);\n const [stalled, setStalled] = useState(false);\n useEffect(() => {\n setLoaded(false);\n setStalled(false);\n // A request that neither paints nor fails must not pulse forever.\n const timer = setTimeout(() => setStalled(true), COVER_STALL_MS);\n return () => clearTimeout(timer);\n }, [media.key]);\n\n // No picture to be had: a tinted cover that says what the board holds.\n if (frame === null || media.phase === 'broken') {\n return (\n <CoverPlaceholder\n seed={seed}\n icon={isVideo ? 'play' : 'image-outline'}\n label={isVideo ? 'Video' : undefined}\n />\n );\n }\n return (\n <>\n {/* Until the picture paints (or while its link is renewed) the cover breathes instead of sitting blank. */}\n {loaded && media.phase === 'ok' ? null : stalled ? (\n <CoverPlaceholder seed={seed} icon={isVideo ? 'play' : 'image-outline'} />\n ) : (\n <Skeleton />\n )}\n {frame ? (\n <Image\n key={media.key}\n source={{ uri: media.src }}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={200}\n onLoad={() => setLoaded(true)}\n onError={media.onError}\n />\n ) : null}\n {isVideo && loaded ? (\n <View style={styles.playBadge} pointerEvents=\"none\">\n <MaterialCommunityIcons name=\"play\" size={16} color=\"#fafafa\" />\n </View>\n ) : null}\n </>\n );\n}\n\n/** A design's first page, scaled into the tile: fill, shapes, images and text as laid out. */\nfunction DesignThumb({ doc, maxWidth, maxHeight }: { doc: PersistedDesignDoc; maxWidth: number; maxHeight: number }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const page = doc.pages[0];\n if (!page || !(page.width > 0) || !(page.height > 0)) {\n return <MaterialCommunityIcons name=\"shape-outline\" size={28} color={theme.mutedForeground} />;\n }\n const scale = Math.min(maxWidth / page.width, maxHeight / page.height);\n const layers = [...page.layers].sort((a, b) => a.zIndex - b.zIndex);\n return (\n <View\n style={[\n styles.designPage,\n {\n width: page.width * scale,\n height: page.height * scale,\n backgroundColor: page.background || '#ffffff',\n },\n ]}\n pointerEvents=\"none\"\n >\n {layers.length === 0 ? (\n // An untouched page: a faint layout sketch (title, lines, picture) instead of a blank sheet.\n <View style={styles.sketch}>\n <View style={[styles.sketchBar, { width: '62%', height: '9%' }]} />\n <View style={[styles.sketchBar, { width: '86%', height: '5%' }]} />\n <View style={[styles.sketchBar, { width: '70%', height: '5%' }]} />\n <View style={[styles.sketchBar, styles.sketchBlock]}>\n <MaterialCommunityIcons name=\"image-outline\" size={16} color=\"#b4b4bb\" />\n </View>\n <Text style={styles.blankPage}>{designNoun(doc)}</Text>\n </View>\n ) : (\n layers.map((layer) => <DesignThumbLayer key={layer.id} layer={layer} scale={scale} />)\n )}\n </View>\n );\n}\n\nfunction DesignThumbLayer({ layer, scale }: { layer: DesignLayer; scale: number }) {\n const box = {\n position: 'absolute' as const,\n left: layer.x * scale,\n top: layer.y * scale,\n width: layer.width * scale,\n height: layer.height * scale,\n opacity: layer.opacity,\n };\n if (layer.type === 'image') {\n return <Image source={{ uri: layer.src }} style={box} contentFit=\"cover\" />;\n }\n if (layer.type === 'shape') {\n return <View style={[box, { backgroundColor: layer.fill, borderRadius: layer.cornerRadius * scale }]} />;\n }\n return (\n <Text\n style={[\n box,\n {\n color: layer.color,\n fontSize: Math.max(4, layer.fontSize * scale),\n lineHeight: Math.max(5, layer.fontSize * scale * 1.15),\n fontWeight: layer.bold ? '700' : '400',\n textAlign: layer.align,\n },\n ]}\n numberOfLines={3}\n >\n {layer.text}\n </Text>\n );\n}\n\n/** The top of a doc's first page: a sheet of paper with its opening lines (web YourWork `DocPage`). */\nfunction DocPaper({ blocks, title, height }: { blocks: unknown; title: string; height: number }) {\n const lines = docPreviewLines(blocks, 7);\n const width = Math.round((height * 8.5) / 11);\n return (\n <View style={[docPaperStyles.page, { width, height }]} pointerEvents=\"none\">\n <Text style={docPaperStyles.title} numberOfLines={1}>\n {title}\n </Text>\n {lines.length\n ? lines.map((line, i) => (\n <Text\n key={i}\n style={line.heading ? docPaperStyles.heading : docPaperStyles.line}\n numberOfLines={2}\n >\n {line.text}\n </Text>\n ))\n : // A new doc has no words yet; ruled lines say \"page\" without inventing text.\n [92, 100, 84, 96, 70].map((w, i) => (\n <View key={i} style={[docPaperStyles.rule, { width: `${w}%` }]} />\n ))}\n </View>\n );\n}\n\n// Paper is white in both themes, as web's doc tile: it is a picture of the page.\nconst docPaperStyles = StyleSheet.create({\n page: {\n backgroundColor: '#ffffff',\n borderRadius: 3,\n padding: 10,\n gap: 5,\n overflow: 'hidden',\n shadowColor: '#000',\n shadowOpacity: 0.12,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: 2,\n },\n title: { fontSize: 10, lineHeight: 13, fontWeight: '700', color: '#171717' },\n heading: { fontSize: 8, lineHeight: 11, fontWeight: '600', color: '#262626' },\n line: { fontSize: 8, lineHeight: 11, color: '#525252' },\n rule: { height: 4, borderRadius: 2, backgroundColor: '#e5e5e5', marginTop: 4 },\n});\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n plane: { flex: 1, backgroundColor: theme.background },\n list: { paddingHorizontal: GUTTER, paddingTop: SPACE.sm, paddingBottom: SPACE.xxl },\n header: { alignSelf: 'stretch', width: '100%' },\n titleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: SPACE.md,\n },\n title: { ...TYPE.display, color: theme.foreground },\n titleActions: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm },\n toggle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.card,\n },\n prompt: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n minHeight: 56,\n paddingLeft: SPACE.lg,\n paddingRight: SPACE.sm,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n marginBottom: SPACE.xl,\n },\n promptText: { ...TYPE.body, flex: 1, color: theme.mutedForeground },\n promptGo: {\n width: 40,\n height: 40,\n borderRadius: 20,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n section: { marginBottom: SPACE.xl },\n // flexGrow 0: a horizontal ScrollView otherwise swells into any spare height.\n bleed: { flexGrow: 0, marginHorizontal: -GUTTER },\n railContent: { paddingHorizontal: GUTTER, gap: SPACE.sm },\n lanes: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.sm },\n lane: {\n height: 92,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n justifyContent: 'space-between',\n },\n laneLabel: { ...TYPE.label, lineHeight: 17 },\n format: { width: 84, alignItems: 'center', gap: SPACE.sm },\n formatWell: {\n width: 84,\n height: 84,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n },\n formatPage: {\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 4,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n },\n formatPageBack: { position: 'absolute', transform: [{ translateX: 6 }, { translateY: -6 }], opacity: 0.6 },\n formatLabel: { ...TYPE.caption, color: theme.foreground },\n tool: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.lg - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n toolLabel: { ...TYPE.label, color: theme.foreground },\n look: {\n width: 136,\n height: 176,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n },\n lookCaption: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n paddingHorizontal: SPACE.md - 2,\n paddingVertical: SPACE.sm + 2,\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n lookName: { ...TYPE.label, color: '#fafafa' },\n templateRowGap: { marginBottom: SPACE.md },\n templateCover: {\n borderRadius: RADIUS.md,\n overflow: 'hidden',\n backgroundColor: theme.card,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n },\n railError: {\n flexDirection: 'row',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: SPACE.md,\n marginBottom: SPACE.md,\n },\n railErrorText: { ...TYPE.body, fontSize: 14, color: theme.mutedForeground },\n retry: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs + 2,\n minHeight: 36,\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n retryLabel: { ...TYPE.label, color: theme.foreground },\n showcase: { width: SHOWCASE_WIDTH },\n showcasePoster: {\n width: SHOWCASE_WIDTH,\n height: Math.round((SHOWCASE_WIDTH * 9) / 16),\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n marginBottom: SPACE.sm,\n },\n credit: { flexDirection: 'row', alignItems: 'center', gap: SPACE.xs, marginTop: 1, alignSelf: 'flex-start' },\n creditText: { ...TYPE.caption, flexShrink: 1, color: theme.mutedForeground, textDecorationLine: 'underline' },\n usePrompt: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n gap: SPACE.xs + 2,\n minHeight: 36,\n marginTop: SPACE.sm,\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n usePromptLabel: { ...TYPE.label, color: theme.foreground },\n workHead: { gap: SPACE.md, marginBottom: SPACE.lg },\n workFooter: { alignItems: 'center', gap: SPACE.sm, marginTop: SPACE.xs },\n showAll: {\n minHeight: 40,\n justifyContent: 'center',\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.md,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n },\n workNote: { ...TYPE.caption, color: theme.mutedForeground, textAlign: 'center' },\n noMargin: { marginBottom: 0 },\n segmented: { flexGrow: 0, alignSelf: 'flex-start' },\n row: { flexDirection: 'row', gap: GUTTER, marginBottom: SPACE.xl - 4 },\n cover: {\n aspectRatio: 1,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: theme.card,\n marginBottom: SPACE.sm,\n },\n coverNew: {\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1.5,\n borderStyle: 'dashed',\n borderColor: theme.borderStrong,\n backgroundColor: 'transparent',\n },\n newPlus: {\n width: 48,\n height: 48,\n borderRadius: 24,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n centered: { alignItems: 'center', justifyContent: 'center' },\n fill: { ...StyleSheet.absoluteFillObject },\n workTitle: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n workMeta: { ...TYPE.caption, marginTop: 1, color: theme.mutedForeground },\n countBadge: {\n position: 'absolute',\n top: SPACE.sm,\n right: SPACE.sm,\n minWidth: 24,\n height: 24,\n paddingHorizontal: 7,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n countBadgeText: { fontSize: 12, fontWeight: '600', color: '#fafafa' },\n playBadge: {\n position: 'absolute',\n left: SPACE.sm,\n bottom: SPACE.sm,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n designPage: {\n overflow: 'hidden',\n borderRadius: 3,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0 : 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n // The sketch sits on the design's own (usually white) page, so its ink is fixed, not themed.\n sketch: { ...StyleSheet.absoluteFillObject, padding: '10%', gap: 6 },\n sketchBar: { borderRadius: 3, backgroundColor: '#ececef' },\n sketchBlock: { flex: 1, width: '100%', marginTop: 4, alignItems: 'center', justifyContent: 'center' },\n blankPage: { fontSize: 10, fontWeight: '600', color: '#a1a1aa', textAlign: 'center' },\n empty: {\n alignItems: 'center',\n paddingVertical: SPACE.xxl,\n paddingHorizontal: SPACE.xl,\n borderRadius: RADIUS.xl,\n backgroundColor: theme.card,\n },\n emptyIcon: {\n width: 52,\n height: 52,\n borderRadius: 26,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.background,\n marginBottom: SPACE.md,\n },\n emptyTitle: { ...TYPE.title, color: theme.foreground, textAlign: 'center' },\n emptyDetail: {\n ...TYPE.body,\n fontSize: 14,\n marginTop: SPACE.xs,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n emptyCta: {\n marginTop: SPACE.lg + 2,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n minHeight: 44,\n paddingHorizontal: SPACE.xl - 4,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n },\n emptyCtaLabel: { ...TYPE.label, fontSize: 15, color: theme.primaryForeground },\n }),\n);\n"],"names":["title"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasChatResultCard.js","sources":["../../../src/features/canvas/CanvasChatResultCard.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Image, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Feather } from '@expo/vector-icons';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\nexport interface CanvasChatPreviewItem {\n id: string;\n title: string;\n imageUrl?: string;\n meta?: string;\n}\n\n/** Native twin of surface-kit ChatResultCard — horizontal thumbs to open canvas items. */\nexport function CanvasChatResultCard({\n title,\n subtitle,\n items,\n actionLabel,\n onAction,\n onItemClick,\n}: {\n title: string;\n subtitle?: string;\n items: CanvasChatPreviewItem[];\n actionLabel?: string;\n onAction?: () => void;\n onItemClick: (item: CanvasChatPreviewItem) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n if (!items.length) return null;\n const preview = items.slice(0, 6);\n const remaining = items.length - preview.length;\n\n return (\n <View style={styles.wrap}>\n <Text style={styles.title} numberOfLines={1}>\n {title}\n </Text>\n {subtitle ? (\n <Text style={styles.sub} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n <ScrollView\n style={HSCROLL}\n horizontal\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {preview.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => onItemClick(item)}\n style={({ pressed }) => [styles.tile, pressedStyle(pressed)]}\n >\n <View style={styles.thumbClip}>\n {item.imageUrl ? (\n <Image source={{ uri: item.imageUrl }} style={styles.thumb} />\n ) : (\n <View style={[styles.thumb, styles.thumbEmpty]} />\n )}\n </View>\n <Text style={styles.thumbTitle} numberOfLines={2}>\n {item.title}\n </Text>\n {item.meta ? (\n <Text style={styles.thumbMeta} numberOfLines={1}>\n {item.meta}\n </Text>\n ) : null}\n </Pressable>\n ))}\n {remaining > 0 ? (\n <View style={styles.more}>\n <Text style={styles.moreLabel}>+{remaining} more</Text>\n </View>\n ) : null}\n </ScrollView>\n {actionLabel && onAction ? (\n <Pressable\n onPress={onAction}\n style={({ pressed }) => [styles.action, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Feather name=\"external-link\" size={14} color={theme.foreground} />\n <Text style={styles.actionLabel}>{actionLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n wrap: {\n backgroundColor: theme.card,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n marginBottom: SPACE.sm,\n },\n title: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n sub: { ...TYPE.caption, color: theme.mutedForeground, marginTop: 2 },\n row: { gap: SPACE.sm, paddingTop: SPACE.md - 2, paddingBottom: SPACE.xs },\n tile: { width: 104 },\n thumbClip: { borderRadius: RADIUS.md, overflow: 'hidden', backgroundColor: theme.tint(0.06) },\n thumb: { width: 104, height: 78 },\n thumbEmpty: { backgroundColor: theme.tint(0.08) },\n thumbTitle: { ...TYPE.caption, marginTop: SPACE.sm - 2, fontWeight: '600', color: theme.foreground },\n thumbMeta: { fontSize: 11, lineHeight: 14, color: theme.mutedForeground },\n more: {\n width: 104,\n height: 78,\n borderRadius: RADIUS.md,\n backgroundColor: theme.tint(0.06),\n alignItems: 'center',\n justifyContent: 'center',\n },\n moreLabel: { ...TYPE.caption, color: theme.mutedForeground },\n action: {\n marginTop: SPACE.md - 2,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm - 2,\n minHeight: 40,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderRadius: RADIUS.pill,\n },\n actionLabel: { ...TYPE.label, color: theme.foreground },\n }),\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAOA,MAAM,OAAU,GAAA;AAAA,EACd,QAAU,EAAA;AACZ,CAAA;AASO,SAAS,oBAAqB,CAAA;AAAA,EACnC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAOG,EAAA;AACD,EAAA,MAAM,QAAQ,cAAe,EAAA;AAC7B,EAAM,MAAA,MAAA,GAAS,QAAQ,MAAM,UAAA,CAAW,KAAK,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AACvD,EAAI,IAAA,CAAC,KAAM,CAAA,MAAA,EAAe,OAAA,IAAA;AAC1B,EAAA,MAAM,OAAU,GAAA,KAAA,CAAM,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA;AAChC,EAAM,MAAA,SAAA,GAAY,KAAM,CAAA,MAAA,GAAS,OAAQ,CAAA,MAAA;AACzC,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IACjB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,KAAO,EAAA,aAAA,EAAe,GACrC,QACL,EAAA,KAAA,EAAA,CAAA;AAAA,IACC,QAAA,uBAAY,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,GAAK,EAAA,aAAA,EAAe,CAC3C,EAAA,QAAA,EAAA,QAAA,EACL,CAAU,GAAA,IAAA;AAAA,oBACb,IAAA,CAAA,UAAA,EAAA,EAAW,KAAO,EAAA,OAAA,EAAS,YAAU,IAAC,EAAA,mBAAA,EAAmB,IAAC,EAAA,yBAAA,EAA0B,SAAU,EAAA,8BAAA,EAAgC,KAAO,EAAA,qBAAA,EAAuB,OAAO,GAC/J,EAAA,QAAA,EAAA;AAAA,MAAQ,OAAA,CAAA,GAAA,CAAI,CAAQ,IAAA,qBAAA,IAAA,CAAC,SAAwB,EAAA,EAAA,OAAA,EAAS,MAAM,WAAY,CAAA,IAAI,CAAG,EAAA,KAAA,EAAO,CAAC;AAAA,QAChG;AAAA,YACI,CAAC,MAAA,CAAO,MAAM,YAAa,CAAA,OAAO,CAAC,CACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,SAAA,EACf,eAAK,QAAW,mBAAA,GAAA,CAAC,SAAM,MAAQ,EAAA;AAAA,UAChD,KAAK,IAAK,CAAA;AAAA,SACT,EAAA,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,oBAAM,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,MAAO,CAAA,KAAA,EAAO,MAAO,CAAA,UAAU,GAAG,CAC/D,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,YAAY,aAAe,EAAA,CAAA,EAC1C,eAAK,KACV,EAAA,CAAA;AAAA,QACC,IAAA,CAAK,IAAO,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,SAAA,EAAW,aAAe,EAAA,CAAA,EAClD,QAAK,EAAA,IAAA,CAAA,IAAA,EACV,CAAU,GAAA;AAAA,OAbe,EAAA,EAAA,IAAA,CAAK,EActC,CAAY,CAAA;AAAA,MACf,SAAA,GAAY,CAAI,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,EAC7B,QAAC,kBAAA,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,SAAW,EAAA,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE,SAAA;AAAA,QAAU;AAAA,OAAA,EAAK,GACpD,CAAU,GAAA;AAAA,KAClB,EAAA,CAAA;AAAA,IACC,eAAe,QAAW,mBAAA,IAAA,CAAC,aAAU,OAAS,EAAA,QAAA,EAAU,OAAO,CAAC;AAAA,MACvE;AAAA,KACF,KAAM,CAAC,MAAO,CAAA,MAAA,EAAQ,aAAa,OAAO,CAAC,CAAG,EAAA,iBAAA,EAAkB,QAChD,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAQ,IAAK,EAAA,eAAA,EAAgB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAM,UAAY,EAAA,CAAA;AAAA,sBAChE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,aAAc,QAAY,EAAA,WAAA,EAAA;AAAA,KAAA,EAClD,CAAe,GAAA;AAAA,GACvB,EAAA,CAAA;AACR;AACA,MAAM,UAAa,GAAA,YAAA,CAAa,CAAC,KAAA,KAAyB,WAAW,MAAO,CAAA;AAAA,EAC1E,IAAM,EAAA;AAAA,IACJ,iBAAiB,KAAM,CAAA,IAAA;AAAA,IACvB,cAAc,MAAO,CAAA,EAAA;AAAA,IACrB,SAAS,KAAM,CAAA,EAAA;AAAA,IACf,cAAc,KAAM,CAAA;AAAA,GACtB;AAAA,EACA,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADH,CAAA,EAAA;AAAA,IAEL,QAAU,EAAA,EAAA;AAAA,IACV,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,GAAA,EAAK,aACA,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADL,CAAA,EAAA;AAAA,IAEH,OAAO,KAAM,CAAA,eAAA;AAAA,IACb,SAAW,EAAA;AAAA,GACb,CAAA;AAAA,EACA,GAAK,EAAA;AAAA,IACH,KAAK,KAAM,CAAA,EAAA;AAAA,IACX,UAAA,EAAY,MAAM,EAAK,GAAA,CAAA;AAAA,IACvB,eAAe,KAAM,CAAA;AAAA,GACvB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,cAAc,MAAO,CAAA,EAAA;AAAA,IACrB,QAAU,EAAA,QAAA;AAAA,IACV,eAAA,EAAiB,KAAM,CAAA,IAAA,CAAK,IAAI;AAAA,GAClC;AAAA,EACA,KAAO,EAAA;AAAA,IACL,KAAO,EAAA,GAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,UAAY,EAAA;AAAA,IACV,eAAA,EAAiB,KAAM,CAAA,IAAA,CAAK,IAAI;AAAA,GAClC;AAAA,EACA,UAAA,EAAY,aACP,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADE,CAAA,EAAA;AAAA,IAEV,SAAA,EAAW,MAAM,EAAK,GAAA,CAAA;AAAA,IACtB,UAAY,EAAA,KAAA;AAAA,IACZ,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,OAAO,KAAM,CAAA;AAAA,GACf;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA,GAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,cAAc,MAAO,CAAA,EAAA;AAAA,IACrB,eAAA,EAAiB,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,IAChC,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,SAAA,EAAW,aACN,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADC,CAAA,EAAA;AAAA,IAET,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,SAAA,EAAW,MAAM,EAAK,GAAA,CAAA;AAAA,IACtB,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,GAAA,EAAK,MAAM,EAAK,GAAA,CAAA;AAAA,IAChB,SAAW,EAAA,EAAA;AAAA,IACX,eAAiB,EAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,YAAY,KAAM,CAAA,OAAA;AAAA,IACxD,cAAc,MAAO,CAAA;AAAA,GACvB;AAAA,EACA,WAAA,EAAa,aACR,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADG,CAAA,EAAA;AAAA,IAEX,OAAO,KAAM,CAAA;AAAA,GACf;AACF,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"CanvasChatResultCard.js","sources":["../../../src/features/canvas/CanvasChatResultCard.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { Image, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { Feather } from '@expo/vector-icons';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\n/**\n * The business-card widget an agent reply carries (web BusinessCardChatCard):\n * a chat pane renders `<BusinessCardExtras content={reply} onEditDesign=... />`\n * under each assistant message.\n */\nexport { BusinessCardChatCard, BusinessCardExtras, PRINT_UNAVAILABLE_NOTE } from './generator/BusinessCardChatCard';\nexport { businessCardWidgetsOf, type BusinessCardWidget } from './generator/businessCardWidget';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\nexport interface CanvasChatPreviewItem {\n id: string;\n title: string;\n imageUrl?: string;\n meta?: string;\n}\n\n/** Native twin of surface-kit ChatResultCard — horizontal thumbs to open canvas items. */\nexport function CanvasChatResultCard({\n title,\n subtitle,\n items,\n actionLabel,\n onAction,\n onItemClick,\n}: {\n title: string;\n subtitle?: string;\n items: CanvasChatPreviewItem[];\n actionLabel?: string;\n onAction?: () => void;\n onItemClick: (item: CanvasChatPreviewItem) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n if (!items.length) return null;\n const preview = items.slice(0, 6);\n const remaining = items.length - preview.length;\n\n return (\n <View style={styles.wrap}>\n <Text style={styles.title} numberOfLines={1}>\n {title}\n </Text>\n {subtitle ? (\n <Text style={styles.sub} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n <ScrollView\n style={HSCROLL}\n horizontal\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {preview.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => onItemClick(item)}\n style={({ pressed }) => [styles.tile, pressedStyle(pressed)]}\n >\n <View style={styles.thumbClip}>\n {item.imageUrl ? (\n <Image source={{ uri: item.imageUrl }} style={styles.thumb} />\n ) : (\n <View style={[styles.thumb, styles.thumbEmpty]} />\n )}\n </View>\n <Text style={styles.thumbTitle} numberOfLines={2}>\n {item.title}\n </Text>\n {item.meta ? (\n <Text style={styles.thumbMeta} numberOfLines={1}>\n {item.meta}\n </Text>\n ) : null}\n </Pressable>\n ))}\n {remaining > 0 ? (\n <View style={styles.more}>\n <Text style={styles.moreLabel}>+{remaining} more</Text>\n </View>\n ) : null}\n </ScrollView>\n {actionLabel && onAction ? (\n <Pressable\n onPress={onAction}\n style={({ pressed }) => [styles.action, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Feather name=\"external-link\" size={14} color={theme.foreground} />\n <Text style={styles.actionLabel}>{actionLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n wrap: {\n backgroundColor: theme.card,\n borderRadius: RADIUS.lg,\n padding: SPACE.md,\n marginBottom: SPACE.sm,\n },\n title: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n sub: { ...TYPE.caption, color: theme.mutedForeground, marginTop: 2 },\n row: { gap: SPACE.sm, paddingTop: SPACE.md - 2, paddingBottom: SPACE.xs },\n tile: { width: 104 },\n thumbClip: { borderRadius: RADIUS.md, overflow: 'hidden', backgroundColor: theme.tint(0.06) },\n thumb: { width: 104, height: 78 },\n thumbEmpty: { backgroundColor: theme.tint(0.08) },\n thumbTitle: { ...TYPE.caption, marginTop: SPACE.sm - 2, fontWeight: '600', color: theme.foreground },\n thumbMeta: { fontSize: 11, lineHeight: 14, color: theme.mutedForeground },\n more: {\n width: 104,\n height: 78,\n borderRadius: RADIUS.md,\n backgroundColor: theme.tint(0.06),\n alignItems: 'center',\n justifyContent: 'center',\n },\n moreLabel: { ...TYPE.caption, color: theme.mutedForeground },\n action: {\n marginTop: SPACE.md - 2,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm - 2,\n minHeight: 40,\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n borderRadius: RADIUS.pill,\n },\n actionLabel: { ...TYPE.label, color: theme.foreground },\n }),\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs}from'react/jsx-runtime';import {useMemo,useState}from'react';import {Text,View,ScrollView,TextInput,ActivityIndicator,StyleSheet
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useMemo,useState,useEffect}from'react';import {Image,Text,View,ScrollView,TextInput,ActivityIndicator,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {resultUrl,friendlyMediaError}from'./videoEditor/mediaActions.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.js';import {ReframePreview}from'./generator/ReframePreview.js';import {dimsFromShape}from'./generator/reframeGeometry.js';import {removeBackgroundDefaults,KEY_COLOR_CHOICES,normalizeHex,UPSCALE_TARGETS,runReframeChoice,runRemoveBackground,upscalePlan,runUpscale,runMatchLook,runTrackedLipSync,runExtendVideo}from'./canvasEditOps.js';import {editToolsForItem,EDIT_TOOL_META}from'./editTools.js';import {REFRAME_FORMATS,REFRAME_BARS,stillReframeNote,formatName,describeReframe}from'./reframe.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,Segmented,RADIUS,SPACE,HIT,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -60,6 +60,36 @@ function CanvasEditToolsPanel({
|
|
|
60
60
|
const [upscaleTarget, setUpscaleTarget] = useState("1080p");
|
|
61
61
|
const [lipText, setLipText] = useState("");
|
|
62
62
|
const [extendPrompt, setExtendPrompt] = useState("");
|
|
63
|
+
const [previewDims, setPreviewDims] = useState(null);
|
|
64
|
+
const [previewUri, setPreviewUri] = useState(null);
|
|
65
|
+
const reframeOpen = tool === "reframe";
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
if (!reframeOpen || !kind) return void 0;
|
|
68
|
+
let cancelled = false;
|
|
69
|
+
if (kind === "image") {
|
|
70
|
+
setPreviewUri(item.src);
|
|
71
|
+
Image.getSize(item.src, (width, height) => {
|
|
72
|
+
if (!cancelled) setPreviewDims({
|
|
73
|
+
width,
|
|
74
|
+
height
|
|
75
|
+
});
|
|
76
|
+
}, () => {
|
|
77
|
+
if (!cancelled) setPreviewDims(dimsFromShape(item.width, item.height));
|
|
78
|
+
});
|
|
79
|
+
} else {
|
|
80
|
+
setPreviewDims(dimsFromShape(item.width, item.height));
|
|
81
|
+
setPreviewUri(null);
|
|
82
|
+
runAction == null ? void 0 : runAction("yantra-video-editing", "YANTRA_VIDEO_EDIT_THUMBNAIL", {
|
|
83
|
+
input_url: unwrapProxyUrl(item.src),
|
|
84
|
+
time_secs: 1
|
|
85
|
+
}).then((result) => {
|
|
86
|
+
if (!cancelled) setPreviewUri(resultUrl(result, "YANTRA_VIDEO_EDIT_THUMBNAIL") || null);
|
|
87
|
+
}).catch(() => void 0);
|
|
88
|
+
}
|
|
89
|
+
return () => {
|
|
90
|
+
cancelled = true;
|
|
91
|
+
};
|
|
92
|
+
}, [reframeOpen, kind, item.src, item.width, item.height, runAction]);
|
|
63
93
|
if (!kind || tools.length === 0) {
|
|
64
94
|
return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: "Select an image or video on the board to edit." });
|
|
65
95
|
}
|
|
@@ -168,6 +198,12 @@ function CanvasEditToolsPanel({
|
|
|
168
198
|
fit === "crop" ? /* @__PURE__ */ jsx(View, { style: styles.chips, children: FOCUS_STOPS.map((f) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setFocus(f), style: ({
|
|
169
199
|
pressed
|
|
170
200
|
}) => [styles.chip, focus === f && styles.chipOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, focus === f && styles.chipLabelOn], children: f === 0 ? "Start" : f === 1 ? "End" : "Centre" }) }, f)) }) : null,
|
|
201
|
+
/* @__PURE__ */ jsx(ReframePreview, { kind, uri: previewUri, src: previewDims, choice: {
|
|
202
|
+
format: reframeFormat,
|
|
203
|
+
fit,
|
|
204
|
+
bars,
|
|
205
|
+
focus
|
|
206
|
+
} }),
|
|
171
207
|
pendingStillNote ? /* @__PURE__ */ jsx(Text, { style: styles.blurb, children: pendingStillNote }) : null
|
|
172
208
|
] }) : null,
|
|
173
209
|
tool === "remove-background" ? /* @__PURE__ */ jsxs(View, { style: styles.opts, children: [
|