@adminide-stack/yantra-mobile 12.0.128 → 12.0.129-alpha.1
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":"CanvasExperience.js","sources":["../../../src/features/canvas/CanvasExperience.tsx"],"sourcesContent":["/**\n * The canvas experience: boards + viewer, as one federated unit.\n *\n * This lives on the REMOTE side of the microfrontend on purpose. If the host\n * owned the fetch, every change to how a canvas is read - a new field, a\n * different empty state, a fix to board ordering - would need an App Store\n * build. Here it ships with `cdecli surfaces deploy canvas`, the same way the\n * renderer does.\n *\n * The host injects only what it alone can know: the session token and the index\n * endpoint for its environment. Everything downstream of that - fetching,\n * choosing a board, loading/error/empty states - is the remote's business, and\n * this file deliberately imports nothing from the app (no Apollo, no\n * navigation, no config): only React Native, `fetch`, and its sibling modules.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Image as RNImage, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid } from './CanvasBoardsGrid';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n proxiedMediaUrl,\n unwrapProxyUrl,\n} from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { startExportTask } from './videoEditor/exportTask';\nimport { ExportTaskCard, useCanvasTask } from './videoEditor/ExportTaskCard';\nimport { dismissTask as dismissCanvasTask, markTaskDelivered } from './canvasTasks';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { applySrcRenewals, useBoardMediaRefresh, useMediaSigning } from './useBoardMediaRefresh';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n mediaItemsFor,\n mediaKey,\n newBoardId,\n reconcileDismissed,\n type CanvasItem,\n type MediaPlacement,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { visibleCreateGroups, type CreateAction } from './createTiles';\nimport { parseCreateTileLink, parseDesignLink, parseMediaLink, type MediaLink } from './deepLinks';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience } from '../design/DesignExperience';\nimport type { DesignKind } from '../design/designCore';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\nimport { CanvasThemeProvider, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, ActionButton, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\nexport interface CanvasExperienceProps {\n /** Bearer for the surface index. Absent -> the unauthenticated notice. */\n token?: string | null;\n /** Index endpoint for this environment. */\n indexUrl: string;\n /** Open this board when it exists; otherwise the newest opens. */\n channelId?: string;\n /** Render this board and skip the network entirely (deep links, tests). */\n board?: PersistedCanvasState | null;\n /** Host-side session problem, shown instead of attempting a doomed read. */\n sessionError?: string | null;\n /** Sign in again now, from the session-error screen. */\n onRetrySession?: () => void;\n /** Agent-backed item actions (Edit Image, Create Video) - raised by the\n * viewer toolbar. Create Video / Edit Video / Clips are handled HERE\n * (same connectors as web canvas) and only forwarded if a host overrides. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Hand a finished editor timeline to the host's renderer (yantra-video). */\n onExportVideo?: (spec: VideoExportSpec) => void;\n /** Device-library picker the host provides (native capability).\n * `onStatus` is the web upload toast: `Uploading IMG_0003.jpeg…`. */\n onPickLocalMedia?: (onStatus?: (message: string) => void, source?: MediaPickSource) => Promise<CanvasItem[]>;\n /** Host uploader for phone-local URIs (file:// -> store URL) so board\n * items persist as fetchable media, like the web's uploadFileToStore. */\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Host microphone (expo-audio) - the Voice tab's record flows. */\n audioRecorder?: AudioRecorderSeam;\n /** Connector runner (auth + transport live host-side). Present -> the\n * native image/audio editors open for edit actions; absent -> those\n * actions forward to onItemAction like before. */\n runMediaAction?: RunMediaAction;\n /** Host Apollo client — templates gallery is cache-first against typePolicies. */\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n /**\n * Deep links (web `?create=`, `?media=&kind=&name=`, `?design=`, `?artifact=`).\n * Each runs once on mount, after the board list has settled.\n */\n /** A Create tile id (`video-editor`, `clips`, `logo`): runs that tile. */\n createTile?: string;\n /** Another surface's \"Edit in Canvas\": placed on a new board, its editor opened. */\n media?: { src: string; kind?: string; name?: string };\n /** Open this saved design in the design studio. */\n designId?: string;\n /** A design template link: native has no design catalog, so a blank design opens. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n /**\n * Host-provided theme (the app's own light/dark). Used while the canvas\n * theme toggle is on \"system\"; absent -> the canvas follows the OS.\n */\n isDark?: boolean;\n}\n\nfunction untitledBoard(channelId?: string): CanvasBoardSummary {\n const id = channelId?.trim() || newBoardId();\n return {\n channelId: id,\n title: '',\n savedAt: Date.now(),\n itemCount: 0,\n board: emptyBoardState(),\n };\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n/** How long a media link waits for its picture's size before taking an upload's footprint. */\nconst MEDIA_LINK_MEASURE_MS = 1500;\n\nconst boardMediaKey = (src: string): string => mediaKey(src, unwrapProxyUrl);\n\ntype PlaceOpts = { name?: string; aspect?: string; size?: { width: number; height: number } };\n\n/** Generated/linked media as a placement: its requested ratio (or measured size) shapes the tile. */\nfunction placementFor(type: CanvasItem['type'], src: string, opts?: PlaceOpts): MediaPlacement {\n const maxEdge = type === 'video' ? 640 : 600;\n const size = opts?.aspect ? dimsForAspect(opts.aspect, maxEdge) : opts?.size;\n return {\n type,\n src,\n label: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n ...(size ? { size } : {}),\n };\n}\n\n/** A device pick: the host reports its pixel size, which only shapes the tile. */\nfunction placementForPicked(item: CanvasItem): MediaPlacement {\n return {\n type: item.type,\n src: item.src,\n ...(item.generatedAssetName ? { label: item.generatedAssetName } : {}),\n ...(item.width > 0 && item.height > 0 ? { size: { width: item.width, height: item.height } } : {}),\n ...(item.hasAudio === false ? { hasAudio: false } : {}),\n };\n}\n\n/** `next` from the viewer, with the tombstones its item edit implies. */\nfunction withTombstones(prev: PersistedCanvasState, next: PersistedCanvasState): PersistedCanvasState {\n const dismissed = reconcileDismissed(prev.items, next.items, prev.dismissed ?? [], boardMediaKey);\n const out: PersistedCanvasState = { ...next };\n if (dismissed.length > 0) out.dismissed = dismissed;\n else delete out.dismissed;\n return out;\n}\n\nfunction CanvasExperienceBody({\n token,\n indexUrl,\n channelId,\n board: explicitBoard,\n sessionError,\n onRetrySession,\n onItemAction,\n onExportVideo,\n onPickLocalMedia,\n uploadMedia,\n audioRecorder,\n runMediaAction,\n apolloClient,\n createTile,\n media,\n designId,\n designTemplateId,\n artifactId,\n testID,\n}: CanvasExperienceProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const isDark = theme.isDark;\n // Host seams win (they can refresh auth); on binaries that predate them\n // the remote builds its own from what it already holds, so the editors\n // work OTA without an app release.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n // Server-backed Tasks: point the Task API at this session before any child effect resumes a run.\n useMemo(() => configureServerTasks({ token, indexUrl }), [token, indexUrl]);\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n const cachedBoards =\n getCachedCanvasBoards(indexUrl) ?? (apolloClient ? readCachedCanvasBoards(apolloClient) : null);\n const [boards, setBoards] = useState<CanvasBoardSummary[]>(() => cachedBoards ?? []);\n /** Live boards for placement guesses outside a state updater. */\n const boardsRef = useRef(boards);\n boardsRef.current = boards;\n const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);\n const [error, setError] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(false);\n const [gridAgentOpen, setGridAgentOpen] = useState(false);\n const [generation, setGeneration] = useState(0);\n const [mediaBusy, setMediaBusy] = useState(false);\n const [uploadStatus, setUploadStatus] = useState<string | null>(null);\n const lastSavedByIdRef = useRef<Record<string, string>>({});\n /** The first index read has landed (or failed): deep links wait for it, so the\n * fetch's wholesale `setBoards` cannot drop a board a link just made. */\n const [boardsSettled, setBoardsSettled] = useState(false);\n\n const skipFetch = Boolean(explicitBoard);\n\n // The Tasks sheet lives in the dock; what it cannot learn from its props (the open board, how to open another).\n const tasksBoardsRef = useRef(boards);\n tasksBoardsRef.current = boards;\n useEffect(() => {\n setCanvasTasksHost({\n openBoardId: selectedId,\n openBoard: (id) => setSelectedId(id),\n boardLabel: (id) => tasksBoardsRef.current.find((entry) => entry.channelId === id)?.title || undefined,\n runAction: effectiveRunAction,\n });\n }, [selectedId, effectiveRunAction]);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n setBoardsSettled(true);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n setBoardsSettled(true);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n // Presigned link upkeep (web pullBoard): renew an opened board's expiring\n // links so the auto-save below persists fresh URLs.\n useMediaSigning(token, indexUrl);\n useBoardMediaRefresh(selected?.channelId, selected?.board.items, effectiveRunAction, (boardId, renewals) =>\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== boardId) return entry;\n const items = applySrcRenewals(entry.board.items, renewals);\n return items === entry.board.items ? entry : { ...entry, board: { ...entry.board, items } };\n }),\n ),\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Match web studios: docs → design page, carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n const kind = studio === 'flyers' ? 'postcard' : studio === 'carousel' ? 'carousel' : 'design';\n setDesignEntry({ kind });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n // A delete must leave a tombstone, or web's channel\n // drain puts the media straight back (web #530).\n board: withTombstones(entry.board, board),\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n // Web `mediaItemsFor`: fanned across free grid slots, each\n // tile in the picked media's own shape (not stacked at 100,100).\n const placed = mediaItemsFor(entry.board.items, picked.map(placementForPicked));\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({ ...item, ...placed[i], id: item.id || placed[i].id })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(\n selected.board.items,\n selected.board.zoom,\n selected.title,\n selected.board.dismissed,\n );\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** The durable export (canvasTasks kind 'export') the editor overlay is following. */\n const [exportTaskId, setExportTaskId] = useState<string | null>(null);\n const exportTask = useCanvasTask(exportTaskId);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<{ kind: DesignKind } | { channelId: string } | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, generation]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const placement = placementFor(type, src, opts);\n const target = boardsRef.current.find((entry) => entry.channelId === selectedId) ?? boardsRef.current[0];\n // Best guess for the caller; the updater re-places against the live items.\n const item: CanvasItem = mediaItemsFor(target?.board.items ?? [], [placement])[0];\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const [placed] = mediaItemsFor(entry.board.items, [{ ...placement, id: item.id }]);\n const items = [...entry.board.items, placed];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = mediaItemsFor([], [placementFor(type, src, opts)])[0];\n const entry = untitledBoard();\n const items = [item];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n // New media: the old short link would point at the old object.\n item.id === itemId ? { ...item, src, share: undefined, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n // Durable lane: compiled timeline (transitions, segments, scene\n // layers) rendered detached on the connector, followed as a task\n // that survives the editor closing and an app relaunch. It falls\n // back to the client chain itself when SUBMIT is unavailable.\n void startExportTask(runAction, {\n spec,\n boardId: selectedId ?? '',\n brief: editorSeed?.projectTitle || selected?.board.title || selected?.title || 'Video export',\n upload,\n })\n .then((id) => setExportTaskId(id))\n .catch(() => {\n setExporting({ stage: 'Starting render' });\n return renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo, selectedId, editorSeed, selected]);\n\n // A finished durable export lands on the canvas like the old inline one.\n useEffect(() => {\n if (!exportTask || exportTask.state !== 'succeeded' || exportTask.delivered || !exportTask.result?.url) return;\n markTaskDelivered(exportTask.id);\n addRenderedVideo(exportTask.result.url);\n setEditorSeed(null);\n setExportTaskId(null);\n }, [exportTask, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n /** Home's Photo / Audio editor: pick the file first, then edit it on a fresh board (web opens its upload screen). */\n const pickThenEdit = useCallback(\n async (kind: 'image' | 'audio') => {\n if (!onPickLocalMedia) return;\n try {\n const picked = await onPickLocalMedia(undefined, kind === 'image' ? 'library' : 'file');\n const first = picked.find((p) => p.type === kind);\n if (!first) return;\n const item = openFreshBoardWithItem(kind, first.src, {\n name: first.generatedAssetName,\n ...(first.width > 0 && first.height > 0\n ? { size: { width: first.width, height: first.height } }\n : {}),\n });\n setMediaEdit({ kind, item });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] pick for editor failed:', err);\n }\n }\n },\n [onPickLocalMedia, openFreshBoardWithItem],\n );\n\n /** Tiles home can run here: the photo/audio editors need a picker and a connector runner. */\n const canRunCreate = useCallback(\n (action: CreateAction) =>\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction),\n [onPickLocalMedia, effectiveRunAction],\n );\n const createGroups = useMemo(() => visibleCreateGroups(canRunCreate), [canRunCreate]);\n\n /**\n * Screen one's Create tile (web `actFromHome`): a design kind opens the\n * design studio; a generator or studio opens on a fresh board, so what it\n * makes lands there and closing it leaves a canvas, not someone's old board.\n */\n const handleCreate = useCallback(\n (action: CreateAction) => {\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Native slides are the design studio's deck (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ kind: 'design' });\n return;\n }\n handleNewCanvas();\n if (action.mode === 'clips') setVideoClips('url');\n else setGenerator({ mode: action.mode });\n return;\n }\n if (action.studio === 'image' || action.studio === 'audio') {\n void pickThenEdit(action.studio);\n return;\n }\n handleNewCanvas();\n switch (action.studio) {\n case 'record':\n setShowRecorder(true);\n return;\n case 'ai-cut':\n handleDockStudio('agent');\n return;\n case 'set':\n handleDockStudio('set3d');\n return;\n default:\n handleDockStudio(action.studio);\n }\n },\n [handleNewCanvas, handleDockStudio, pickThenEdit],\n );\n\n /** A media link (web `?media=`): a new board holding it, its editor open. */\n const openMediaLink = useCallback(\n async (link: MediaLink) => {\n const size =\n link.kind === 'image'\n ? await new Promise<{ width: number; height: number } | undefined>((resolve) => {\n // Whichever comes first, the size or the deadline, decides the tile.\n const timer = setTimeout(() => resolve(undefined), MEDIA_LINK_MEASURE_MS);\n RNImage.getSize(\n link.src,\n (width, height) => {\n clearTimeout(timer);\n resolve(width > 0 && height > 0 ? { width, height } : undefined);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n })\n : undefined;\n const item = openFreshBoardWithItem(link.kind, link.src, {\n name:\n link.name ?? link.fileName?.replace(/\\.[^.]+$/, '') ?? (link.kind === 'image' ? 'Image' : 'Video'),\n ...(size ? { size } : {}),\n });\n if (link.kind === 'video') setEditorSeed({ itemId: item.id });\n else if (effectiveRunAction) setMediaEdit({ kind: 'image', item });\n },\n [openFreshBoardWithItem, effectiveRunAction],\n );\n\n // Deep links run once. A design opens straight away; media and Create\n // tiles wait for the first index read, whose wholesale `setBoards` would\n // otherwise drop the board they make.\n const designLinkRanRef = useRef(false);\n useEffect(() => {\n if (designLinkRanRef.current || skipFetch) return;\n designLinkRanRef.current = true;\n const entry = parseDesignLink({ designId, designTemplateId, artifactId });\n if (entry) setDesignEntry(entry);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const boardLinkRanRef = useRef(false);\n useEffect(() => {\n if (boardLinkRanRef.current || skipFetch || !boardsSettled) return;\n boardLinkRanRef.current = true;\n if (parseDesignLink({ designId, designTemplateId, artifactId })) return;\n const mediaLink = parseMediaLink(media);\n if (mediaLink) {\n void openMediaLink(mediaLink);\n return;\n }\n const action = parseCreateTileLink(createTile);\n if (action) handleCreate(action);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardsSettled, skipFetch]);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={generator.item}\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n token={token}\n indexUrl={indexUrl}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type === 'video' ? 'video' : 'image', item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exportTask ? (\n <View style={styles.exportOverlay}>\n <ExportTaskCard\n task={exportTask}\n onDismiss={() => {\n dismissCanvasTask(exportTask.id);\n setExportTaskId(null);\n }}\n onBackground={() => setExportTaskId(null)}\n />\n </View>\n ) : exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={({ pressed }) => [styles.exportDismiss, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color={theme.edInk} />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(designChannelId) => setDesignEntry({ channelId: designChannelId })}\n onAskAgent={handleAskAgentFromGrid}\n createGroups={createGroups}\n onCreate={handleCreate}\n runAction={effectiveRunAction}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n });\n }}\n />\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPickDeviceStill={\n onPickLocalMedia\n ? async () => {\n // A generator reference slot: the connector fetches it, so it must be hosted.\n const picked = await onPickLocalMedia(undefined, 'library');\n const first = picked.find((p) => p.type === 'image');\n if (!first) return null;\n return /^https?:/i.test(first.src) || !effectiveUploadMedia\n ? first.src\n : effectiveUploadMedia(first.src);\n }\n : undefined\n }\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ kind: 'design' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n shareLinks={token && indexUrl ? { token, indexUrl } : undefined}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color={theme.info} /> : null}\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {uploadStatus}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction Notice({\n isDark,\n title,\n detail,\n fine,\n primaryLabel,\n onPrimary,\n onRetry,\n retryLabel = 'Try again',\n}: {\n isDark: boolean;\n title: string;\n detail: string;\n /** Session/context fine print - the who-and-where behind the state. */\n fine?: string;\n primaryLabel?: string;\n onPrimary?: () => void;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]} accessibilityRole=\"header\">\n {title}\n </Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary || onRetry ? (\n <View style={styles.noticeActions}>\n {onPrimary ? <ActionButton label={primaryLabel ?? 'Create'} onPress={onPrimary} /> : null}\n {onRetry ? (\n <ActionButton\n label={retryLabel}\n onPress={onRetry}\n variant={onPrimary ? 'secondary' : 'primary'}\n />\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\n/**\n * The exposed experience: mounts the canvas theme (OS / host mode / persisted\n * toggle) so every screen below can call useCanvasTheme().\n */\nexport function CanvasExperience(props: CanvasExperienceProps) {\n const hostMode = props.isDark == null ? null : props.isDark ? 'dark' : 'light';\n return (\n <CanvasThemeProvider mode={hostMode}>\n <CanvasExperienceBody {...props} />\n </CanvasThemeProvider>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n noticeActions: {\n marginTop: SPACE.xl,\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: SPACE.sm,\n },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: SPACE.md,\n right: SPACE.lg,\n zIndex: 4,\n },\n center: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.xxl,\n paddingVertical: SPACE.xl,\n backgroundColor: theme.background,\n },\n title: {\n ...TYPE.title,\n fontSize: 19,\n lineHeight: 24,\n color: theme.foreground,\n textAlign: 'center',\n marginBottom: SPACE.sm,\n },\n detail: { ...TYPE.body, color: theme.mutedForeground, textAlign: 'center', maxWidth: 320 },\n fine: {\n ...TYPE.caption,\n fontWeight: '400',\n marginTop: SPACE.md,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n spaced: { marginTop: SPACE.md - 2 },\n textLight: { color: theme.foreground },\n textMuted: { color: theme.mutedForeground },\n backPill: {\n position: 'absolute',\n top: SPACE.md,\n left: SPACE.md,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm - 2,\n maxWidth: 220,\n minHeight: 40,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n backLabel: { ...TYPE.label, color: theme.foreground },\n uploadToast: {\n position: 'absolute',\n top: 60,\n left: SPACE.lg,\n right: SPACE.lg,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md - 2,\n minHeight: 48,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.isDark ? theme.card : theme.surface,\n borderWidth: theme.isDark ? StyleSheet.hairlineWidth : 0,\n borderColor: theme.border,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.4 : 0.12,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: 6 },\n elevation: 8,\n },\n uploadToastText: { ...TYPE.label, fontSize: 14, flex: 1, color: theme.foreground },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: SPACE.xxl,\n },\n exportCard: {\n minWidth: 240,\n maxWidth: 320,\n alignItems: 'center',\n gap: SPACE.md,\n backgroundColor: theme.edPanel,\n borderRadius: RADIUS.xl,\n paddingVertical: SPACE.xl,\n paddingHorizontal: SPACE.xl,\n },\n exportStage: { ...TYPE.body, fontSize: 14, color: theme.edInk2, textAlign: 'center' },\n exportError: { ...TYPE.title, color: theme.edDanger },\n exportDismiss: {\n marginTop: SPACE.xs,\n minHeight: 40,\n justifyContent: 'center',\n backgroundColor: theme.edRaisedHi,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.lg + 2,\n },\n exportDismissLabel: { ...TYPE.label, color: theme.edInk },\n }),\n);\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask"],"mappings":";;;;;;;;;;;;;;;;;;;AAqHA,SAAS,cAAc,SAAwC,EAAA;AAC7D,EAAM,MAAA,EAAA,GAAA,CAAK,SAAW,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,IAAA,EAAA,KAAU,UAAW,EAAA;AAC3C,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,EAAA;AAAA,IACX,KAAO,EAAA,EAAA;AAAA,IACP,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,IAClB,SAAW,EAAA,CAAA;AAAA,IACX,OAAO,eAAgB;AAAA,GACzB;AACF;AACA,MAAM,gBAAmB,GAAA,GAAA;AAEzB,MAAM,qBAAwB,GAAA,IAAA;AAC9B,MAAM,aAAgB,GAAA,CAAC,GAAwB,KAAA,QAAA,CAAS,KAAK,cAAc,CAAA;AAW3E,SAAS,YAAA,CAAa,IAA0B,EAAA,GAAA,EAAa,IAAkC,EAAA;AA7I/F,EAAA,IAAA,EAAA;AA8IE,EAAM,MAAA,OAAA,GAAU,IAAS,KAAA,OAAA,GAAU,GAAM,GAAA,GAAA;AACzC,EAAM,MAAA,IAAA,GAAA,CAAO,6BAAM,MAAS,IAAA,aAAA,CAAc,KAAK,MAAQ,EAAA,OAAO,IAAI,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,IAAA;AACxE,EAAO,OAAA,cAAA,CAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAO,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,IAAA,KAAN,IAAe,GAAA,EAAA,GAAA,IAAA,KAAS,UAAU,cAAiB,GAAA;AAAA,GAAA,EACtD,IAAO,GAAA;AAAA,IACT;AAAA,MACE,EAAC,CAAA;AAET;AAGA,SAAS,mBAAmB,IAAkC,EAAA;AAC5D,EAAO,OAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA;AAAA,IACL,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,KAAK,IAAK,CAAA;AAAA,GAAA,EACN,KAAK,kBAAqB,GAAA;AAAA,IAC5B,OAAO,IAAK,CAAA;AAAA,GACd,GAAI,EACA,CAAA,EAAA,IAAA,CAAK,QAAQ,CAAK,IAAA,IAAA,CAAK,SAAS,CAAI,GAAA;AAAA,IACtC,IAAM,EAAA;AAAA,MACJ,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,QAAQ,IAAK,CAAA;AAAA;AACf,GACE,GAAA,EACA,CAAA,EAAA,IAAA,CAAK,aAAa,KAAQ,GAAA;AAAA,IAC5B,QAAU,EAAA;AAAA,MACR,EAAC,CAAA;AAET;AAGA,SAAS,cAAA,CAAe,MAA4B,IAAkD,EAAA;AA/KtG,EAAA,IAAA,EAAA;AAgLE,EAAM,MAAA,SAAA,GAAY,kBAAmB,CAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,KAAO,EAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,KAAA,IAAA,GAAA,EAAA,GAAkB,EAAC,EAAG,aAAa,CAAA;AAChG,EAAA,MAAM,MAA4B,cAC7B,CAAA,EAAA,EAAA,IAAA,CAAA;AAEL,EAAA,IAAI,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,SAAY,GAAA,SAAA;AAAA,cAAsB,GAAI,CAAA,SAAA;AACpE,EAAO,OAAA,GAAA;AACT;AACA,SAAS,oBAAqB,CAAA;AAAA,EAC5B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAO,EAAA,aAAA;AAAA,EACP,YAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAA0B,EAAA;AA3M1B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA4ME,EAAA,MAAM,QAAQ,cAAe,EAAA;AAC7B,EAAM,MAAA,MAAA,GAAS,QAAQ,MAAM,UAAA,CAAW,KAAK,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AACvD,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AAIrB,EAAA,MAAM,kBAAqB,GAAA,OAAA,CAAoC,MAAM,cAAA,IAAA,IAAA,GAAA,cAAA,GAAmB,SAAS,QAAW,GAAA,qBAAA,CAAsB,KAAO,EAAA,QAAQ,IAAI,MAAY,EAAA,CAAC,cAAgB,EAAA,KAAA,EAAO,QAAQ,CAAC,CAAA;AAElM,EAAA,OAAA,CAAQ,MAAM,oBAAqB,CAAA;AAAA,IACjC,KAAA;AAAA,IACA;AAAA,GACD,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AACrB,EAAA,MAAM,oBAAuB,GAAA,OAAA,CAAQ,MAAM,WAAA,IAAA,IAAA,GAAA,WAAA,GAAgB,SAAS,QAAW,GAAA,uBAAA,CAAwB,KAAO,EAAA,QAAQ,IAAI,MAAY,EAAA,CAAC,WAAa,EAAA,KAAA,EAAO,QAAQ,CAAC,CAAA;AACpK,EAAM,MAAA,YAAA,GAAA,CAAe,2BAAsB,QAAQ,CAAA,KAA9B,YAAoC,YAAe,GAAA,sBAAA,CAAuB,YAAY,CAAI,GAAA,IAAA;AAC/G,EAAM,MAAA,CAAC,QAAQ,SAAS,CAAA,GAAI,SAA+B,MAAM,YAAA,IAAA,IAAA,GAAA,YAAA,GAAgB,EAAE,CAAA;AAEnF,EAAM,MAAA,SAAA,GAAY,OAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAU,GAAA,MAAA;AACpB,EAAM,MAAA,CAAC,SAAS,UAAU,CAAA,GAAI,SAAS,CAAC,aAAA,IAAiB,gBAAgB,IAAI,CAAA;AAC7E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAM,MAAA,gBAAA,GAAmB,MAA+B,CAAA,EAAE,CAAA;AAG1D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAM,MAAA,SAAA,GAAY,QAAQ,aAAa,CAAA;AAGvC,EAAM,MAAA,cAAA,GAAiB,OAAO,MAAM,CAAA;AACpC,EAAA,cAAA,CAAe,OAAU,GAAA,MAAA;AACzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAmB,kBAAA,CAAA;AAAA,MACjB,WAAa,EAAA,UAAA;AAAA,MACb,SAAA,EAAW,CAAM,EAAA,KAAA,aAAA,CAAc,EAAE,CAAA;AAAA,MACjC,YAAY,CAAG,EAAA,KAAA;AAnPrB,QAAAA,IAAAA,GAAAA;AAmPwB,QAAAA,OAAAA,CAAAA,CAAAA,GAAAA,GAAA,cAAe,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,SAAA,KAAc,EAAE,CAAA,KAA3D,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAA8D,KAAS,KAAA,MAAA;AAAA,OAAA;AAAA,MACzF,SAAW,EAAA;AAAA,KACZ,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,kBAAkB,CAAC,CAAA;AACnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,CAAC,QAAA,EAAiB,OAAA,MAAA;AACnC,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAA,KAAK,2BAA4B,CAAA,QAAQ,CAAE,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA;AACtD,MAAI,IAAA,SAAA,IAAa,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAQ,CAAA,EAAA;AAChC,MAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,OAAO,IAAI,CAAA;AAC/C,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,SAAS,CAAC,CAAA;AACxB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAkB,OAAA,MAAA;AACtB,IAAA,IAAI,CAAC,KAAO,EAAA;AAGV,MAAI,IAAA,qBAAA,CAAsB,QAAQ,CAAA,IAAK,IAAM,EAAA;AAC3C,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA;AAEjB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAO,OAAA,MAAA;AAAA;AAET,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAM,MAAA,QAAA,GAAW,sBAAsB,QAAQ,CAAA,IAAK,QAAQ,sBAAuB,CAAA,YAAY,EAAE,MAAS,GAAA,CAAA;AAC1G,IAAA,CAAC,YAAY;AAGX,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA;AAEf,MAAM,MAAA,MAAA,GAAS,MAAM,mBAAoB,CAAA;AAAA,QACvC,GAAK,EAAA,QAAA;AAAA,QACL,KAAA;AAAA,QACA,QAAQ,UAAW,CAAA;AAAA,OACpB,CAAA;AACD,MAAA,IAAI,SAAW,EAAA;AACf,MAAA,IAAI,OAAS,EAAA;AAIX,QAAA,OAAA,CAAQ,IAAI,4BAA8B,EAAA,IAAA,CAAK,UAAU,MAAO,CAAA,MAAA,CAAO,IAAI,CAAM,CAAA,MAAA;AAAA,UAC/E,WAAW,CAAE,CAAA,SAAA;AAAA,UACb,OAAO,CAAE,CAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA,CAAE,KAAM,CAAA,KAAA,CAAM,IAAI,CAAM,CAAA,MAAA;AAAA,YAC7B,MAAM,CAAE,CAAA,IAAA;AAAA,YACR,GAAG,CAAE,CAAA,CAAA;AAAA,YACL,GAAG,CAAE,CAAA,CAAA;AAAA,YACL,GAAG,CAAE,CAAA,KAAA;AAAA,YACL,GAAG,CAAE,CAAA,MAAA;AAAA,YACL,GAAG,CAAE,CAAA,MAAA;AAAA,YACL,KAAK,CAAG,EAAA,CAAA,CAAE,IAAI,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA;AAAA,WAC1B,CAAA;AAAA,SACJ,CAAE,CAAC,CAAC,CAAA;AAAA;AAEN,MAAA,IAAI,OAAO,KAAO,EAAA;AAEhB,QAAA,IAAI,CAAC,QAAA,EAAmB,QAAA,CAAA,MAAA,CAAO,KAAK,CAAA;AACpC,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,QAAA;AAAA;AAEF,MAAA,gBAAA,CAAiB,OAAU,GAAA,MAAA,CAAO,WAAY,CAAA,MAAA,CAAO,OAAO,GAAI,CAAA,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,WAAW,cAAe,CAAA,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA;AACxH,MAAA,SAAA,CAAU,OAAO,MAAM,CAAA;AACvB,MAAwB,uBAAA,CAAA,YAAA,EAAc,OAAO,MAAM,CAAA;AACnD,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,KACpB,GAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AACZ,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA,KACnB;AAAA,KACC,CAAC,QAAA,EAAU,OAAO,SAAW,EAAA,UAAA,EAAY,YAAY,CAAC,CAAA;AACzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,OAAW,IAAA,CAAC,QAAU,EAAA;AACvC,IAAA,2BAAA,CAA4B,UAAU,MAAM,CAAA;AAAA,KAC3C,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAA,EAAS,SAAS,CAAC,CAAA;AAIzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAc,IAAA,CAAC,SAAa,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACrD,IAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAS,KAAA,KAAA,KAAA,CAAM,cAAc,SAAS,CAAA;AAChE,IAAI,IAAA,KAAA,EAAqB,aAAA,CAAA,KAAA,CAAM,SAAS,CAAA;AAAA,GACvC,EAAA,CAAC,MAAQ,EAAA,SAAA,EAAW,UAAU,CAAC,CAAA;AAClC,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,OAAO,IAAK,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,SAAA,KAAc,UAAU,CAAI,GAAA,MAAA,EAAW,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAIlI,EAAA,eAAA,CAAgB,OAAO,QAAQ,CAAA;AAC/B,EAAA,oBAAA,CAAqB,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,SAAA,EAAW,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,KAAA,CAAM,KAAO,EAAA,kBAAA,EAAoB,CAAC,OAAA,EAAS,QAAa,KAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AAC9I,IAAI,IAAA,KAAA,CAAM,SAAc,KAAA,OAAA,EAAgB,OAAA,KAAA;AACxC,IAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,KAAM,CAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1D,IAAA,OAAO,UAAU,KAAM,CAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,GAAQ,iCACxC,KADwC,CAAA,EAAA;AAAA,MAE3C,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,QAEL;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACD,CAAC,CAAC,CAAA;AAGH,EAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,CAAC,KAAsD,KAAA;AACvF,IAAI,IAAA,CAAC,UAAiB,OAAA,KAAA;AACtB,IAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,MAEL,KAAO,EAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAI,CAAQ,IAAA,KAAA,IAAA,CAAK,IAAS,KAAA,OAAA,IAAW,IAAK,CAAA,IAAA,KAAS,OAAU,GAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC3E,IAD2E,CAAA,EAAA;AAAA,QAE9E,GAAK,EAAA,eAAA,CAAgB,QAAU,EAAA,IAAA,CAAK,GAAG;AAAA,WACrC,IAAI;AAAA,KACV,CAAA;AAAA,GACF,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAM,MAAA,gBAAA,GAAmB,WAAY,CAAA,CAAC,MAAuB,KAAA;AAC3D,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,cAAgB,EAAA;AAAA,OACjB,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,QAAU,EAAA;AACvB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA;AAAA;AAIF,IAAA,MAAM,OAAO,MAAW,KAAA,QAAA,GAAW,UAAa,GAAA,MAAA,KAAW,aAAa,UAAa,GAAA,QAAA;AACrF,IAAe,cAAA,CAAA;AAAA,MACb;AAAA,KACD,CAAA;AAAA,GACH,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,MAAA,GAAS,YAAY,MAAM,aAAA,CAAc,OAAK,CAAI,GAAA,CAAC,CAAG,EAAA,EAAE,CAAA;AAC9D,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,CAAC,KAAgC,KAAA;AACrE,IAAU,SAAA,CAAA,CAAA,IAAA,KAAQ,KAAK,GAAI,CAAA,CAAA,KAAA,KAAS,MAAM,SAAc,KAAA,UAAA,GAAa,iCAChE,KADgE,CAAA,EAAA;AAAA;AAAA;AAAA,MAInE,KAAO,EAAA,cAAA,CAAe,KAAM,CAAA,KAAA,EAAO,KAAK,CAAA;AAAA,MACxC,KAAA,EAAO,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,MAC5B,SAAA,EAAW,MAAM,KAAM,CAAA,MAAA;AAAA,MACvB,SAAS,KAAM,CAAA;AAAA,KACjB,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,GACZ,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAM,MAAA,eAAA,GAAkB,WAAY,CAAA,OAAO,MAA4B,KAAA;AACrE,IAAI,IAAA,CAAC,oBAAoB,SAAW,EAAA;AACpC,IAAI,IAAA;AACF,MAAM,MAAA,MAAA,GAAS,MAAM,gBAAA,CAAiB,CAAW,OAAA,KAAA;AAC/C,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,SACtB,MAAM,CAAA;AACT,MAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AACpB,MAAA,SAAA,CAAU,CAAQ,IAAA,KAAA;AAChB,QAAA,MAAM,OAAO,IAAK,CAAA,MAAA,GAAS,OAAO,CAAC,aAAA,CAAc,SAAS,CAAC,CAAA;AAC3D,QAAA,MAAM,QAAW,GAAA,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,IAAK,CAAA,CAAC,CAAE,CAAA,SAAA;AACvC,QAAO,OAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AACvB,UAAI,IAAA,KAAA,CAAM,SAAc,KAAA,QAAA,EAAiB,OAAA,KAAA;AAGzC,UAAM,MAAA,MAAA,GAAS,cAAc,KAAM,CAAA,KAAA,CAAM,OAAO,MAAO,CAAA,GAAA,CAAI,kBAAkB,CAAC,CAAA;AAC9E,UAAA,MAAM,QAAQ,CAAC,GAAG,KAAM,CAAA,KAAA,CAAM,OAAO,GAAG,MAAA,CAAO,GAAI,CAAA,CAAC,MAAM,CAAO,KAAA,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAC5D,IACA,CAAA,EAAA,MAAA,CAAO,CAAC,CAFoD,CAAA,EAAA;AAAA,YAG/D,EAAI,EAAA,IAAA,CAAK,EAAM,IAAA,MAAA,CAAO,CAAC,CAAE,CAAA;AAAA,YACzB,CAAC,CAAA;AACH,UAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,UAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,YAEL,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,YAChC,WAAW,KAAM,CAAA,MAAA;AAAA,YACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,cAEL,KAAA;AAAA,cACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,cAClB,OAAO,SAAU,CAAA;AAAA,aACnB;AAAA,WACF,CAAA;AAAA,SACD,CAAA;AAAA,OACF,CAAA;AAAA,aACM,GAAK,EAAA;AACZ,MAAA,IAAI,OAAS,EAAA;AAEX,QAAQ,OAAA,CAAA,IAAA,CAAK,yCAAyC,GAAG,CAAA;AAAA;AAC3D,KACA,SAAA;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA;AACtB,KACC,CAAC,gBAAA,EAAkB,UAAY,EAAA,SAAA,EAAW,SAAS,CAAC,CAAA;AACvD,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,IAAA,gBAAA,CAAiB,QAAQ,KAAM,CAAA,SAAS,CAAI,GAAA,cAAA,CAAe,MAAM,KAAK,CAAA;AACtE,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,CAAC,KAAO,EAAA,GAAG,IAAI,CAAC,CAAA;AAClC,IAAA,aAAA,CAAc,MAAM,SAAS,CAAA;AAAA,GAC/B,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,GACvB,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA;AAGlB,IAAA,SAAA,CAAU,UAAQ,IAAK,CAAA,MAAA,CAAO,WAAS,KAAM,CAAA,SAAA,GAAY,CAAC,CAAC,CAAA;AAAA,GAC7D,EAAG,EAAE,CAAA;AAIL,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,WAAW,CAAC,KAAA,IAAS,CAAC,QAAY,IAAA,CAAC,UAAiB,OAAA,MAAA;AACrE,IAAA,MAAM,KAAQ,GAAA,eAAA,CAAgB,QAAS,CAAA,KAAA,CAAM,KAAO,EAAA,QAAA,CAAS,KAAM,CAAA,IAAA,EAAM,QAAS,CAAA,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA;AACjH,IAAA,IAAI,KAAM,CAAA,KAAA,CAAM,MAAW,KAAA,CAAA,EAAU,OAAA,MAAA;AACrC,IAAM,MAAA,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,IAAA,IAAI,iBAAiB,OAAQ,CAAA,QAAA,CAAS,SAAS,CAAA,KAAM,KAAY,OAAA,MAAA;AACjE,IAAM,MAAA,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,KAAK,eAAgB,CAAA;AAAA,QACnB,GAAK,EAAA,QAAA;AAAA,QACL,KAAA;AAAA,QACA,WAAW,QAAS,CAAA,SAAA;AAAA,QACpB;AAAA,OACD,CAAE,CAAA,IAAA,CAAK,CAAM,EAAA,KAAA;AACZ,QAAA,IAAI,EAAI,EAAA,gBAAA,CAAiB,OAAQ,CAAA,QAAA,CAAS,SAAS,CAAI,GAAA,GAAA;AAAA,OACxD,CAAA;AAAA,OACA,gBAAgB,CAAA;AACnB,IAAO,OAAA,MAAM,aAAa,KAAK,CAAA;AAAA,KAC9B,CAAC,QAAA,EAAU,OAAO,QAAU,EAAA,OAAA,EAAS,SAAS,CAAC,CAAA;AAGlD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAM1B,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAIxB,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAKxB,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA4B,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAoC,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAA4B,IAAI,CAAA;AAElF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAGxB,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAM,MAAA,UAAA,GAAa,cAAc,YAAY,CAAA;AAE7C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAI5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAA6B,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA,CAAuB,EAAE,CAAA;AAInE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAa,CAAC,KAAA,IAAS,CAAC,QAAA,IAAY,aAAoB,OAAA,MAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAA,KAAK,cAAe,CAAA;AAAA,MAClB,GAAK,EAAA,QAAA;AAAA,MACL,KAAA;AAAA,MACA,QAAQ,UAAW,CAAA;AAAA,KACpB,CAAE,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AAChB,MAAA,UAAA,CAAW,OAAO,OAAO,CAAA;AAAA,KAC1B,CAAA;AACD,IAAO,OAAA,MAAM,WAAW,KAAM,EAAA;AAAA,KAC7B,CAAC,KAAA,EAAO,UAAU,SAAW,EAAA,WAAA,EAAa,UAAU,CAAC,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,kBAAA,IAAsB,CAAC,YAAc,EAAA;AAClD,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA;AAAA;AAEF,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAA,KAAK,gBAAgB,kBAAoB,EAAA;AAAA,MACvC,KAAO,EAAA;AAAA,KACN,EAAA;AAAA,MACD,MAAQ,EAAA,YAAA;AAAA,MACR,KAAA;AAAA,MACA;AAAA,KACD,CAAE,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA;AACd,MAAA,IAAI,CAAC,SAAA,EAA4B,gBAAA,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA,KAC5C,CAAE,CAAA,KAAA,CAAM,MAAM;AACb,MAAA,IAAI,CAAC,SAAA,EAA4B,gBAAA,CAAA,EAAE,CAAA;AAAA,KACpC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AAAA,KACd;AAAA,KACC,CAAC,YAAA,EAAc,kBAAoB,EAAA,QAAA,EAAU,KAAK,CAAC,CAAA;AAGtD,EAAA,MAAM,YAAe,GAAA,WAAA,CAAY,CAAC,IAAA,EAA0B,KAAa,IAAiC,KAAA;AArkB5G,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAskBI,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAA,MAAM,SAAY,GAAA,YAAA,CAAa,IAAM,EAAA,GAAA,EAAK,IAAI,CAAA;AAC9C,IAAA,MAAM,MAASD,GAAAA,CAAAA,GAAAA,GAAA,SAAU,CAAA,OAAA,CAAQ,KAAK,CAAS,KAAA,KAAA,KAAA,CAAM,SAAc,KAAA,UAAU,CAA9D,KAAA,IAAA,GAAAA,GAAmE,GAAA,SAAA,CAAU,QAAQ,CAAC,CAAA;AAErG,IAAA,MAAM,IAAmB,GAAA,aAAA,CAAA,CAAcC,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,MAAM,KAAd,KAAA,IAAA,GAAAA,GAAuB,GAAA,EAAI,EAAA,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AAChF,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA;AAChB,MAAA,MAAM,OAAO,IAAK,CAAA,MAAA,GAAS,OAAO,CAAC,aAAA,CAAc,SAAS,CAAC,CAAA;AAC3D,MAAA,MAAM,QAAW,GAAA,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,IAAK,CAAA,CAAC,CAAE,CAAA,SAAA;AACvC,MAAO,OAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AACvB,QAAI,IAAA,KAAA,CAAM,SAAc,KAAA,QAAA,EAAiB,OAAA,KAAA;AACzC,QAAM,MAAA,CAAC,MAAM,CAAI,GAAA,aAAA,CAAc,MAAM,KAAM,CAAA,KAAA,EAAO,CAAC,aAAA,CAAA,cAAA,CAAA,EAAA,EAC9C,SAD8C,CAAA,EAAA;AAAA,UAEjD,IAAI,IAAK,CAAA;AAAA,UACV,CAAC,CAAA;AACF,QAAA,MAAM,QAAQ,CAAC,GAAG,KAAM,CAAA,KAAA,CAAM,OAAO,MAAM,CAAA;AAC3C,QAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,QAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,UAEL,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,UAChC,WAAW,KAAM,CAAA,MAAA;AAAA,UACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,YAEL,KAAA;AAAA,YACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,YAClB,OAAO,SAAU,CAAA;AAAA,WACnB;AAAA,SACF,CAAA;AAAA,OACD,CAAA;AAAA,KACF,CAAA;AACD,IAAO,OAAA,IAAA;AAAA,GACN,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,QAAQ,CAAC,CAAA;AAGpC,EAAA,MAAM,sBAAyB,GAAA,WAAA,CAAY,CAAC,IAAA,EAA0B,KAAa,IAAiC,KAAA;AAClH,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAA,MAAM,IAAmB,GAAA,aAAA,CAAc,EAAC,EAAG,CAAC,YAAA,CAAa,IAAM,EAAA,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA,CAAE,CAAC,CAAA;AAC7E,IAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,IAAM,MAAA,KAAA,GAAQ,CAAC,IAAI,CAAA;AACnB,IAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,IAAM,MAAA,IAAA,GAA2B,iCAC5B,KAD4B,CAAA,EAAA;AAAA,MAE/B,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,MAChC,WAAW,KAAM,CAAA,MAAA;AAAA,MACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,QAEL,KAAA;AAAA,QACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,QAClB,OAAO,SAAU,CAAA;AAAA,OACnB;AAAA,KACF,CAAA;AACA,IAAA,gBAAA,CAAiB,QAAQ,KAAM,CAAA,SAAS,CAAI,GAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AACrE,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,CAAC,IAAM,EAAA,GAAG,IAAI,CAAC,CAAA;AACjC,IAAA,aAAA,CAAc,MAAM,SAAS,CAAA;AAC7B,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAA,MAAM,gBAAmB,GAAA,WAAA,CAAY,CAAC,GAAA,EAAa,IAG7C,KAAA,YAAA,CAAa,OAAS,EAAA,GAAA,EAAK,IAAI,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AACtD,EAAA,MAAM,YAAe,GAAA,WAAA,CAAY,CAAC,MAAA,EAAgB,KAAa,IAA8B,KAAA;AAC3F,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAU,SAAA,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,GAAA,CAAI,CAAS,KAAA,KAAA;AAClC,MAAI,IAAA,KAAA,CAAM,SAAc,KAAA,UAAA,EAAmB,OAAA,KAAA;AAC3C,MAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,IAAA;AAAA;AAAA,QAEpC,IAAK,CAAA,EAAA,KAAO,MAAS,GAAA,cAAA,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAChB,IADgB,CAAA,EAAA;AAAA,UAEnB,GAAA;AAAA,UACA,KAAO,EAAA;AAAA,SAAA,CAAA,EACH,IAAO,GAAA;AAAA,UACT;AAAA,SACF,GAAI,EACF,CAAA,GAAA;AAAA,OAAI,CAAA;AACR,MAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,MAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,QAEL,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,UAEL,KAAA;AAAA,UACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,UAClB,OAAO,SAAU,CAAA;AAAA,SACnB;AAAA,OACF,CAAA;AAAA,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,UAAY,EAAA,QAAQ,CAAC,CAAA;AAKzB,EAAM,MAAA,aAAA,GAAgB,OAAO,KAAK,CAAA;AAClC,EAAM,MAAA,iBAAA,GAAoB,QAAQ,MAAM;AAKtC,IAAI,IAAA,CAAC,oBAA2B,OAAA,aAAA;AAChC,IAAA,MAAM,SAAY,GAAA,kBAAA;AAClB,IAAA,MAAM,MAAS,GAAA,oBAAA;AACf,IAAA,OAAO,CAAC,IAA0B,KAAA;AAChC,MAAA,IAAI,cAAc,OAAS,EAAA;AAC3B,MAAA,aAAA,CAAc,OAAU,GAAA,IAAA;AAKxB,MAAA,KAAK,gBAAgB,SAAW,EAAA;AAAA,QAC9B,IAAA;AAAA,QACA,SAAS,UAAc,IAAA,IAAA,GAAA,UAAA,GAAA,EAAA;AAAA,QACvB,QAAO,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,YAAA,MAAgB,qCAAU,KAAM,CAAA,KAAA,CAAA,KAAS,qCAAU,KAAS,CAAA,IAAA,cAAA;AAAA,QAC/E;AAAA,OACD,EAAE,IAAK,CAAA,CAAA,EAAA,KAAM,gBAAgB,EAAE,CAAC,CAAE,CAAA,KAAA,CAAM,MAAM;AAC7C,QAAa,YAAA,CAAA;AAAA,UACX,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAO,OAAA,gBAAA,CAAiB,IAAM,EAAA,SAAA,EAAW,MAAQ,EAAA,CAAA,CAAA,KAAK,aAAa,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACjF,UAAA,gBAAA,CAAiB,GAAG,CAAA;AACpB,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,SAClB,CAAA;AAAA,OACF,CAAA,CAAE,KAAM,CAAA,CAAC,GAAiB,KAAA;AACzB,QAAa,YAAA,CAAA;AAAA,UACX,KAAO,EAAA,EAAA;AAAA,UACP,KAAA,EAAO,kBAAmB,CAAA,GAAA,EAAK,cAAc;AAAA,SAC9C,CAAA;AAAA,OACF,CAAE,CAAA,OAAA,CAAQ,MAAM;AACf,QAAA,aAAA,CAAc,OAAU,GAAA,KAAA;AAAA,OACzB,CAAA;AAAA,KACH;AAAA,GACF,EAAG,CAAC,aAAe,EAAA,kBAAA,EAAoB,sBAAsB,gBAAkB,EAAA,UAAA,EAAY,UAAY,EAAA,QAAQ,CAAC,CAAA;AAGhH,EAAA,SAAA,CAAU,MAAM;AA1sBlB,IAAAD,IAAAA,GAAAA;AA2sBI,IAAA,IAAI,CAAC,UAAA,IAAc,UAAW,CAAA,KAAA,KAAU,WAAe,IAAA,UAAA,CAAW,SAAa,IAAA,EAAA,CAACA,GAAA,GAAA,UAAA,CAAW,MAAX,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAmB,GAAK,CAAA,EAAA;AACxG,IAAA,iBAAA,CAAkB,WAAW,EAAE,CAAA;AAC/B,IAAiB,gBAAA,CAAA,UAAA,CAAW,OAAO,GAAG,CAAA;AACtC,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,GACnB,EAAA,CAAC,UAAY,EAAA,gBAAgB,CAAC,CAAA;AACjC,EAAA,MAAM,gBAAmB,GAAA,WAAA,CAAY,CAAC,MAAA,EAA0B,IAAqB,KAAA;AAMnF,IAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,eAAiB,EAAA;AAC9B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAS,EAAA;AAAA,OACV,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,aAAe,EAAA;AAC5B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA;AAAA;AAEF,IAAA,IAAA,CAAK,MAAW,KAAA,YAAA,IAAgB,MAAW,KAAA,WAAA,KAAgB,kBAAoB,EAAA;AAC7E,MAAa,YAAA,CAAA,cAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OAAA,EACI,WAAW,WAAc,GAAA;AAAA,QAC3B,UAAY,EAAA;AAAA,OACd,GAAI,EACL,CAAA,CAAA;AACD,MAAA;AAAA;AAEF,IAAI,IAAA,MAAA,KAAW,gBAAgB,kBAAoB,EAAA;AACjD,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,MAAQ,EAAA,IAAA,CAAA;AAAA,GACtB,EAAA,CAAC,YAAc,EAAA,kBAAkB,CAAC,CAAA;AACrC,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,OAAO,QAAmC,KAAA;AAC9E,IAAI,IAAA;AACF,MAAM,MAAA,QAAA,GAAW,MAAM,oBAAA,CAAqB,QAAQ,CAAA;AACpD,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,KACK,CAAA,OAAA,CAAA,EAAA;AAAA;AAER,GACF,EAAG,EAAE,CAAA;AAGL,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,OAAO,IAA4B,KAAA;AAClE,IAAA,IAAI,CAAC,gBAAkB,EAAA;AACvB,IAAI,IAAA;AACF,MAAA,MAAM,SAAS,MAAM,gBAAA,CAAiB,QAAW,IAAS,KAAA,OAAA,GAAU,YAAY,MAAM,CAAA;AACtF,MAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA;AAC9C,MAAA,IAAI,CAAC,KAAO,EAAA;AACZ,MAAA,MAAM,IAAO,GAAA,sBAAA,CAAuB,IAAM,EAAA,KAAA,CAAM,GAAK,EAAA,cAAA,CAAA;AAAA,QACnD,MAAM,KAAM,CAAA;AAAA,OAAA,EACR,KAAM,CAAA,KAAA,GAAQ,CAAK,IAAA,KAAA,CAAM,SAAS,CAAI,GAAA;AAAA,QACxC,IAAM,EAAA;AAAA,UACJ,OAAO,KAAM,CAAA,KAAA;AAAA,UACb,QAAQ,KAAM,CAAA;AAAA;AAChB,OACF,GAAI,EACL,CAAA,CAAA;AACD,MAAa,YAAA,CAAA;AAAA,QACX,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,aACM,GAAK,EAAA;AACZ,MAAA,IAAI,OAAS,EAAA;AAEX,QAAQ,OAAA,CAAA,IAAA,CAAK,8CAA8C,GAAG,CAAA;AAAA;AAChE;AACF,GACC,EAAA,CAAC,gBAAkB,EAAA,sBAAsB,CAAC,CAAA;AAG7C,EAAM,MAAA,YAAA,GAAe,YAAY,CAAC,MAAA,KAAyB,OAAO,IAAS,KAAA,QAAA,IAAY,OAAO,MAAW,KAAA,OAAA,IAAW,OAAO,MAAW,KAAA,OAAA,IAAW,QAAQ,gBAAoB,IAAA,kBAAkB,GAAG,CAAC,gBAAA,EAAkB,kBAAkB,CAAC,CAAA;AACxO,EAAM,MAAA,YAAA,GAAe,QAAQ,MAAM,mBAAA,CAAoB,YAAY,CAAG,EAAA,CAAC,YAAY,CAAC,CAAA;AAOpF,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,CAAC,MAAyB,KAAA;AACzD,IAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,MAAe,cAAA,CAAA;AAAA,QACb,MAAM,MAAO,CAAA;AAAA,OACd,CAAA;AACD,MAAA;AAAA;AAEF,IAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAE9B,MAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,QAAe,cAAA,CAAA;AAAA,UACb,IAAM,EAAA;AAAA,SACP,CAAA;AACD,QAAA;AAAA;AAEF,MAAgB,eAAA,EAAA;AAChB,MAAA,IAAI,MAAO,CAAA,IAAA,KAAS,OAAS,EAAA,aAAA,CAAc,KAAK,CAAA;AAAA,WAAoB,YAAA,CAAA;AAAA,QAClE,MAAM,MAAO,CAAA;AAAA,OACd,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,MAAO,CAAA,MAAA,KAAW,OAAW,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC1D,MAAK,KAAA,YAAA,CAAa,OAAO,MAAM,CAAA;AAC/B,MAAA;AAAA;AAEF,IAAgB,eAAA,EAAA;AAChB,IAAA,QAAQ,OAAO,MAAQ;AAAA,MACrB,KAAK,QAAA;AACH,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF;AACE,QAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA;AAClC,GACC,EAAA,CAAC,eAAiB,EAAA,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAGpD,EAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,OAAO,IAAoB,KAAA;AAr2B/D,IAAA,IAAAA,KAAAC,GAAAC,EAAAA,GAAAA;AAs2BI,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,KAAS,UAAU,MAAM,IAAI,QAGhC,CAAW,OAAA,KAAA;AAExB,MAAA,MAAM,QAAQ,UAAW,CAAA,MAAM,OAAQ,CAAA,MAAS,GAAG,qBAAqB,CAAA;AACxE,MAAAC,KAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,GAAK,EAAA,CAAC,OAAO,MAAW,KAAA;AAC3C,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAQ,OAAA,CAAA,KAAA,GAAQ,CAAK,IAAA,MAAA,GAAS,CAAI,GAAA;AAAA,UAChC,KAAA;AAAA,UACA;AAAA,YACE,MAAS,CAAA;AAAA,SACZ,MAAM;AACP,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,OAAA,CAAQ,MAAS,CAAA;AAAA,OAClB,CAAA;AAAA,KACF,CAAI,GAAA,MAAA;AACL,IAAA,MAAM,IAAO,GAAA,sBAAA,CAAuB,IAAK,CAAA,IAAA,EAAM,KAAK,GAAK,EAAA,cAAA,CAAA;AAAA,MACvD,IAAA,EAAA,CAAMD,OAAAD,GAAA,GAAA,IAAA,CAAK,SAAL,IAAAA,GAAAA,GAAAA,GAAAA,CAAaD,MAAA,IAAK,CAAA,QAAA,KAAL,gBAAAA,GAAe,CAAA,OAAA,CAAQ,YAAY,EAAhD,CAAA,KAAA,IAAA,GAAAE,MAAwD,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA;AAAA,KAAA,EAC5F,IAAO,GAAA;AAAA,MACT;AAAA,KACF,GAAI,EACL,CAAA,CAAA;AACD,IAAI,IAAA,IAAA,CAAK,IAAS,KAAA,OAAA,EAAuB,aAAA,CAAA;AAAA,MACvC,QAAQ,IAAK,CAAA;AAAA,KACd,CAAA;AAAA,SAAA,IAAW,oBAAiC,YAAA,CAAA;AAAA,MAC3C,IAAM,EAAA,OAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,GACA,EAAA,CAAC,sBAAwB,EAAA,kBAAkB,CAAC,CAAA;AAK/C,EAAM,MAAA,gBAAA,GAAmB,OAAO,KAAK,CAAA;AACrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,gBAAA,CAAiB,WAAW,SAAW,EAAA;AAC3C,IAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAC3B,IAAA,MAAM,QAAQ,eAAgB,CAAA;AAAA,MAC5B,QAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAI,IAAA,KAAA,iBAAsB,KAAK,CAAA;AAAA,GAEjC,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,eAAA,GAAkB,OAAO,KAAK,CAAA;AACpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAgB,CAAA,OAAA,IAAW,SAAa,IAAA,CAAC,aAAe,EAAA;AAC5D,IAAA,eAAA,CAAgB,OAAU,GAAA,IAAA;AAC1B,IAAA,IAAI,eAAgB,CAAA;AAAA,MAClB,QAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAG,EAAA;AACJ,IAAM,MAAA,SAAA,GAAY,eAAe,KAAK,CAAA;AACtC,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,KAAK,cAAc,SAAS,CAAA;AAC5B,MAAA;AAAA;AAEF,IAAM,MAAA,MAAA,GAAS,oBAAoB,UAAU,CAAA;AAC7C,IAAI,IAAA,MAAA,eAAqB,MAAM,CAAA;AAAA,GAE9B,EAAA,CAAC,aAAe,EAAA,SAAS,CAAC,CAAA;AAC7B,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,wBAAyB,EAAA,EAAA,IAAA,EAAM,SAAU,CAAA,IAAA,EAAM,MAAM,SAAU,CAAA,IAAA,EAAM,OAAS,EAAA,SAAA,CAAU,OAAS,EAAA,aAAA,EAAe,UAAU,aAAe,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAG,EAAA,WAAA,EAAa,CAAC,GAAA,EAAK,IAAS,KAAA;AAC7O,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB,MAAM,CAAG,EAAA,IAAA,KAAS,UAAU,OAAU,GAAA,IAAA,KAAS,UAAU,OAAU,GAAA,IAAA,CAAK,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAM,MAAA,EAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,QAC1I,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AACD,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,KACnB,EAAG,iBAAiB,CAAY,QAAA,KAAA;AAC9B,MAAA,MAAM,QAAW,GAAA,sBAAA,CAAuB,QAAS,CAAA,OAAA,EAAS,SAAS,KAAK,CAAA;AACxE,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,uBAAA,GAAA,CAAC,4BAAyB,UAAY,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAC,EAAG,SAAW,EAAA,CAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAmB,UAAS,OAAU,GAAA,iBAAA,GAAoB,IAAM,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,aAAc,CAAA,KAAK,CAAG,EAAA,OAAA,EAAS,CAAQ,IAAA,KAAA;AACxO,MAAA,IAAA,CAAK,QAAQ,CAAC,GAAA,EAAK,CAAM,KAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,QAClD,IAAA,EAAM,CAAS,MAAA,EAAA,CAAA,GAAI,CAAC,CAAA;AAAA,OACrB,CAAC,CAAA;AACF,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,KAClB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,uBAAQ,GAAA,CAAA,mBAAA,EAAA,EAAoB,UAAY,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAC,EAAG,SAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EAAG,YAAY,CAAS,KAAA,KAAA;AAChI,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,aAAe,EAAA;AAAA,OAChB,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,UAAA,EAAA,CAAY,EAAU,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,KAAA,CAAM,UAAhB,IAAyB,GAAA,EAAA,GAAA,EAAI,EAAA,SAAA,EAAW,kBAAoB,EAAA,WAAA,EAAa,sBAAsB,KAAc,EAAA,QAAA,EAAoB,OAAS,EAAA,MAAM,YAAa,CAAA,KAAK,GAAG,OAAS,EAAA,CAAC,IAAM,EAAA,GAAA,EAAK,IAAS,KAAA;AACzO,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB;AAAA,OACD,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,uBAAA,GAAA,CAAC,4BAAyB,OAAS,EAAA,MAAM,gBAAgB,KAAK,CAAA,EAAG,MAAQ,EAAA,OAAM,MAAU,KAAA;AAC9F,MAAI,IAAA,CAAC,gBAAkB,EAAA,OAAO,EAAC;AAC/B,MAAO,OAAA,gBAAA,CAAiB,QAAW,MAAM,CAAA;AAAA,KAC3C,EAAG,UAAU,CAAS,KAAA,KAAA;AACpB,MAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,QAAA,YAAA,CAAa,KAAK,IAAS,KAAA,OAAA,GAAU,OAAU,GAAA,OAAA,EAAS,KAAK,GAAK,EAAA;AAAA,UAChE,MAAM,IAAK,CAAA;AAAA,SACZ,CAAA;AAAA;AACH,KACC,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,2BAAQ,0BAA2B,EAAA,EAAA,UAAA,EAAA,CAAY,0CAAU,KAAM,CAAA,KAAA,KAAhB,YAAyB,EAAC,EAAG,WAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,iBAAkB,CAAA,KAAK,GAAG,OAAS,EAAA,CAAC,KAAK,IAAS,KAAA;AAC1K,MAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,QACzB,IAAA;AAAA,QACA,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,KACtB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,GAAA,EAAK,SAAU,CAAA,GAAA,EAAK,MAAM,SAAU,CAAA,kBAAA,EAAoB,KAAO,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,KAAM,CAAA,KAAA,KAAhB,YAAyB,EAAC,EAAG,SAAW,EAAA,kBAAA,EAAoB,OAAS,EAAA,MAAM,YAAa,CAAA,IAAI,CAAG,EAAA,SAAA,EAAW,CAAC,GAAA,EAAK,IAAS,KAAA;AAClN,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,UACzB,IAAM,EAAA;AAAA,SACP,CAAA;AAAA,OACI,MAAA;AACL,QAAA,YAAA,CAAa,UAAU,EAAI,EAAA,GAAA,EAAK,IAAS,KAAA,OAAA,GAAU,UAAU,OAAO,CAAA;AAAA;AAEtE,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,KAChB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,2BAAQ,oBAAqB,EAAA,EAAA,IAAA,EAAM,UAAe,KAAA,KAAA,GAAQ,OAAO,UAAY,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,aAAc,CAAA,IAAI,GAAG,OAAS,EAAA,CAAC,MAAM,MAAW,KAAA;AACzK,MAAA,IAAA,CAAK,OAAQ,CAAA,CAAC,GAAK,EAAA,CAAA,KAAM,iBAAiB,GAAK,EAAA;AAAA,QAC7C,IAAA,EAAM,CAAQ,KAAA,EAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,QACnB;AAAA,OACD,CAAC,CAAA;AACF,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,KACjB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,aAAe,EAAA;AACjB,IAAO,uBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,KAAA,EAAO,aAAc,CAAA,aAAa,GAAG,QAAQ,EAAA,IAAA,EAAC,YAAc,EAAA,gBAAA,EAAkB,MAAgB,EAAA,CAAA;AAAA;AAE3H,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,uBAAA,GAAA,CAAC,UAAO,MAAgB,EAAA,KAAA,EAAM,oCAA8B,MAAQ,EAAA,YAAA,EAAc,SAAS,cAAgB,EAAA,CAAA;AAAA;AAEpH,EAAI,IAAA,KAAA,IAAS,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAChC,IAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA,EAAO,MAAgB,EAAA,KAAA,EAAM,kCAA8B,EAAA,MAAA,EAAQ,KAAO,EAAA,IAAA,EAAM,eAAgB,CAAA,KAAA,EAAO,QAAQ,CAAA,EAAG,SAAS,MAAQ,EAAA,CAAA;AAAA;AAK7I,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,GAAA,EAAK,UAAU,IAAK,CAAA,GAAA;AAAA,MACpB,IAAA,EAAM,UAAU,IAAK,CAAA,kBAAA;AAAA,MACrB,SAAW,EAAA,kBAAA;AAAA,MACX,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,MAAA,EAAQ,CAAC,GAAgB,KAAA;AACvB,QAAA,YAAA,CAAa,SAAU,CAAA,IAAA,CAAK,EAAI,EAAA,GAAA,EAAK,UAAU,IAAI,CAAA;AACnD,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA;AACnB,KACF;AACA,IAAA,OAAO,SAAU,CAAA,IAAA,KAAS,OAAU,mBAAA,GAAA,CAAC,qBAA0B,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAA1B,EAAkC,UAAA,EAAY,SAAU,CAAA,UAAA,EAAA,CAAY,CAAK,mBAAA,GAAA,CAAC,0CAA0B,MAAQ,CAAA,CAAA;AAAA;AAEnJ,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IACf,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,yBAAsB,KAAO,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAI,EAAA,UAAA,EAAY,WAAW,MAAQ,EAAA,eAAA,EAAiB,WAAW,eAAiB,EAAA,YAAA,EAAc,WAAW,YAAgB,KAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAS,CAAA,KAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAO,cAAgB,EAAA,UAAA,CAAW,SAAS,OAAS,EAAA,MAAM,cAAc,IAAI,CAAA,EAAG,UAAU,iBAAmB,EAAA,gBAAA,EAAoC,WAAW,kBAAoB,EAAA,WAAA,EAAa,sBAAsB,aAA8B,EAAA,YAAA,EAA4B,OAAc,QAAoB,EAAA,cAAA,EAAgB,WAAW,cAAgB,EAAA,CAAA;AAAA,MAC3iB,UAAA,mBAAc,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,aAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,IAAA,EAAM,UAAY,EAAA,SAAA,EAAW,MAAM;AACjE,QAAAE,WAAA,CAAkB,WAAW,EAAE,CAAA;AAC/B,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,OACtB,EAAG,cAAc,MAAM,eAAA,CAAgB,IAAI,CAAG,EAAA,CAAA,EAClC,IAAU,SAAY,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,eACtC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,UAAA,EACf,QAAU,EAAA,SAAA,CAAA,KAAA,mBACH,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAa,QAAa,EAAA,eAAA,EAAA,CAAA;AAAA,wBAC9C,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,aAAa,aAAe,EAAA,CAAA,EAC3C,oBAAU,KACf,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,aAAU,OAAS,EAAA,MAAM,aAAa,IAAI,CAAA,EAAG,OAAO,CAAC;AAAA,UAC5E;AAAA,cACI,CAAC,MAAA,CAAO,aAAe,EAAA,YAAA,CAAa,OAAO,CAAC,CAAA,EAAG,iBAAkB,EAAA,QAAA,EAC3C,8BAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,kBAAA,EAAoB,qBAAO,CACnD,EAAA;AAAA,OAAA,EACJ,oBACI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,iBAAA,EAAA,EAAkB,KAAO,EAAA,KAAA,CAAM,KAAO,EAAA,CAAA;AAAA,4BACtC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAc,oBAAU,KAAM,EAAA;AAAA,OACtD,EAAA,CAAA,EACR,GACJ,CAAU,GAAA;AAAA,KAClB,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,WAAa,EAAA;AACf,IAAO,uBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACrB,EAAA,QAAA,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,KAAA,EAAc,QAAoB,EAAA,KAAA,EAAO,aAAa,OAAS,EAAA,MAAM,eAAe,IAAI,CAAA,EAAG,kBAAoC,WAAa,EAAA,oBAAA,EAAsB,cAAgB,EAAA,kBAAA,EAAoB,CAC5N,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACpB,EAAA,QAAA,EAAA;AAAA,MAAA,OAAA,IAAW,MAAO,CAAA,MAAA,KAAW,CAAI,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,WAAa,EAAA,aAAA,EAAc,QACzE,QAAC,kBAAA,GAAA,CAAA,iBAAA,EAAA,EAAkB,IAAK,EAAA,OAAA,EAAQ,GACpC,CAAU,GAAA,IAAA;AAAA,0BACb,gBAAiB,EAAA,EAAA,MAAA,EAAQ,MAAO,CAAA,MAAA,CAAO,WAAS,KAAM,CAAA,SAAA,GAAY,CAAC,CAAA,EAAG,QAAQ,aAAe,EAAA,WAAA,EAAa,iBAAiB,OAAkB,EAAA,YAAA,EAAc,qBAAmB,cAAe,CAAA;AAAA,QACtM,SAAW,EAAA;AAAA,OACZ,CAAG,EAAA,UAAA,EAAY,sBAAwB,EAAA,YAAA,EAA4B,QAAU,EAAA,YAAA,EAAc,SAAW,EAAA,kBAAA,EAAoB,aAA8B,EAAA,cAAA,EAAgB,CAAQ,IAAA,KAAA;AAC/K,QAAa,YAAA,CAAA;AAAA,UACX,IAAM,EAAA,OAAA;AAAA,UACN,eAAe,IAAK,CAAA;AAAA,SACrB,CAAA;AAAA,OACA,EAAA,CAAA;AAAA,0BACQ,mBAAoB,EAAA,EAAA,OAAA,EAAS,aAAe,EAAA,OAAA,EAAS,MAAM,gBAAiB,CAAA,KAAK,CAAG,EAAA,SAAA,EAAW,oBAAoB,UAAY,EAAA,IAAI,WAAa,EAAA,CAAC,KAAK,IAAS,KAAA;AACxK,QAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,QAAO,OAAA,sBAAA,CAAuB,MAAM,GAAK,EAAA;AAAA,UACvC,MAAM,CAAG,EAAA,IAAA,KAAS,OAAU,GAAA,OAAA,GAAU,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAA,MAAA,EAAA,CAAO,KAAK,KAAS,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,UACxH,QAAQ,IAAK,CAAA;AAAA,SACd,CAAA;AAAA,SACA,aAAe,EAAA,CAAA,QAAA,KAAY,KAAK,iBAAA,CAAkB,QAAQ,CAAG,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA;AAEV,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,cAAA,EAAA,EAAe,MAAM,SAAW,EAAA,MAAA,EAAgB,SAAS,UAAY,EAAA,SAAA,EAAW,kBAAoB,EAAA,YAAA,EAA4B,KAAc,EAAA,QAAA,EAAoB,UAAU,iBAAmB,EAAA,UAAA,EAAY,SAAW,EAAA,QAAA,EAAU,CAAU,MAAA,KAAA,KAAK,gBAAgB,MAAM,CAAA,EAAG,iBAAmB,EAAA,gBAAA,GAAmB,YAAY;AAEjU,MAAA,MAAM,MAAS,GAAA,MAAM,gBAAiB,CAAA,MAAA,EAAW,SAAS,CAAA;AAC1D,MAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA;AACjD,MAAI,IAAA,CAAC,OAAc,OAAA,IAAA;AACnB,MAAO,OAAA,WAAA,CAAY,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,IAAK,CAAC,oBAAA,GAAuB,KAAM,CAAA,GAAA,GAAM,oBAAqB,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,KAC1G,GAAI,QAAW,OAAS,EAAA,CAAA,IAAA,KAAQ,aAAa,IAAK,CAAA,IAAA,EAAM,KAAK,GAAK,EAAA;AAAA,MAChE,MAAM,IAAK,CAAA;AAAA,KACZ,GAAG,aAAe,EAAA,CAAC,MAAM,GAAK,EAAA,IAAA,KAAS,YAAa,CAAA,IAAA,EAAM,GAAK,EAAA;AAAA,MAC9D;AAAA,KACD,CAAG,EAAA,QAAA,EAAU,gBAAkB,EAAA,QAAA,EAAU,MAAM,cAAe,CAAA;AAAA,MAC7D,IAAM,EAAA;AAAA,KACP,CAAA,EAAG,WAAa,EAAA,CAAC,KAAK,IAAS,KAAA;AAC9B,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB,IAAA,EAAM,GAAG,IAAS,KAAA,OAAA,GAAU,UAAU,IAAS,KAAA,OAAA,GAAU,OAAU,GAAA,IAAA,CAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,OAAU,GAAA,MAAA,GAAS,OAAO,CAAA,MAAA,EAAM,KAAK,MAAO,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,CAAC,CAAA,CAAA;AAAA,QAC3K,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AAAA,KACH,EAAG,eAAiB,EAAA,CAAC,QAA4B,KAAA;AAC/C,MAAA,MAAM,QAAW,GAAA,sBAAA,CAAuB,QAAS,CAAA,OAAA,EAAS,SAAS,KAAK,CAAA;AACxE,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,OACA,cAAgB,EAAA,CAAC,QAAQ,GAAQ,KAAA,YAAA,CAAa,QAAQ,GAAG,CAAA,EAAG,aAAa,CAAQ,IAAA,KAAA,YAAA,CAAa,IAAI,CAAG,EAAA,QAAA,EAAU,MAAM,eAAgB,CAAA,IAAI,GAChI,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA,EAAmB,OAAO,aAAc,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA,QAAA,EAAQ,MAAC,aAAe,EAAA,UAAA,EAAY,cAAc,gBAAkB,EAAA,aAAA,EAAe,mBAAmB,iBAAmB,EAAA,YAAA,EAAc,mBAAmB,oBAAsB,EAAA,SAAA,EAAW,oBAAoB,gBAAkB,EAAA,CAAC,KAAK,IAAS,KAAA;AAClT,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAO,OAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QAC7B,MAAM,CAAG,EAAA,IAAA,KAAS,OAAU,GAAA,OAAA,GAAU,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAA,MAAA,EAAA,CAAO,KAAK,KAAS,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,QACxH,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AAAA,OACA,cAAgB,EAAA,CAAC,MAAQ,EAAA,GAAA,KAAQ,aAAa,MAAQ,EAAA,GAAG,CAAG,EAAA,aAAA,EAAe,cAAY,KAAK,iBAAA,CAAkB,QAAQ,CAAG,EAAA,UAAA,EAAY,SAAS,QAAW,GAAA;AAAA,MAC1J,KAAA;AAAA,MACA;AAAA,KACF,GAAI,QAAW,CACT,EAAA,CAAA;AAAA,IACC,+BAAgB,IAAA,CAAA,IAAA,EAAA,EAAK,eAAc,MAAO,EAAA,KAAA,EAAO,OAAO,WAChD,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,uBAAa,iBAAkB,EAAA,EAAA,IAAA,EAAK,SAAQ,KAAO,EAAA,KAAA,CAAM,MAAM,CAAK,GAAA,IAAA;AAAA,0BACpE,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,eAAiB,EAAA,aAAA,EAAe,GAC/C,QACL,EAAA,YAAA,EAAA;AAAA,KAAA,EACJ,CAAU,GAAA;AAAA,GAClB,EAAA,CAAA;AACR;AACA,SAAS,MAAO,CAAA;AAAA,EACd,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAa,GAAA;AACf,CAUG,EAAA;AACD,EAAA,MAAM,QAAQ,cAAe,EAAA;AAC7B,EAAM,MAAA,MAAA,GAAS,QAAQ,MAAM,UAAA,CAAW,KAAK,CAAG,EAAA,CAAC,KAAK,CAAC,CAAA;AACvD,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MACjB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,MAAO,CAAA,KAAA,EAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,iBAAkB,EAAA,QAAA,EACtE,QACL,EAAA,KAAA,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAI,QAAO,EAAA,MAAA,EAAA,CAAA;AAAA,IACjE,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,IAAA,EAAO,gBAAK,CAAU,GAAA,IAAA;AAAA,IACjD,aAAa,OAAU,mBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,aACnC,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,uBAAa,YAAa,EAAA,EAAA,KAAA,EAAO,sCAAgB,QAAU,EAAA,OAAA,EAAS,WAAW,CAAK,GAAA,IAAA;AAAA,MACpF,OAAA,mBAAW,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,UAAA,EAAY,OAAS,EAAA,OAAA,EAAS,OAAS,EAAA,SAAA,GAAY,WAAc,GAAA,SAAA,EAAW,CAAK,GAAA;AAAA,KAAA,EACrH,CAAU,GAAA;AAAA,GAClB,EAAA,CAAA;AACR;AAMO,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,MAAM,WAAW,KAAM,CAAA,MAAA,IAAU,OAAO,IAAO,GAAA,KAAA,CAAM,SAAS,MAAS,GAAA,OAAA;AACvE,EAAA,2BAAQ,mBAAoB,EAAA,EAAA,IAAA,EAAM,UACxB,QAAC,kBAAA,GAAA,CAAA,oBAAA,EAAA,cAAA,CAAA,EAAA,EAAyB,MAAO,CACrC,EAAA,CAAA;AACR;AACA,MAAM,UAAa,GAAA,YAAA,CAAa,CAAC,KAAA,KAAyB,WAAW,MAAO,CAAA;AAAA,EAC1E,aAAe,EAAA;AAAA,IACb,WAAW,KAAM,CAAA,EAAA;AAAA,IACjB,aAAe,EAAA,KAAA;AAAA,IACf,QAAU,EAAA,MAAA;AAAA,IACV,cAAgB,EAAA,QAAA;AAAA,IAChB,KAAK,KAAM,CAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,KAAK,KAAM,CAAA,EAAA;AAAA,IACX,OAAO,KAAM,CAAA,EAAA;AAAA,IACb,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,mBAAmB,KAAM,CAAA,GAAA;AAAA,IACzB,iBAAiB,KAAM,CAAA,EAAA;AAAA,IACvB,iBAAiB,KAAM,CAAA;AAAA,GACzB;AAAA,EACA,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADH,CAAA,EAAA;AAAA,IAEL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,OAAO,KAAM,CAAA,UAAA;AAAA,IACb,SAAW,EAAA,QAAA;AAAA,IACX,cAAc,KAAM,CAAA;AAAA,GACtB,CAAA;AAAA,EACA,MAAA,EAAQ,aACH,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,IADF,CAAA,EAAA;AAAA,IAEN,OAAO,KAAM,CAAA,eAAA;AAAA,IACb,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA;AAAA,GACZ,CAAA;AAAA,EACA,IAAA,EAAM,aACD,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,OADJ,CAAA,EAAA;AAAA,IAEJ,UAAY,EAAA,KAAA;AAAA,IACZ,WAAW,KAAM,CAAA,EAAA;AAAA,IACjB,OAAO,KAAM,CAAA,eAAA;AAAA,IACb,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA;AAAA,GACZ,CAAA;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,SAAA,EAAW,MAAM,EAAK,GAAA;AAAA,GACxB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,OAAO,KAAM,CAAA;AAAA,GACf;AAAA,EACA,SAAW,EAAA;AAAA,IACT,OAAO,KAAM,CAAA;AAAA,GACf;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,UAAA;AAAA,IACV,KAAK,KAAM,CAAA,EAAA;AAAA,IACX,MAAM,KAAM,CAAA,EAAA;AAAA,IACZ,MAAQ,EAAA,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAA,EAAK,MAAM,EAAK,GAAA,CAAA;AAAA,IAChB,QAAU,EAAA,GAAA;AAAA,IACV,SAAW,EAAA,EAAA;AAAA,IACX,iBAAA,EAAmB,MAAM,EAAK,GAAA,CAAA;AAAA,IAC9B,cAAc,MAAO,CAAA,IAAA;AAAA,IACrB,iBAAiB,KAAM,CAAA;AAAA,GACzB;AAAA,EACA,SAAA,EAAW,aACN,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADC,CAAA,EAAA;AAAA,IAET,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,GAAK,EAAA,EAAA;AAAA,IACL,MAAM,KAAM,CAAA,EAAA;AAAA,IACZ,OAAO,KAAM,CAAA,EAAA;AAAA,IACb,MAAQ,EAAA,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAA,EAAK,MAAM,EAAK,GAAA,CAAA;AAAA,IAChB,SAAW,EAAA,EAAA;AAAA,IACX,mBAAmB,KAAM,CAAA,EAAA;AAAA,IACzB,eAAA,EAAiB,MAAM,EAAK,GAAA,CAAA;AAAA,IAC5B,cAAc,MAAO,CAAA,IAAA;AAAA,IACrB,eAAiB,EAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,OAAO,KAAM,CAAA,OAAA;AAAA,IACnD,WAAa,EAAA,KAAA,CAAM,MAAS,GAAA,UAAA,CAAW,aAAgB,GAAA,CAAA;AAAA,IACvD,aAAa,KAAM,CAAA,MAAA;AAAA,IACnB,WAAa,EAAA,MAAA;AAAA,IACb,aAAA,EAAe,KAAM,CAAA,MAAA,GAAS,GAAM,GAAA,IAAA;AAAA,IACpC,YAAc,EAAA,EAAA;AAAA,IACd,YAAc,EAAA;AAAA,MACZ,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,SAAW,EAAA;AAAA,GACb;AAAA,EACA,eAAA,EAAiB,aACZ,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADO,CAAA,EAAA;AAAA,IAEf,QAAU,EAAA,EAAA;AAAA,IACV,IAAM,EAAA,CAAA;AAAA,IACN,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,aAAA,EAAe,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,kBADD,CAAA,EAAA;AAAA,IAEb,eAAiB,EAAA,kBAAA;AAAA,IACjB,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,SAAS,KAAM,CAAA;AAAA,GACjB,CAAA;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,GAAA;AAAA,IACV,QAAU,EAAA,GAAA;AAAA,IACV,UAAY,EAAA,QAAA;AAAA,IACZ,KAAK,KAAM,CAAA,EAAA;AAAA,IACX,iBAAiB,KAAM,CAAA,OAAA;AAAA,IACvB,cAAc,MAAO,CAAA,EAAA;AAAA,IACrB,iBAAiB,KAAM,CAAA,EAAA;AAAA,IACvB,mBAAmB,KAAM,CAAA;AAAA,GAC3B;AAAA,EACA,WAAA,EAAa,aACR,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,IADG,CAAA,EAAA;AAAA,IAEX,QAAU,EAAA,EAAA;AAAA,IACV,OAAO,KAAM,CAAA,MAAA;AAAA,IACb,SAAW,EAAA;AAAA,GACb,CAAA;AAAA,EACA,WAAA,EAAa,aACR,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADG,CAAA,EAAA;AAAA,IAEX,OAAO,KAAM,CAAA;AAAA,GACf,CAAA;AAAA,EACA,aAAe,EAAA;AAAA,IACb,WAAW,KAAM,CAAA,EAAA;AAAA,IACjB,SAAW,EAAA,EAAA;AAAA,IACX,cAAgB,EAAA,QAAA;AAAA,IAChB,iBAAiB,KAAM,CAAA,UAAA;AAAA,IACvB,cAAc,MAAO,CAAA,IAAA;AAAA,IACrB,iBAAA,EAAmB,MAAM,EAAK,GAAA;AAAA,GAChC;AAAA,EACA,kBAAA,EAAoB,aACf,CAAA,cAAA,CAAA,EAAA,EAAA,IAAA,CAAK,KADU,CAAA,EAAA;AAAA,IAElB,OAAO,KAAM,CAAA;AAAA,GACf;AACF,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"CanvasExperience.js","sources":["../../../src/features/canvas/CanvasExperience.tsx"],"sourcesContent":["/**\n * The canvas experience: boards + viewer, as one federated unit.\n *\n * This lives on the REMOTE side of the microfrontend on purpose. If the host\n * owned the fetch, every change to how a canvas is read - a new field, a\n * different empty state, a fix to board ordering - would need an App Store\n * build. Here it ships with `cdecli surfaces deploy canvas`, the same way the\n * renderer does.\n *\n * The host injects only what it alone can know: the session token and the index\n * endpoint for its environment. Everything downstream of that - fetching,\n * choosing a board, loading/error/empty states - is the remote's business, and\n * this file deliberately imports nothing from the app (no Apollo, no\n * navigation, no config): only React Native, `fetch`, and its sibling modules.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Image as RNImage, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid, type TemplateRailsState } from './CanvasBoardsGrid';\nimport { DesignCategoryGallery, type LoadDesignCatalog } from './DesignCategoryGallery';\nimport { fetchDesignCatalog, fetchDesignCatalogViaClient, interleaveTemplateRows } from './designCatalog';\nimport { designCategoryFor, type DesignCategory } from './designCategories';\nimport { SEEDANCE_SHOWCASE, type ShowcaseClip } from './seedanceShowcase';\nimport { TemplatesGallery, type HomeGallerySource } from './home/TemplatesGallery';\nimport type { HeroSettings } from './home/heroShots';\nimport { WORK_ARTIFACTS } from './homeWork';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n deriveBackendGraphqlUrl,\n proxiedMediaUrl,\n unwrapProxyUrl,\n} from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { startExportTask } from './videoEditor/exportTask';\nimport { ExportTaskCard, useCanvasTask } from './videoEditor/ExportTaskCard';\nimport { dismissTask as dismissCanvasTask, markTaskDelivered } from './canvasTasks';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { applySrcRenewals, useBoardMediaRefresh, useMediaSigning } from './useBoardMediaRefresh';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n mediaItemsFor,\n mediaKey,\n newBoardId,\n reconcileDismissed,\n type CanvasItem,\n type MediaPlacement,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { isDocsCreate, visibleCreateGroups, type CreateAction } from './createTiles';\nimport {\n designEntryForCreate,\n designTemplateIdOf,\n parseCreateTileLink,\n parseDesignLink,\n parseDocLink,\n parseMediaLink,\n type MediaLink,\n} from './deepLinks';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience, type DesignEntry } from '../design/DesignExperience';\nimport { listDesignArtifacts, type DesignArtifact } from '../design/doc/artifacts';\nimport { DocsEditorExperience } from '../docs/DocsEditorExperience';\nimport { listDocArtifacts, type DocArtifact } from '../docs/docArtifacts';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\nimport { CanvasThemeProvider, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, ActionButton, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\nexport interface CanvasExperienceProps {\n /** Bearer for the surface index. Absent -> the unauthenticated notice. */\n token?: string | null;\n /** Index endpoint for this environment. */\n indexUrl: string;\n /** Open this board when it exists; otherwise the newest opens. */\n channelId?: string;\n /** Render this board and skip the network entirely (deep links, tests). */\n board?: PersistedCanvasState | null;\n /** Host-side session problem, shown instead of attempting a doomed read. */\n sessionError?: string | null;\n /** Sign in again now, from the session-error screen. */\n onRetrySession?: () => void;\n /** Agent-backed item actions (Edit Image, Create Video) - raised by the\n * viewer toolbar. Create Video / Edit Video / Clips are handled HERE\n * (same connectors as web canvas) and only forwarded if a host overrides. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Hand a finished editor timeline to the host's renderer (yantra-video). */\n onExportVideo?: (spec: VideoExportSpec) => void;\n /** Device-library picker the host provides (native capability).\n * `onStatus` is the web upload toast: `Uploading IMG_0003.jpeg…`. */\n onPickLocalMedia?: (onStatus?: (message: string) => void, source?: MediaPickSource) => Promise<CanvasItem[]>;\n /** Host uploader for phone-local URIs (file:// -> store URL) so board\n * items persist as fetchable media, like the web's uploadFileToStore. */\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Host microphone (expo-audio) - the Voice tab's record flows. */\n audioRecorder?: AudioRecorderSeam;\n /** Connector runner (auth + transport live host-side). Present -> the\n * native image/audio editors open for edit actions; absent -> those\n * actions forward to onItemAction like before. */\n runMediaAction?: RunMediaAction;\n /** Host Apollo client — templates gallery is cache-first against typePolicies. */\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n /**\n * Deep links (web `?create=`, `?media=&kind=&name=`, `?design=`, `?artifact=`).\n * Each runs once on mount, after the board list has settled.\n */\n /** A Create tile id (`video-editor`, `clips`, `logo`): runs that tile. */\n createTile?: string;\n /** Another surface's \"Edit in Canvas\": placed on a new board, its editor opened. */\n media?: { src: string; kind?: string; name?: string };\n /** Open this saved design in the design studio. */\n designId?: string;\n /** A design template link: opens the template in the native design studio. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n /**\n * @deprecated Ignored: templates and every design kind now open in the native\n * design studio, never the web canvas. Kept so existing hosts still typecheck.\n */\n onOpenWebCanvas?: (query: string) => void;\n /** @deprecated Ignored, as `onOpenWebCanvas`. */\n webCanvasUrl?: string;\n /**\n * Host-provided theme (the app's own light/dark). Used while the canvas\n * theme toggle is on \"system\"; absent -> the canvas follows the OS.\n */\n isDark?: boolean;\n}\n\nfunction untitledBoard(channelId?: string): CanvasBoardSummary {\n const id = channelId?.trim() || newBoardId();\n return {\n channelId: id,\n title: '',\n savedAt: Date.now(),\n itemCount: 0,\n board: emptyBoardState(),\n };\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n/** How long a media link waits for its picture's size before taking an upload's footprint. */\nconst MEDIA_LINK_MEASURE_MS = 1500;\n\nconst boardMediaKey = (src: string): string => mediaKey(src, unwrapProxyUrl);\n\ntype PlaceOpts = { name?: string; aspect?: string; size?: { width: number; height: number } };\n\n/** Generated/linked media as a placement: its requested ratio (or measured size) shapes the tile. */\nfunction placementFor(type: CanvasItem['type'], src: string, opts?: PlaceOpts): MediaPlacement {\n const maxEdge = type === 'video' ? 640 : 600;\n const size = opts?.aspect ? dimsForAspect(opts.aspect, maxEdge) : opts?.size;\n return {\n type,\n src,\n label: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n ...(size ? { size } : {}),\n };\n}\n\n/** A device pick: the host reports its pixel size, which only shapes the tile. */\nfunction placementForPicked(item: CanvasItem): MediaPlacement {\n return {\n type: item.type,\n src: item.src,\n ...(item.generatedAssetName ? { label: item.generatedAssetName } : {}),\n ...(item.width > 0 && item.height > 0 ? { size: { width: item.width, height: item.height } } : {}),\n ...(item.hasAudio === false ? { hasAudio: false } : {}),\n };\n}\n\n/** `next` from the viewer, with the tombstones its item edit implies. */\nfunction withTombstones(prev: PersistedCanvasState, next: PersistedCanvasState): PersistedCanvasState {\n const dismissed = reconcileDismissed(prev.items, next.items, prev.dismissed ?? [], boardMediaKey);\n const out: PersistedCanvasState = { ...next };\n if (dismissed.length > 0) out.dismissed = dismissed;\n else delete out.dismissed;\n return out;\n}\n\nfunction CanvasExperienceBody({\n token,\n indexUrl,\n channelId,\n board: explicitBoard,\n sessionError,\n onRetrySession,\n onItemAction,\n onExportVideo,\n onPickLocalMedia,\n uploadMedia,\n audioRecorder,\n runMediaAction,\n apolloClient,\n createTile,\n media,\n designId,\n designTemplateId,\n artifactId,\n testID,\n}: CanvasExperienceProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const isDark = theme.isDark;\n // Host seams win (they can refresh auth); on binaries that predate them\n // the remote builds its own from what it already holds, so the editors\n // work OTA without an app release.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n // Server-backed Tasks: point the Task API at this session before any child effect resumes a run.\n useMemo(() => configureServerTasks({ token, indexUrl }), [token, indexUrl]);\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n const cachedBoards =\n getCachedCanvasBoards(indexUrl) ?? (apolloClient ? readCachedCanvasBoards(apolloClient) : null);\n const [boards, setBoards] = useState<CanvasBoardSummary[]>(() => cachedBoards ?? []);\n /** Live boards for placement guesses outside a state updater. */\n const boardsRef = useRef(boards);\n boardsRef.current = boards;\n const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);\n const [error, setError] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(false);\n const [gridAgentOpen, setGridAgentOpen] = useState(false);\n const [generation, setGeneration] = useState(0);\n const [mediaBusy, setMediaBusy] = useState(false);\n const [uploadStatus, setUploadStatus] = useState<string | null>(null);\n /** A short home notice (the grid has no other toast). */\n const [homeNotice, setHomeNotice] = useState<string | null>(null);\n useEffect(() => {\n if (!homeNotice) return undefined;\n const timer = setTimeout(() => setHomeNotice(null), 3200);\n return () => clearTimeout(timer);\n }, [homeNotice]);\n /** The design category gallery (a Design & write tile, or \"See all\"). */\n const [designGallery, setDesignGallery] = useState<DesignCategory | null>(null);\n\n const lastSavedByIdRef = useRef<Record<string, string>>({});\n /** The first index read has landed (or failed): deep links wait for it, so the\n * fetch's wholesale `setBoards` cannot drop a board a link just made. */\n const [boardsSettled, setBoardsSettled] = useState(false);\n\n const skipFetch = Boolean(explicitBoard);\n\n // The Tasks sheet lives in the dock; what it cannot learn from its props (the open board, how to open another).\n const tasksBoardsRef = useRef(boards);\n tasksBoardsRef.current = boards;\n useEffect(() => {\n setCanvasTasksHost({\n openBoardId: selectedId,\n openBoard: (id) => setSelectedId(id),\n boardLabel: (id) => tasksBoardsRef.current.find((entry) => entry.channelId === id)?.title || undefined,\n runAction: effectiveRunAction,\n });\n }, [selectedId, effectiveRunAction]);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n setBoardsSettled(true);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n setBoardsSettled(true);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n // Presigned link upkeep (web pullBoard): renew an opened board's expiring\n // links so the auto-save below persists fresh URLs.\n useMediaSigning(token, indexUrl);\n useBoardMediaRefresh(selected?.channelId, selected?.board.items, effectiveRunAction, (boardId, renewals) =>\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== boardId) return entry;\n const items = applySrcRenewals(entry.board.items, renewals);\n return items === entry.board.items ? entry : { ...entry, board: { ...entry.board, items } };\n }),\n ),\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Docs open the native docs editor on a new doc (web Studios -> Docs).\n if (studio === 'docs') {\n setDocEntry({ docId: null });\n return;\n }\n // Match web studios: carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n if (studio === 'carousel') setDesignEntry({ categoryId: 'carousel' });\n else if (studio === 'flyers') setDesignEntry({ categoryId: 'flyer' });\n else setDesignEntry({ kind: 'design' });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n // A delete must leave a tombstone, or web's channel\n // drain puts the media straight back (web #530).\n board: withTombstones(entry.board, board),\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n // Web `mediaItemsFor`: fanned across free grid slots, each\n // tile in the picked media's own shape (not stacked at 100,100).\n const placed = mediaItemsFor(entry.board.items, picked.map(placementForPicked));\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({ ...item, ...placed[i], id: item.id || placed[i].id })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(\n selected.board.items,\n selected.board.zoom,\n selected.title,\n selected.board.dismissed,\n );\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n /** Home hero / look seeds: VideoGeneratorExperience initialAspect / initialResolution / initialReferenceUrl. */\n aspect?: string;\n resolution?: string;\n referenceImageUrl?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** The durable export (canvasTasks kind 'export') the editor overlay is following. */\n const [exportTaskId, setExportTaskId] = useState<string | null>(null);\n const exportTask = useCanvasTask(exportTaskId);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<DesignEntry | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n /** Studio designs (`deck:` / `flyer:` rows, the web Design Studio's own) for Your work. */\n const [studioDesigns, setStudioDesigns] = useState<DesignArtifact[]>([]);\n /** Docs editor screen: a saved doc by id, or a new doc (null id). */\n const [docEntry, setDocEntry] = useState<{ docId: string | null } | null>(null);\n /** Rich-text docs (`doc:` rows, the web docs editor's own) for Your work. */\n const [workDocs, setWorkDocs] = useState<DocArtifact[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n /** Your work: the design index read (web `useWorkArtifacts`), 96 rows once \"Show all\" is open. */\n const [studioMore, setStudioMore] = useState(false);\n const [studioError, setStudioError] = useState<string | null>(null);\n const [workExpanded, setWorkExpanded] = useState(false);\n const [studioRead, setStudioRead] = useState(0);\n /** Home \"See all\" / hero \"Start from a template\": one gallery with source chips. */\n const [homeGallery, setHomeGallery] = useState<HomeGallerySource | null>(null);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry || docEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n const limit = workExpanded ? WORK_ARTIFACTS.expanded : WORK_ARTIFACTS.collapsed;\n void listDesignArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n // A failed refresh keeps the list it had; only an empty one reports the error.\n if (result.designs.length || !result.error) setStudioDesigns(result.designs);\n setStudioMore(result.more);\n setStudioError(result.error);\n });\n void listDocArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n if (result.docs.length || !result.error) setWorkDocs(result.docs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, docEntry, generation, workExpanded, studioRead]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const placement = placementFor(type, src, opts);\n const target = boardsRef.current.find((entry) => entry.channelId === selectedId) ?? boardsRef.current[0];\n // Best guess for the caller; the updater re-places against the live items.\n const item: CanvasItem = mediaItemsFor(target?.board.items ?? [], [placement])[0];\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const [placed] = mediaItemsFor(entry.board.items, [{ ...placement, id: item.id }]);\n const items = [...entry.board.items, placed];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = mediaItemsFor([], [placementFor(type, src, opts)])[0];\n const entry = untitledBoard();\n const items = [item];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n // New media: the old short link would point at the old object.\n item.id === itemId ? { ...item, src, share: undefined, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n // Durable lane: compiled timeline (transitions, segments, scene\n // layers) rendered detached on the connector, followed as a task\n // that survives the editor closing and an app relaunch. It falls\n // back to the client chain itself when SUBMIT is unavailable.\n void startExportTask(runAction, {\n spec,\n boardId: selectedId ?? '',\n brief: editorSeed?.projectTitle || selected?.board.title || selected?.title || 'Video export',\n upload,\n })\n .then((id) => setExportTaskId(id))\n .catch(() => {\n setExporting({ stage: 'Starting render' });\n return renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo, selectedId, editorSeed, selected]);\n\n // A finished durable export lands on the canvas like the old inline one.\n useEffect(() => {\n if (!exportTask || exportTask.state !== 'succeeded' || exportTask.delivered || !exportTask.result?.url) return;\n markTaskDelivered(exportTask.id);\n addRenderedVideo(exportTask.result.url);\n setEditorSeed(null);\n setExportTaskId(null);\n }, [exportTask, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n /** Home's Photo / Audio editor: pick the file first, then edit it on a fresh board (web opens its upload screen). */\n const pickThenEdit = useCallback(\n async (kind: 'image' | 'audio') => {\n if (!onPickLocalMedia) return;\n try {\n const picked = await onPickLocalMedia(undefined, kind === 'image' ? 'library' : 'file');\n const first = picked.find((p) => p.type === kind);\n if (!first) return;\n const item = openFreshBoardWithItem(kind, first.src, {\n name: first.generatedAssetName,\n ...(first.width > 0 && first.height > 0\n ? { size: { width: first.width, height: first.height } }\n : {}),\n });\n setMediaEdit({ kind, item });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] pick for editor failed:', err);\n }\n }\n },\n [onPickLocalMedia, openFreshBoardWithItem],\n );\n\n /** Tiles home can run here: the photo/audio editors need a picker and a connector runner. */\n const canRunCreate = useCallback(\n (action: CreateAction) => {\n // `web` tiles (presentation, banner, brochure...) open the native design studio.\n if (action.type === 'web') return true;\n return (\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction)\n );\n },\n [onPickLocalMedia, effectiveRunAction],\n );\n const createGroups = useMemo(() => visibleCreateGroups(canRunCreate), [canRunCreate]);\n\n /**\n * Screen one's Create tile (web `actFromHome`): a design kind opens the\n * design studio; a generator or studio opens on a fresh board, so what it\n * makes lands there and closing it leaves a canvas, not someone's old board.\n */\n const handleCreate = useCallback(\n (action: CreateAction) => {\n if (isDocsCreate(action)) {\n setDocEntry({ docId: null });\n return;\n }\n if (action.type === 'web') {\n setDesignEntry(designEntryForCreate(action.create));\n return;\n }\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Slides are a presentation in the design studio (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ categoryId: 'presentation' });\n return;\n }\n handleNewCanvas();\n if (action.mode === 'clips') setVideoClips('url');\n else setGenerator({ mode: action.mode });\n return;\n }\n if (action.studio === 'image' || action.studio === 'audio') {\n void pickThenEdit(action.studio);\n return;\n }\n handleNewCanvas();\n switch (action.studio) {\n case 'record':\n setShowRecorder(true);\n return;\n case 'ai-cut':\n handleDockStudio('agent');\n return;\n case 'set':\n handleDockStudio('set3d');\n return;\n default:\n handleDockStudio(action.studio);\n }\n },\n [handleNewCanvas, handleDockStudio, pickThenEdit],\n );\n\n /**\n * Catalog reads for \"Templates for you\" and the category gallery: the\n * backend directly (studio catalog's lane), else the host's Apollo client.\n */\n const loadDesignCatalog = useMemo<LoadDesignCatalog | undefined>(() => {\n const graphqlUrl = indexUrl ? deriveBackendGraphqlUrl(indexUrl) : null;\n if (graphqlUrl) return (group, opts) => fetchDesignCatalog(graphqlUrl, token, group, opts);\n if (apolloClient) return (group, opts) => fetchDesignCatalogViaClient(apolloClient, group, opts);\n return undefined;\n }, [indexUrl, token, apolloClient]);\n\n /** Web TemplateRails: 12 flyers and 12 slides, interleaved over two rows. */\n const [templateRails, setTemplateRails] = useState<TemplateRailsState | undefined>(undefined);\n const [templateRailsRead, setTemplateRailsRead] = useState(0);\n useEffect(() => {\n if (!loadDesignCatalog || skipFetch) {\n setTemplateRails(undefined);\n return undefined;\n }\n let live = true;\n setTemplateRails((prev) => ({ status: 'loading', rows: prev?.rows ?? [[], []] }));\n const read = (group: 'canvas-flyer' | 'canvas-presentation') =>\n loadDesignCatalog(group, { limit: 12, offset: 0 }).then(\n (page) => ({ ok: true as const, cards: page.cards }),\n () => ({ ok: false as const, cards: [] }),\n );\n void Promise.all([read('canvas-flyer'), read('canvas-presentation')]).then(([flyers, slides]) => {\n if (!live) return;\n const rows = interleaveTemplateRows(flyers.cards, slides.cards);\n setTemplateRails({ status: flyers.ok && slides.ok ? 'ready' : 'failed', rows });\n });\n return () => {\n live = false;\n };\n }, [loadDesignCatalog, skipFetch, templateRailsRead]);\n\n /** A Design & write tile with a gallery opens it; doc, custom and t-shirt run their own action. */\n const openCategory = useCallback((tileId: string): boolean => {\n const category = designCategoryFor(tileId);\n if (!category) return false;\n setDesignGallery(category);\n return true;\n }, []);\n\n /** A catalog template opens natively in the design studio. */\n const openTemplate = useCallback((templateId: string) => {\n setDesignGallery(null);\n setDesignEntry({ templateId });\n }, []);\n\n /** \"Use this prompt\" on a Seedance clip: a fresh canvas, the video generator seeded with it. */\n const handleShowcasePrompt = useCallback(\n (clip: ShowcaseClip) => {\n handleNewCanvas();\n setGenerator({ mode: 'video', initialPrompt: clip.prompt });\n },\n [handleNewCanvas],\n );\n\n /**\n * Home hero Generate (web `onStartWithPrompt`): a fresh canvas, the generator\n * seeded with the shot. A product reference reaches the video lane as its image item.\n */\n const handleStartWithPrompt = useCallback(\n (prompt: string, settings: HeroSettings) => {\n handleNewCanvas();\n setGenerator({\n mode: settings.mode,\n initialPrompt: prompt,\n aspect: settings.aspect,\n resolution: settings.resolution,\n ...(settings.referenceImageUrl ? { referenceImageUrl: settings.referenceImageUrl } : {}),\n });\n },\n [handleNewCanvas],\n );\n\n /** Hero Product chip: one device image, uploaded; its URL or null. */\n const pickHeroReference = useCallback(async (): Promise<string | null> => {\n if (!onPickLocalMedia) return null;\n const picked = await onPickLocalMedia(undefined, 'library');\n return picked.find((it) => it.type === 'image')?.src ?? null;\n }, [onPickLocalMedia]);\n\n /** A media link (web `?media=`): a new board holding it, its editor open. */\n const openMediaLink = useCallback(\n async (link: MediaLink) => {\n const size =\n link.kind === 'image'\n ? await new Promise<{ width: number; height: number } | undefined>((resolve) => {\n // Whichever comes first, the size or the deadline, decides the tile.\n const timer = setTimeout(() => resolve(undefined), MEDIA_LINK_MEASURE_MS);\n RNImage.getSize(\n link.src,\n (width, height) => {\n clearTimeout(timer);\n resolve(width > 0 && height > 0 ? { width, height } : undefined);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n })\n : undefined;\n const item = openFreshBoardWithItem(link.kind, link.src, {\n name:\n link.name ?? link.fileName?.replace(/\\.[^.]+$/, '') ?? (link.kind === 'image' ? 'Image' : 'Video'),\n ...(size ? { size } : {}),\n });\n if (link.kind === 'video') setEditorSeed({ itemId: item.id });\n else if (effectiveRunAction) setMediaEdit({ kind: 'image', item });\n },\n [openFreshBoardWithItem, effectiveRunAction],\n );\n\n // Deep links run once. A design opens straight away; media and Create\n // tiles wait for the first index read, whose wholesale `setBoards` would\n // otherwise drop the board they make.\n const designLinkRanRef = useRef(false);\n useEffect(() => {\n if (designLinkRanRef.current || skipFetch) return;\n designLinkRanRef.current = true;\n // A doc link (`?artifact=doc:<uuid>`) opens the docs editor, never the design studio.\n const docLink = parseDocLink({ designId, artifactId });\n if (docLink) {\n setDocEntry({ docId: docLink });\n return;\n }\n // A template link opens the template itself in the design studio; only a saved\n // design (designId / artifactId) wins over it.\n const templateId = designId || artifactId ? null : designTemplateIdOf(designTemplateId);\n if (templateId) {\n setDesignEntry({ templateId });\n return;\n }\n const entry = parseDesignLink({ designId, designTemplateId, artifactId });\n if (entry) setDesignEntry(entry);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const boardLinkRanRef = useRef(false);\n useEffect(() => {\n if (boardLinkRanRef.current || skipFetch || !boardsSettled) return;\n boardLinkRanRef.current = true;\n if (parseDesignLink({ designId, designTemplateId, artifactId })) return;\n if (parseDocLink({ designId, artifactId })) return;\n const mediaLink = parseMediaLink(media);\n if (mediaLink) {\n void openMediaLink(mediaLink);\n return;\n }\n const action = parseCreateTileLink(createTile);\n if (action) handleCreate(action);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardsSettled, skipFetch]);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={\n generator.item ??\n (generator.referenceImageUrl && generator.mode === 'video'\n ? {\n id: 'hero-reference',\n type: 'image',\n src: generator.referenceImageUrl,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n zIndex: 0,\n }\n : undefined)\n }\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n initialAspect={generator.aspect}\n initialResolution={generator.resolution}\n initialReferenceUrl={generator.referenceImageUrl}\n boardId={selectedId}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n token={token}\n indexUrl={indexUrl}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n runAction={effectiveRunAction}\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n libraryItems: selected?.board.items ?? [],\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exportTask ? (\n <View style={styles.exportOverlay}>\n <ExportTaskCard\n task={exportTask}\n onDismiss={() => {\n dismissCanvasTask(exportTask.id);\n setExportTaskId(null);\n }}\n onBackground={() => setExportTaskId(null)}\n />\n </View>\n ) : exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={({ pressed }) => [styles.exportDismiss, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color={theme.edInk} />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (docEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DocsEditorExperience\n token={token}\n indexUrl={indexUrl}\n docId={docEntry.docId}\n onClose={() => setDocEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n />\n </View>\n );\n }\n\n if (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected && homeGallery) {\n return (\n <View style={styles.fill} testID={testID}>\n <TemplatesGallery\n initialSource={homeGallery}\n runAction={effectiveRunAction}\n loadDesignCatalog={loadDesignCatalog}\n onClose={() => setHomeGallery(null)}\n onUseVideoTemplate={(template) => {\n setHomeGallery(null);\n handleNewCanvas();\n setGenerator({\n mode: 'video',\n initialPrompt: template.prompt,\n ...(template.aspect ? { aspect: template.aspect } : {}),\n });\n }}\n onBlank={(size) => {\n setHomeGallery(null);\n setDesignEntry({ sizeId: size.id });\n }}\n onOpenTemplate={(card) => {\n setHomeGallery(null);\n openTemplate(card.id);\n }}\n />\n </View>\n );\n }\n\n if (!selected && designGallery) {\n const category = designGallery;\n return (\n <View style={styles.fill} testID={testID}>\n <DesignCategoryGallery\n category={category}\n load={loadDesignCatalog}\n onClose={() => setDesignGallery(null)}\n onBlank={(size) => {\n // Every category's blank opens at its own size in the design studio.\n setDesignGallery(null);\n setDesignEntry({ sizeId: size.id });\n }}\n onOpenTemplate={(card) => openTemplate(card.id)}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(designChannelId) => setDesignEntry({ channelId: designChannelId })}\n studioDesigns={studioDesigns}\n onOpenStudioDesign={(id) => setDesignEntry({ artifactId: id })}\n docs={workDocs}\n onOpenDoc={(id) => setDocEntry({ docId: id })}\n onAskAgent={handleAskAgentFromGrid}\n createGroups={createGroups}\n onCreate={handleCreate}\n runAction={effectiveRunAction}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n ...(look.aspect ? { aspect: look.aspect } : {}),\n });\n }}\n onOpenCategory={openCategory}\n templateRails={templateRails}\n onOpenTemplate={openTemplate}\n onSeeAllTemplates={() => setHomeGallery('flyers')}\n onRetryTemplates={() => setTemplateRailsRead((n) => n + 1)}\n showcase={SEEDANCE_SHOWCASE}\n onUseShowcasePrompt={handleShowcasePrompt}\n onStartWithPrompt={handleStartWithPrompt}\n onPickReference={onPickLocalMedia ? pickHeroReference : undefined}\n onBrowseTemplates={() => setHomeGallery('video')}\n studioMore={studioMore}\n studioError={studioError}\n onRetryStudioDesigns={() => setStudioRead((n) => n + 1)}\n onExpandWork={setWorkExpanded}\n currentSessionId={channelId}\n onOpenSession={(sessionId) => {\n setBoards((prev) =>\n prev.some((entry) => entry.channelId === sessionId)\n ? prev\n : [untitledBoard(sessionId), ...prev],\n );\n setSelectedId(sessionId);\n }}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n onOpenDesign={(artifactId) => setDesignEntry({ artifactId })}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPickDeviceStill={\n onPickLocalMedia\n ? async () => {\n // A generator reference slot: the connector fetches it, so it must be hosted.\n const picked = await onPickLocalMedia(undefined, 'library');\n const first = picked.find((p) => p.type === 'image');\n if (!first) return null;\n return /^https?:/i.test(first.src) || !effectiveUploadMedia\n ? first.src\n : effectiveUploadMedia(first.src);\n }\n : undefined\n }\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ categoryId: 'presentation' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n shareLinks={token && indexUrl ? { token, indexUrl } : undefined}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color={theme.info} /> : null}\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {uploadStatus}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction Notice({\n isDark,\n title,\n detail,\n fine,\n primaryLabel,\n onPrimary,\n onRetry,\n retryLabel = 'Try again',\n}: {\n isDark: boolean;\n title: string;\n detail: string;\n /** Session/context fine print - the who-and-where behind the state. */\n fine?: string;\n primaryLabel?: string;\n onPrimary?: () => void;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]} accessibilityRole=\"header\">\n {title}\n </Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary || onRetry ? (\n <View style={styles.noticeActions}>\n {onPrimary ? <ActionButton label={primaryLabel ?? 'Create'} onPress={onPrimary} /> : null}\n {onRetry ? (\n <ActionButton\n label={retryLabel}\n onPress={onRetry}\n variant={onPrimary ? 'secondary' : 'primary'}\n />\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\n/**\n * The exposed experience: mounts the canvas theme (OS / host mode / persisted\n * toggle) so every screen below can call useCanvasTheme().\n */\nexport function CanvasExperience(props: CanvasExperienceProps) {\n const hostMode = props.isDark == null ? null : props.isDark ? 'dark' : 'light';\n return (\n <CanvasThemeProvider mode={hostMode}>\n <CanvasExperienceBody {...props} />\n </CanvasThemeProvider>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n noticeActions: {\n marginTop: SPACE.xl,\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: SPACE.sm,\n },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: SPACE.md,\n right: SPACE.lg,\n zIndex: 4,\n },\n center: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.xxl,\n paddingVertical: SPACE.xl,\n backgroundColor: theme.background,\n },\n title: {\n ...TYPE.title,\n fontSize: 19,\n lineHeight: 24,\n color: theme.foreground,\n textAlign: 'center',\n marginBottom: SPACE.sm,\n },\n detail: { ...TYPE.body, color: theme.mutedForeground, textAlign: 'center', maxWidth: 320 },\n fine: {\n ...TYPE.caption,\n fontWeight: '400',\n marginTop: SPACE.md,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n spaced: { marginTop: SPACE.md - 2 },\n textLight: { color: theme.foreground },\n textMuted: { color: theme.mutedForeground },\n backPill: {\n position: 'absolute',\n top: SPACE.md,\n left: SPACE.md,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm - 2,\n maxWidth: 220,\n minHeight: 40,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n backLabel: { ...TYPE.label, color: theme.foreground },\n uploadToast: {\n position: 'absolute',\n top: 60,\n left: SPACE.lg,\n right: SPACE.lg,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md - 2,\n minHeight: 48,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.isDark ? theme.card : theme.surface,\n borderWidth: theme.isDark ? StyleSheet.hairlineWidth : 0,\n borderColor: theme.border,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.4 : 0.12,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: 6 },\n elevation: 8,\n },\n uploadToastText: { ...TYPE.label, fontSize: 14, flex: 1, color: theme.foreground },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: SPACE.xxl,\n },\n exportCard: {\n minWidth: 240,\n maxWidth: 320,\n alignItems: 'center',\n gap: SPACE.md,\n backgroundColor: theme.edPanel,\n borderRadius: RADIUS.xl,\n paddingVertical: SPACE.xl,\n paddingHorizontal: SPACE.xl,\n },\n exportStage: { ...TYPE.body, fontSize: 14, color: theme.edInk2, textAlign: 'center' },\n exportError: { ...TYPE.title, color: theme.edDanger },\n exportDismiss: {\n marginTop: SPACE.xs,\n minHeight: 40,\n justifyContent: 'center',\n backgroundColor: theme.edRaisedHi,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.lg + 2,\n },\n exportDismissLabel: { ...TYPE.label, color: theme.edInk },\n }),\n);\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask","artifactId"],"mappings":"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"}
|