@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
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useRef,useMemo}from'react';import {View,Text,TextInput,PanResponder,Switch,ScrollView,Image,StyleSheet}from'react-native';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,HIT,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
const clamp = (v, lo, hi) => Math.min(hi, Math.max(lo, v));
|
|
21
|
+
function snapToStep(raw, min, max, step) {
|
|
22
|
+
const snapped = step > 0 ? Math.round((raw - min) / step) * step + min : raw;
|
|
23
|
+
return clamp(Number(snapped.toFixed(6)), min, max);
|
|
24
|
+
}
|
|
25
|
+
function SliderRow({
|
|
26
|
+
label,
|
|
27
|
+
value,
|
|
28
|
+
min,
|
|
29
|
+
max,
|
|
30
|
+
step = 1,
|
|
31
|
+
format,
|
|
32
|
+
onChange,
|
|
33
|
+
disabled
|
|
34
|
+
}) {
|
|
35
|
+
const styles = makeStyles(useCanvasTheme());
|
|
36
|
+
const width = useRef(1);
|
|
37
|
+
const live = useRef({
|
|
38
|
+
min,
|
|
39
|
+
max,
|
|
40
|
+
step,
|
|
41
|
+
onChange,
|
|
42
|
+
disabled
|
|
43
|
+
});
|
|
44
|
+
live.current = {
|
|
45
|
+
min,
|
|
46
|
+
max,
|
|
47
|
+
step,
|
|
48
|
+
onChange,
|
|
49
|
+
disabled
|
|
50
|
+
};
|
|
51
|
+
const fromX = (x) => {
|
|
52
|
+
const {
|
|
53
|
+
min: lo,
|
|
54
|
+
max: hi,
|
|
55
|
+
step: st
|
|
56
|
+
} = live.current;
|
|
57
|
+
return snapToStep(lo + clamp(x, 0, width.current) / width.current * (hi - lo), lo, hi, st);
|
|
58
|
+
};
|
|
59
|
+
const responder = useMemo(
|
|
60
|
+
() => PanResponder.create({
|
|
61
|
+
onStartShouldSetPanResponder: () => !live.current.disabled,
|
|
62
|
+
onMoveShouldSetPanResponder: () => !live.current.disabled,
|
|
63
|
+
// A horizontal drag inside a vertical sheet must stay with the slider.
|
|
64
|
+
onPanResponderTerminationRequest: () => false,
|
|
65
|
+
onPanResponderGrant: (e) => live.current.onChange(fromX(e.nativeEvent.locationX)),
|
|
66
|
+
onPanResponderMove: (e) => live.current.onChange(fromX(e.nativeEvent.locationX))
|
|
67
|
+
}),
|
|
68
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
|
+
[]
|
|
70
|
+
);
|
|
71
|
+
const frac = max > min ? (clamp(value, min, max) - min) / (max - min) : 0;
|
|
72
|
+
return /* @__PURE__ */ jsxs(View, { style: [styles.sliderRow, disabled && styles.off], children: [
|
|
73
|
+
/* @__PURE__ */ jsxs(View, { style: styles.sliderHead, children: [
|
|
74
|
+
/* @__PURE__ */ jsx(Text, { style: styles.label, children: label }),
|
|
75
|
+
/* @__PURE__ */ jsx(Text, { style: styles.value, children: format ? format(value) : String(Math.round(value * 100) / 100) })
|
|
76
|
+
] }),
|
|
77
|
+
/* @__PURE__ */ jsxs(View, __spreadProps(__spreadValues({ style: styles.track, onLayout: (e) => {
|
|
78
|
+
width.current = Math.max(1, e.nativeEvent.layout.width);
|
|
79
|
+
} }, responder.panHandlers), { accessibilityRole: "adjustable", accessibilityLabel: label, accessibilityValue: {
|
|
80
|
+
min,
|
|
81
|
+
max,
|
|
82
|
+
now: value
|
|
83
|
+
}, accessibilityActions: [{
|
|
84
|
+
name: "increment"
|
|
85
|
+
}, {
|
|
86
|
+
name: "decrement"
|
|
87
|
+
}], onAccessibilityAction: (event) => {
|
|
88
|
+
const dir = event.nativeEvent.actionName === "increment" ? 1 : -1;
|
|
89
|
+
onChange(snapToStep(value + dir * step, min, max, step));
|
|
90
|
+
}, children: [
|
|
91
|
+
/* @__PURE__ */ jsx(View, { style: styles.rail, pointerEvents: "none", children: /* @__PURE__ */ jsx(View, { style: [styles.fill, {
|
|
92
|
+
width: `${frac * 100}%`
|
|
93
|
+
}] }) }),
|
|
94
|
+
/* @__PURE__ */ jsx(View, { pointerEvents: "none", style: [styles.knob, {
|
|
95
|
+
left: `${frac * 100}%`
|
|
96
|
+
}] })
|
|
97
|
+
] }))
|
|
98
|
+
] });
|
|
99
|
+
}
|
|
100
|
+
function NumberField({
|
|
101
|
+
label,
|
|
102
|
+
value,
|
|
103
|
+
onChange,
|
|
104
|
+
disabled,
|
|
105
|
+
suffix
|
|
106
|
+
}) {
|
|
107
|
+
const theme = useCanvasTheme();
|
|
108
|
+
const styles = makeStyles(theme);
|
|
109
|
+
const [draft, setDraft] = useState(null);
|
|
110
|
+
const shown = draft != null ? draft : String(Number.isFinite(value) ? Math.round(value * 1e3) / 1e3 : 0);
|
|
111
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.numField, children: [
|
|
112
|
+
/* @__PURE__ */ jsxs(Text, { style: styles.numLabel, children: [
|
|
113
|
+
label,
|
|
114
|
+
suffix ? ` (${suffix})` : ""
|
|
115
|
+
] }),
|
|
116
|
+
/* @__PURE__ */ jsx(TextInput, { value: shown, editable: !disabled, keyboardType: "numbers-and-punctuation", onChangeText: (text) => {
|
|
117
|
+
setDraft(text);
|
|
118
|
+
const next = Number(text);
|
|
119
|
+
if (text.trim() !== "" && Number.isFinite(next)) onChange(next);
|
|
120
|
+
}, onBlur: () => setDraft(null), style: [styles.numInput, disabled && styles.off], placeholderTextColor: theme.edInk3, accessibilityLabel: label })
|
|
121
|
+
] });
|
|
122
|
+
}
|
|
123
|
+
function TextField({
|
|
124
|
+
label,
|
|
125
|
+
value,
|
|
126
|
+
onChange,
|
|
127
|
+
placeholder,
|
|
128
|
+
multiline
|
|
129
|
+
}) {
|
|
130
|
+
const theme = useCanvasTheme();
|
|
131
|
+
const styles = makeStyles(theme);
|
|
132
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.block, children: [
|
|
133
|
+
label ? /* @__PURE__ */ jsx(Text, { style: [styles.label, styles.blockLabel], children: label }) : null,
|
|
134
|
+
/* @__PURE__ */ jsx(TextInput, { value, onChangeText: onChange, placeholder, placeholderTextColor: theme.edInk3, multiline, autoCapitalize: "none", autoCorrect: false, style: [styles.textInput, multiline && styles.textInputMulti], accessibilityLabel: label != null ? label : placeholder })
|
|
135
|
+
] });
|
|
136
|
+
}
|
|
137
|
+
function ChoiceRow({
|
|
138
|
+
label,
|
|
139
|
+
options,
|
|
140
|
+
value,
|
|
141
|
+
onChange
|
|
142
|
+
}) {
|
|
143
|
+
const styles = makeStyles(useCanvasTheme());
|
|
144
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.block, children: [
|
|
145
|
+
label ? /* @__PURE__ */ jsx(Text, { style: [styles.label, styles.blockLabel], children: label }) : null,
|
|
146
|
+
/* @__PURE__ */ jsx(View, { style: styles.chips, children: options.map((o) => {
|
|
147
|
+
const on = o.value === value;
|
|
148
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(o.value), accessibilityRole: "button", accessibilityState: {
|
|
149
|
+
selected: on
|
|
150
|
+
}, style: ({
|
|
151
|
+
pressed
|
|
152
|
+
}) => [styles.chip, on && styles.chipOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, on && styles.chipLabelOn], children: o.label }) }, String(o.value));
|
|
153
|
+
}) })
|
|
154
|
+
] });
|
|
155
|
+
}
|
|
156
|
+
function ToggleRow({
|
|
157
|
+
label,
|
|
158
|
+
value,
|
|
159
|
+
onChange
|
|
160
|
+
}) {
|
|
161
|
+
const theme = useCanvasTheme();
|
|
162
|
+
const styles = makeStyles(theme);
|
|
163
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.toggleRow, children: [
|
|
164
|
+
/* @__PURE__ */ jsx(Text, { style: styles.toggleLabel, children: label }),
|
|
165
|
+
/* @__PURE__ */ jsx(Switch, { value, onValueChange: onChange, trackColor: {
|
|
166
|
+
false: theme.edRaisedHi,
|
|
167
|
+
true: theme.edAccent
|
|
168
|
+
}, accessibilityLabel: label })
|
|
169
|
+
] });
|
|
170
|
+
}
|
|
171
|
+
function ApplyButton({
|
|
172
|
+
label,
|
|
173
|
+
onPress,
|
|
174
|
+
disabled,
|
|
175
|
+
tone = "solid"
|
|
176
|
+
}) {
|
|
177
|
+
const styles = makeStyles(useCanvasTheme());
|
|
178
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress, disabled, accessibilityRole: "button", accessibilityState: {
|
|
179
|
+
disabled: Boolean(disabled)
|
|
180
|
+
}, style: ({
|
|
181
|
+
pressed
|
|
182
|
+
}) => [tone === "solid" ? styles.apply : styles.applySoft, disabled && styles.off, pressedStyle(pressed && !disabled)], children: /* @__PURE__ */ jsx(Text, { style: tone === "solid" ? styles.applyLabel : styles.applySoftLabel, children: label }) });
|
|
183
|
+
}
|
|
184
|
+
function SwatchRow({
|
|
185
|
+
label,
|
|
186
|
+
colors,
|
|
187
|
+
value,
|
|
188
|
+
onChange
|
|
189
|
+
}) {
|
|
190
|
+
const styles = makeStyles(useCanvasTheme());
|
|
191
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.block, children: [
|
|
192
|
+
label ? /* @__PURE__ */ jsx(Text, { style: [styles.label, styles.blockLabel], children: label }) : null,
|
|
193
|
+
/* @__PURE__ */ jsx(View, { style: styles.chips, children: colors.map((c) => /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(c), accessibilityRole: "button", accessibilityLabel: c, accessibilityState: {
|
|
194
|
+
selected: c.toLowerCase() === value.toLowerCase()
|
|
195
|
+
}, style: [styles.swatch, {
|
|
196
|
+
backgroundColor: c
|
|
197
|
+
}, c.toLowerCase() === value.toLowerCase() && styles.swatchOn] }, c)) })
|
|
198
|
+
] });
|
|
199
|
+
}
|
|
200
|
+
function MediaUrlPicker({
|
|
201
|
+
label,
|
|
202
|
+
items,
|
|
203
|
+
value,
|
|
204
|
+
onChange,
|
|
205
|
+
placeholder = "https://..."
|
|
206
|
+
}) {
|
|
207
|
+
const theme = useCanvasTheme();
|
|
208
|
+
const styles = makeStyles(theme);
|
|
209
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.block, children: [
|
|
210
|
+
label ? /* @__PURE__ */ jsx(Text, { style: [styles.label, styles.blockLabel], children: label }) : null,
|
|
211
|
+
items.length ? /* @__PURE__ */ jsx(ScrollView, { horizontal: true, style: styles.hscroll, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.pickRow, keyboardShouldPersistTaps: "handled", children: items.map((item) => {
|
|
212
|
+
var _a;
|
|
213
|
+
const on = item.src === value;
|
|
214
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(on ? "" : item.src), accessibilityRole: "button", accessibilityLabel: (_a = item.label) != null ? _a : item.kind, accessibilityState: {
|
|
215
|
+
selected: on
|
|
216
|
+
}, style: [item.kind === "image" ? styles.pickThumb : styles.pickChip, on && styles.pickOn], children: item.kind === "image" ? /* @__PURE__ */ jsx(Image, { source: {
|
|
217
|
+
uri: item.src
|
|
218
|
+
}, style: styles.pickImg }) : /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, numberOfLines: 1, children: item.label || (item.kind === "audio" ? "Audio" : "Video") }) }, item.id);
|
|
219
|
+
}) }) : null,
|
|
220
|
+
/* @__PURE__ */ jsx(TextInput, { value, onChangeText: onChange, placeholder, placeholderTextColor: theme.edInk3, autoCapitalize: "none", autoCorrect: false, style: styles.textInput, accessibilityLabel: label != null ? label : "Media URL" })
|
|
221
|
+
] });
|
|
222
|
+
}
|
|
223
|
+
const SWATCHES = ["#ef4444", "#f97316", "#facc15", "#22c55e", "#3b82f6", "#a855f7", "#ffffff", "#000000"];
|
|
224
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
225
|
+
off: {
|
|
226
|
+
opacity: 0.4
|
|
227
|
+
},
|
|
228
|
+
block: {
|
|
229
|
+
marginBottom: SPACE.sm
|
|
230
|
+
},
|
|
231
|
+
blockLabel: {
|
|
232
|
+
marginBottom: SPACE.xs
|
|
233
|
+
},
|
|
234
|
+
label: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
235
|
+
color: theme.edInk2
|
|
236
|
+
}),
|
|
237
|
+
value: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
238
|
+
color: theme.edInk,
|
|
239
|
+
fontVariant: ["tabular-nums"]
|
|
240
|
+
}),
|
|
241
|
+
sliderRow: {
|
|
242
|
+
marginBottom: SPACE.sm
|
|
243
|
+
},
|
|
244
|
+
sliderHead: {
|
|
245
|
+
flexDirection: "row",
|
|
246
|
+
justifyContent: "space-between",
|
|
247
|
+
marginBottom: 2
|
|
248
|
+
},
|
|
249
|
+
track: {
|
|
250
|
+
height: 32,
|
|
251
|
+
justifyContent: "center"
|
|
252
|
+
},
|
|
253
|
+
rail: {
|
|
254
|
+
height: 4,
|
|
255
|
+
borderRadius: 2,
|
|
256
|
+
backgroundColor: theme.edRaisedHi,
|
|
257
|
+
overflow: "hidden"
|
|
258
|
+
},
|
|
259
|
+
fill: {
|
|
260
|
+
height: 4,
|
|
261
|
+
backgroundColor: theme.edInk
|
|
262
|
+
},
|
|
263
|
+
knob: {
|
|
264
|
+
position: "absolute",
|
|
265
|
+
width: 20,
|
|
266
|
+
height: 20,
|
|
267
|
+
marginLeft: -10,
|
|
268
|
+
borderRadius: 10,
|
|
269
|
+
backgroundColor: theme.edInk,
|
|
270
|
+
borderWidth: 3,
|
|
271
|
+
borderColor: theme.edPanel
|
|
272
|
+
},
|
|
273
|
+
numField: {
|
|
274
|
+
flex: 1,
|
|
275
|
+
minWidth: 64
|
|
276
|
+
},
|
|
277
|
+
numLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
278
|
+
color: theme.edInk3,
|
|
279
|
+
marginBottom: 2
|
|
280
|
+
}),
|
|
281
|
+
numInput: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
282
|
+
minHeight: 36,
|
|
283
|
+
borderRadius: RADIUS.sm,
|
|
284
|
+
paddingHorizontal: SPACE.sm,
|
|
285
|
+
backgroundColor: theme.edRaised,
|
|
286
|
+
color: theme.edInk,
|
|
287
|
+
fontVariant: ["tabular-nums"]
|
|
288
|
+
}),
|
|
289
|
+
textInput: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
290
|
+
fontSize: 14,
|
|
291
|
+
minHeight: 40,
|
|
292
|
+
borderRadius: RADIUS.md,
|
|
293
|
+
paddingHorizontal: SPACE.md,
|
|
294
|
+
paddingVertical: SPACE.sm,
|
|
295
|
+
backgroundColor: theme.edRaised,
|
|
296
|
+
color: theme.edInk
|
|
297
|
+
}),
|
|
298
|
+
textInputMulti: {
|
|
299
|
+
minHeight: 72,
|
|
300
|
+
textAlignVertical: "top"
|
|
301
|
+
},
|
|
302
|
+
chips: {
|
|
303
|
+
flexDirection: "row",
|
|
304
|
+
flexWrap: "wrap",
|
|
305
|
+
gap: SPACE.xs + 2
|
|
306
|
+
},
|
|
307
|
+
chip: {
|
|
308
|
+
minHeight: 34,
|
|
309
|
+
paddingHorizontal: SPACE.md,
|
|
310
|
+
borderRadius: RADIUS.pill,
|
|
311
|
+
alignItems: "center",
|
|
312
|
+
justifyContent: "center",
|
|
313
|
+
backgroundColor: theme.edRaised
|
|
314
|
+
},
|
|
315
|
+
chipOn: {
|
|
316
|
+
backgroundColor: theme.edInk
|
|
317
|
+
},
|
|
318
|
+
chipLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
319
|
+
color: theme.edInk
|
|
320
|
+
}),
|
|
321
|
+
chipLabelOn: {
|
|
322
|
+
color: theme.edOnInk
|
|
323
|
+
},
|
|
324
|
+
toggleRow: {
|
|
325
|
+
flexDirection: "row",
|
|
326
|
+
alignItems: "center",
|
|
327
|
+
justifyContent: "space-between",
|
|
328
|
+
minHeight: HIT
|
|
329
|
+
},
|
|
330
|
+
toggleLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
331
|
+
fontWeight: "500",
|
|
332
|
+
color: theme.edInk,
|
|
333
|
+
flex: 1
|
|
334
|
+
}),
|
|
335
|
+
apply: {
|
|
336
|
+
minHeight: HIT,
|
|
337
|
+
borderRadius: RADIUS.pill,
|
|
338
|
+
backgroundColor: theme.edInk,
|
|
339
|
+
alignItems: "center",
|
|
340
|
+
justifyContent: "center",
|
|
341
|
+
paddingHorizontal: SPACE.lg,
|
|
342
|
+
marginTop: SPACE.xs,
|
|
343
|
+
marginBottom: SPACE.sm
|
|
344
|
+
},
|
|
345
|
+
applyLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
346
|
+
color: theme.edOnInk
|
|
347
|
+
}),
|
|
348
|
+
applySoft: {
|
|
349
|
+
minHeight: 40,
|
|
350
|
+
borderRadius: RADIUS.pill,
|
|
351
|
+
backgroundColor: theme.edRaisedHi,
|
|
352
|
+
alignItems: "center",
|
|
353
|
+
justifyContent: "center",
|
|
354
|
+
paddingHorizontal: SPACE.lg,
|
|
355
|
+
marginBottom: SPACE.sm
|
|
356
|
+
},
|
|
357
|
+
applySoftLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
358
|
+
color: theme.edInk
|
|
359
|
+
}),
|
|
360
|
+
hscroll: {
|
|
361
|
+
flexGrow: 0,
|
|
362
|
+
marginBottom: SPACE.xs
|
|
363
|
+
},
|
|
364
|
+
pickRow: {
|
|
365
|
+
gap: SPACE.xs + 2
|
|
366
|
+
},
|
|
367
|
+
pickThumb: {
|
|
368
|
+
width: 52,
|
|
369
|
+
height: 52,
|
|
370
|
+
borderRadius: RADIUS.sm,
|
|
371
|
+
overflow: "hidden",
|
|
372
|
+
borderWidth: 2,
|
|
373
|
+
borderColor: "transparent",
|
|
374
|
+
backgroundColor: theme.edRaised
|
|
375
|
+
},
|
|
376
|
+
pickChip: {
|
|
377
|
+
minHeight: 36,
|
|
378
|
+
maxWidth: 160,
|
|
379
|
+
paddingHorizontal: SPACE.md,
|
|
380
|
+
borderRadius: RADIUS.pill,
|
|
381
|
+
borderWidth: 2,
|
|
382
|
+
borderColor: "transparent",
|
|
383
|
+
justifyContent: "center",
|
|
384
|
+
backgroundColor: theme.edRaised
|
|
385
|
+
},
|
|
386
|
+
pickOn: {
|
|
387
|
+
borderColor: theme.edAccent
|
|
388
|
+
},
|
|
389
|
+
pickImg: {
|
|
390
|
+
width: "100%",
|
|
391
|
+
height: "100%"
|
|
392
|
+
},
|
|
393
|
+
swatch: {
|
|
394
|
+
width: 30,
|
|
395
|
+
height: 30,
|
|
396
|
+
borderRadius: 15,
|
|
397
|
+
borderWidth: 2,
|
|
398
|
+
borderColor: theme.edLineHi
|
|
399
|
+
},
|
|
400
|
+
swatchOn: {
|
|
401
|
+
borderColor: theme.edAccent,
|
|
402
|
+
transform: [{
|
|
403
|
+
scale: 1.12
|
|
404
|
+
}]
|
|
405
|
+
}
|
|
406
|
+
}));export{ApplyButton,ChoiceRow,MediaUrlPicker,NumberField,SWATCHES,SliderRow,SwatchRow,TextField,ToggleRow,snapToStep};//# sourceMappingURL=editorControls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editorControls.js","sources":["../../../src/features/canvas/editorControls.tsx"],"sourcesContent":["/**\n * Small form controls the native media editors share (image, audio, set,\n * recorder): the phone twins of web `components/editor-controls` - SliderRow,\n * NumRow, SelectRow (as chips), CheckRow and ApplyBtn.\n *\n * The slider is a plain PanResponder track, so no native slider module is\n * needed in the OTA remote. Pressable comes from canvasUi (NativeWind drops\n * function styles on the react-native one).\n */\nimport React, { useMemo, useRef, useState } from 'react';\nimport {\n Image,\n PanResponder,\n ScrollView,\n StyleSheet,\n Switch,\n Text,\n TextInput,\n View,\n type LayoutChangeEvent,\n} from 'react-native';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\nconst clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v));\n\n/** Snap a raw value to the slider's step, inside its range. */\nexport function snapToStep(raw: number, min: number, max: number, step: number): number {\n const snapped = step > 0 ? Math.round((raw - min) / step) * step + min : raw;\n // Float noise from the step arithmetic (0.1 * 3) would print as 0.30000000000000004.\n return clamp(Number(snapped.toFixed(6)), min, max);\n}\n\nexport function SliderRow({\n label,\n value,\n min,\n max,\n step = 1,\n format,\n onChange,\n disabled,\n}: {\n label: string;\n value: number;\n min: number;\n max: number;\n step?: number;\n format?: (v: number) => string;\n onChange: (v: number) => void;\n disabled?: boolean;\n}) {\n const styles = makeStyles(useCanvasTheme());\n const width = useRef(1);\n const live = useRef({ min, max, step, onChange, disabled });\n live.current = { min, max, step, onChange, disabled };\n const fromX = (x: number) => {\n const { min: lo, max: hi, step: st } = live.current;\n return snapToStep(lo + (clamp(x, 0, width.current) / width.current) * (hi - lo), lo, hi, st);\n };\n const responder = useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => !live.current.disabled,\n onMoveShouldSetPanResponder: () => !live.current.disabled,\n // A horizontal drag inside a vertical sheet must stay with the slider.\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: (e) => live.current.onChange(fromX(e.nativeEvent.locationX)),\n onPanResponderMove: (e) => live.current.onChange(fromX(e.nativeEvent.locationX)),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n const frac = max > min ? (clamp(value, min, max) - min) / (max - min) : 0;\n return (\n <View style={[styles.sliderRow, disabled && styles.off]}>\n <View style={styles.sliderHead}>\n <Text style={styles.label}>{label}</Text>\n <Text style={styles.value}>{format ? format(value) : String(Math.round(value * 100) / 100)}</Text>\n </View>\n <View\n style={styles.track}\n onLayout={(e: LayoutChangeEvent) => {\n width.current = Math.max(1, e.nativeEvent.layout.width);\n }}\n {...responder.panHandlers}\n accessibilityRole=\"adjustable\"\n accessibilityLabel={label}\n accessibilityValue={{ min, max, now: value }}\n accessibilityActions={[{ name: 'increment' }, { name: 'decrement' }]}\n onAccessibilityAction={(event) => {\n const dir = event.nativeEvent.actionName === 'increment' ? 1 : -1;\n onChange(snapToStep(value + dir * step, min, max, step));\n }}\n >\n <View style={styles.rail} pointerEvents=\"none\">\n <View style={[styles.fill, { width: `${frac * 100}%` }]} />\n </View>\n <View pointerEvents=\"none\" style={[styles.knob, { left: `${frac * 100}%` }]} />\n </View>\n </View>\n );\n}\n\n/** A number typed in; a half-typed field keeps the last good value instead of snapping to 0. */\nexport function NumberField({\n label,\n value,\n onChange,\n disabled,\n suffix,\n}: {\n label: string;\n value: number;\n onChange: (v: number) => void;\n disabled?: boolean;\n suffix?: string;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const [draft, setDraft] = useState<string | null>(null);\n const shown = draft ?? String(Number.isFinite(value) ? Math.round(value * 1000) / 1000 : 0);\n return (\n <View style={styles.numField}>\n <Text style={styles.numLabel}>\n {label}\n {suffix ? ` (${suffix})` : ''}\n </Text>\n <TextInput\n value={shown}\n editable={!disabled}\n keyboardType=\"numbers-and-punctuation\"\n onChangeText={(text) => {\n setDraft(text);\n const next = Number(text);\n if (text.trim() !== '' && Number.isFinite(next)) onChange(next);\n }}\n onBlur={() => setDraft(null)}\n style={[styles.numInput, disabled && styles.off]}\n placeholderTextColor={theme.edInk3}\n accessibilityLabel={label}\n />\n </View>\n );\n}\n\nexport function TextField({\n label,\n value,\n onChange,\n placeholder,\n multiline,\n}: {\n label?: string;\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n multiline?: boolean;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n return (\n <View style={styles.block}>\n {label ? <Text style={[styles.label, styles.blockLabel]}>{label}</Text> : null}\n <TextInput\n value={value}\n onChangeText={onChange}\n placeholder={placeholder}\n placeholderTextColor={theme.edInk3}\n multiline={multiline}\n autoCapitalize=\"none\"\n autoCorrect={false}\n style={[styles.textInput, multiline && styles.textInputMulti]}\n accessibilityLabel={label ?? placeholder}\n />\n </View>\n );\n}\n\n/** SelectRow as a wrap of chips - every choice visible, one tap. */\nexport function ChoiceRow<T extends string | number>({\n label,\n options,\n value,\n onChange,\n}: {\n label?: string;\n options: ReadonlyArray<{ value: T; label: string }>;\n value: T;\n // NoInfer: T comes from options and value, so a setter for a literal union is accepted.\n onChange: (v: NoInfer<T>) => void;\n}) {\n const styles = makeStyles(useCanvasTheme());\n return (\n <View style={styles.block}>\n {label ? <Text style={[styles.label, styles.blockLabel]}>{label}</Text> : null}\n <View style={styles.chips}>\n {options.map((o) => {\n const on = o.value === value;\n return (\n <Pressable\n key={String(o.value)}\n onPress={() => onChange(o.value)}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: on }}\n style={({ pressed }) => [styles.chip, on && styles.chipOn, pressedStyle(pressed)]}\n >\n <Text style={[styles.chipLabel, on && styles.chipLabelOn]}>{o.label}</Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\nexport function ToggleRow({\n label,\n value,\n onChange,\n}: {\n label: string;\n value: boolean;\n onChange: (v: boolean) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n return (\n <View style={styles.toggleRow}>\n <Text style={styles.toggleLabel}>{label}</Text>\n <Switch\n value={value}\n onValueChange={onChange}\n trackColor={{ false: theme.edRaisedHi, true: theme.edAccent }}\n accessibilityLabel={label}\n />\n </View>\n );\n}\n\nexport function ApplyButton({\n label,\n onPress,\n disabled,\n tone = 'solid',\n}: {\n label: string;\n onPress: () => void;\n disabled?: boolean;\n tone?: 'solid' | 'soft';\n}) {\n const styles = makeStyles(useCanvasTheme());\n return (\n <Pressable\n onPress={onPress}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: Boolean(disabled) }}\n style={({ pressed }) => [\n tone === 'solid' ? styles.apply : styles.applySoft,\n disabled && styles.off,\n pressedStyle(pressed && !disabled),\n ]}\n >\n <Text style={tone === 'solid' ? styles.applyLabel : styles.applySoftLabel}>{label}</Text>\n </Pressable>\n );\n}\n\n/** A colour picked from a short swatch list (web ColorRow; phones have no native colour input). */\nexport function SwatchRow({\n label,\n colors,\n value,\n onChange,\n}: {\n label?: string;\n colors: readonly string[];\n value: string;\n onChange: (v: string) => void;\n}) {\n const styles = makeStyles(useCanvasTheme());\n return (\n <View style={styles.block}>\n {label ? <Text style={[styles.label, styles.blockLabel]}>{label}</Text> : null}\n <View style={styles.chips}>\n {colors.map((c) => (\n <Pressable\n key={c}\n onPress={() => onChange(c)}\n accessibilityRole=\"button\"\n accessibilityLabel={c}\n accessibilityState={{ selected: c.toLowerCase() === value.toLowerCase() }}\n style={[\n styles.swatch,\n { backgroundColor: c },\n c.toLowerCase() === value.toLowerCase() && styles.swatchOn,\n ]}\n />\n ))}\n </View>\n </View>\n );\n}\n\n/**\n * A media URL from the board (thumb strip) or pasted - the phone answer to the\n * web panels' \"paste a URL\" rows. Audio rows show their name instead of a thumb.\n */\nexport function MediaUrlPicker({\n label,\n items,\n value,\n onChange,\n placeholder = 'https://...',\n}: {\n label?: string;\n items: ReadonlyArray<{ id: string; src: string; label?: string; kind: 'image' | 'video' | 'audio' }>;\n value: string;\n onChange: (url: string) => void;\n placeholder?: string;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n return (\n <View style={styles.block}>\n {label ? <Text style={[styles.label, styles.blockLabel]}>{label}</Text> : null}\n {items.length ? (\n <ScrollView\n horizontal\n style={styles.hscroll}\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.pickRow}\n keyboardShouldPersistTaps=\"handled\"\n >\n {items.map((item) => {\n const on = item.src === value;\n return (\n <Pressable\n key={item.id}\n onPress={() => onChange(on ? '' : item.src)}\n accessibilityRole=\"button\"\n accessibilityLabel={item.label ?? item.kind}\n accessibilityState={{ selected: on }}\n style={[\n item.kind === 'image' ? styles.pickThumb : styles.pickChip,\n on && styles.pickOn,\n ]}\n >\n {item.kind === 'image' ? (\n <Image source={{ uri: item.src }} style={styles.pickImg} />\n ) : (\n <Text style={styles.chipLabel} numberOfLines={1}>\n {item.label || (item.kind === 'audio' ? 'Audio' : 'Video')}\n </Text>\n )}\n </Pressable>\n );\n })}\n </ScrollView>\n ) : null}\n <TextInput\n value={value}\n onChangeText={onChange}\n placeholder={placeholder}\n placeholderTextColor={theme.edInk3}\n autoCapitalize=\"none\"\n autoCorrect={false}\n style={styles.textInput}\n accessibilityLabel={label ?? 'Media URL'}\n />\n </View>\n );\n}\n\nexport const SWATCHES = [\n '#ef4444',\n '#f97316',\n '#facc15',\n '#22c55e',\n '#3b82f6',\n '#a855f7',\n '#ffffff',\n '#000000',\n] as const;\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n off: { opacity: 0.4 },\n block: { marginBottom: SPACE.sm },\n blockLabel: { marginBottom: SPACE.xs },\n label: { ...TYPE.caption, color: theme.edInk2 },\n value: { ...TYPE.caption, color: theme.edInk, fontVariant: ['tabular-nums'] },\n sliderRow: { marginBottom: SPACE.sm },\n sliderHead: { flexDirection: 'row', justifyContent: 'space-between', marginBottom: 2 },\n track: { height: 32, justifyContent: 'center' },\n rail: { height: 4, borderRadius: 2, backgroundColor: theme.edRaisedHi, overflow: 'hidden' },\n fill: { height: 4, backgroundColor: theme.edInk },\n knob: {\n position: 'absolute',\n width: 20,\n height: 20,\n marginLeft: -10,\n borderRadius: 10,\n backgroundColor: theme.edInk,\n borderWidth: 3,\n borderColor: theme.edPanel,\n },\n numField: { flex: 1, minWidth: 64 },\n numLabel: { ...TYPE.caption, color: theme.edInk3, marginBottom: 2 },\n numInput: {\n ...TYPE.label,\n minHeight: 36,\n borderRadius: RADIUS.sm,\n paddingHorizontal: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n fontVariant: ['tabular-nums'],\n },\n textInput: {\n ...TYPE.body,\n fontSize: 14,\n minHeight: 40,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n },\n textInputMulti: { minHeight: 72, textAlignVertical: 'top' },\n chips: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.xs + 2 },\n chip: {\n minHeight: 34,\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.edRaised,\n },\n chipOn: { backgroundColor: theme.edInk },\n chipLabel: { ...TYPE.label, color: theme.edInk },\n chipLabelOn: { color: theme.edOnInk },\n toggleRow: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n minHeight: HIT,\n },\n toggleLabel: { ...TYPE.label, fontWeight: '500', color: theme.edInk, flex: 1 },\n apply: {\n minHeight: HIT,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edInk,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.lg,\n marginTop: SPACE.xs,\n marginBottom: SPACE.sm,\n },\n applyLabel: { ...TYPE.label, color: theme.edOnInk },\n applySoft: {\n minHeight: 40,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edRaisedHi,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.lg,\n marginBottom: SPACE.sm,\n },\n applySoftLabel: { ...TYPE.label, color: theme.edInk },\n hscroll: { flexGrow: 0, marginBottom: SPACE.xs },\n pickRow: { gap: SPACE.xs + 2 },\n pickThumb: {\n width: 52,\n height: 52,\n borderRadius: RADIUS.sm,\n overflow: 'hidden',\n borderWidth: 2,\n borderColor: 'transparent',\n backgroundColor: theme.edRaised,\n },\n pickChip: {\n minHeight: 36,\n maxWidth: 160,\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n borderWidth: 2,\n borderColor: 'transparent',\n justifyContent: 'center',\n backgroundColor: theme.edRaised,\n },\n pickOn: { borderColor: theme.edAccent },\n pickImg: { width: '100%', height: '100%' },\n swatch: { width: 30, height: 30, borderRadius: 15, borderWidth: 2, borderColor: theme.edLineHi },\n swatchOn: { borderColor: theme.edAccent, transform: [{ scale: 1.12 }] },\n }),\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -143,7 +143,7 @@ function normalizeModels(raw) {
|
|
|
143
143
|
const list = Array.isArray(payload) ? payload : Array.isArray(nested.models) ? nested.models : Array.isArray(nested.data) ? nested.data : Array.isArray(record.models) ? record.models : [];
|
|
144
144
|
return list.map((m) => {
|
|
145
145
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
146
|
-
return __spreadValues(__spreadValues(__spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
|
|
146
|
+
return __spreadValues(__spreadValues(__spreadProps(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
|
|
147
147
|
id: String((_c = (_b = (_a = m.id) != null ? _a : m.modelId) != null ? _b : m.name) != null ? _c : ""),
|
|
148
148
|
label: String((_h = (_g = (_f = (_e = (_d = m.displayName) != null ? _d : m.label) != null ? _e : m.title) != null ? _f : m.name) != null ? _g : m.id) != null ? _h : ""),
|
|
149
149
|
provider: String((_j = (_i = m.provider) != null ? _i : m.source) != null ? _j : ""),
|
|
@@ -162,10 +162,12 @@ function normalizeModels(raw) {
|
|
|
162
162
|
maxReferenceImages: Math.max(0, Math.round(m.maxReferenceImages))
|
|
163
163
|
} : {}), typeof m.supportsAudio === "boolean" ? {
|
|
164
164
|
supportsAudio: m.supportsAudio
|
|
165
|
+
} : {}), typeof m.isFast === "boolean" ? {
|
|
166
|
+
isFast: m.isFast
|
|
165
167
|
} : {}), Array.isArray(m.aspectRatios) ? {
|
|
166
|
-
aspectRatios: m.aspectRatios.filter(
|
|
168
|
+
aspectRatios: m.aspectRatios.map(String).filter(Boolean)
|
|
167
169
|
} : {}), Array.isArray(m.resolutions) ? {
|
|
168
|
-
resolutions: m.resolutions.filter(
|
|
170
|
+
resolutions: m.resolutions.map(String).filter(Boolean)
|
|
169
171
|
} : {}), typeof m.type === "string" ? {
|
|
170
172
|
type: m.type
|
|
171
173
|
} : {}), {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generationModels.js","sources":["../../../src/features/canvas/generationModels.ts"],"sourcesContent":["/**\n * Native twin of canvas-surface `hooks/useModelList` — LIST_MODELS shapes\n * and duration gating. An out-of-range `durationSeconds` comes back as a\n * blank video, not an error (web issue #305).\n */\n\nexport interface ModelInfo {\n id: string;\n label: string;\n provider: string;\n description: string;\n supportsImageInput?: boolean;\n supportsVideoInput?: boolean;\n supportsImageToVideo?: boolean;\n supportsEndFrame?: boolean;\n /** Whether the video model reads style/subject reference stills (`styleReferenceUrls`). */\n supportsReferenceImages?: boolean;\n /** How many reference stills it reads (Veo 3, Seedance 9); see `videoReferenceCap`. */\n maxReferenceImages?: number;\n supportsAudio?: boolean;\n isFast?: boolean;\n type?: string;\n supportedDurationsSeconds?: number[];\n defaultDurationSeconds?: number;\n maxDurationSeconds?: number;\n aspectRatios?: string[];\n resolutions?: string[];\n}\n\nconst VEO_ASPECTS = ['16:9', '9:16'];\nconst VEO_RESOLUTIONS = ['720p', '1080p'];\nconst VEO_DURATIONS = [4, 6, 8];\n\nexport const STATIC_IMAGE_MODELS: ModelInfo[] = [\n { id: 'gemini-3.1-flash-image-preview', label: 'Gemini Efficient', provider: 'google', description: '' },\n];\n\n/** Offline fallback — mirrors canvas-surface `hooks/useModelList` STATIC_VIDEO_MODELS. */\nexport const STATIC_VIDEO_MODELS: ModelInfo[] = [\n {\n id: 'veo-3.1-generate-preview',\n label: 'Veo 3.1 Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n supportsEndFrame: true,\n supportsAudio: true,\n supportsReferenceImages: true,\n maxReferenceImages: 3,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3.1-fast-generate-preview',\n label: 'Veo 3.1 Fast Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n supportsEndFrame: true,\n isFast: true,\n supportsReferenceImages: true,\n maxReferenceImages: 3,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3-generate-preview',\n label: 'Veo 3 Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3-fast-generate-preview',\n label: 'Veo 3 Fast Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n isFast: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-2.0-generate-001',\n label: 'Veo 2.0',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: [5, 6, 7, 8],\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'bytedance/seedance-2.0',\n label: 'Seedance 2.0',\n provider: 'openrouter',\n description: '',\n supportedDurationsSeconds: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n defaultDurationSeconds: 5,\n maxDurationSeconds: 15,\n supportsImageToVideo: true,\n supportsReferenceImages: true,\n maxReferenceImages: 9,\n },\n {\n id: 'bytedance/seedance-2.0-fast',\n label: 'Seedance 2.0 Fast',\n provider: 'openrouter',\n description: '',\n supportedDurationsSeconds: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n defaultDurationSeconds: 5,\n maxDurationSeconds: 15,\n supportsImageToVideo: true,\n supportsReferenceImages: true,\n maxReferenceImages: 9,\n isFast: true,\n },\n];\n\nexport const AUDIO_PROMPT_TYPES = new Set(['tts', 'sfx', 'music']);\n\nfunction durationList(raw: unknown): number[] {\n if (!Array.isArray(raw)) return [];\n return raw.filter((s): s is number => typeof s === 'number' && Number.isFinite(s) && s > 0);\n}\n\nfunction duration(raw: unknown): number | undefined {\n return typeof raw === 'number' && Number.isFinite(raw) && raw > 0 ? raw : undefined;\n}\n\nexport function videoDurationOptions(model: ModelInfo | undefined): number[] {\n return model?.supportedDurationsSeconds ?? [];\n}\n\nexport function promptAudioModels(models: ModelInfo[]): ModelInfo[] {\n return models.filter((m) => !m.type || AUDIO_PROMPT_TYPES.has(m.type));\n}\n\nexport function normalizeModels(raw: unknown): ModelInfo[] {\n let payload: unknown = raw;\n if (typeof payload === 'string') {\n try {\n payload = JSON.parse(payload);\n } catch {\n return [];\n }\n }\n const record = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : {};\n const nested = record.data && typeof record.data === 'object' ? (record.data as Record<string, unknown>) : record;\n const list = Array.isArray(payload)\n ? payload\n : Array.isArray(nested.models)\n ? nested.models\n : Array.isArray(nested.data)\n ? nested.data\n : Array.isArray(record.models)\n ? record.models\n : [];\n return (list as Array<Record<string, unknown>>)\n .map((m) => ({\n id: String(m.id ?? m.modelId ?? m.name ?? ''),\n label: String(m.displayName ?? m.label ?? m.title ?? m.name ?? m.id ?? ''),\n provider: String(m.provider ?? m.source ?? ''),\n description: String(m.description ?? ''),\n ...(typeof m.supportsImageInput === 'boolean' ? { supportsImageInput: m.supportsImageInput } : {}),\n ...(typeof m.supportsVideoInput === 'boolean' ? { supportsVideoInput: m.supportsVideoInput } : {}),\n ...(typeof m.supportsImageToVideo === 'boolean' ? { supportsImageToVideo: m.supportsImageToVideo } : {}),\n ...(typeof m.supportsEndFrame === 'boolean' ? { supportsEndFrame: m.supportsEndFrame } : {}),\n ...(typeof m.supportsReferenceImages === 'boolean'\n ? { supportsReferenceImages: m.supportsReferenceImages }\n : {}),\n ...(typeof m.maxReferenceImages === 'number' && Number.isFinite(m.maxReferenceImages)\n ? { maxReferenceImages: Math.max(0, Math.round(m.maxReferenceImages)) }\n : {}),\n ...(typeof m.supportsAudio === 'boolean' ? { supportsAudio: m.supportsAudio } : {}),\n ...(Array.isArray(m.aspectRatios)\n ? { aspectRatios: m.aspectRatios.filter((s): s is string => typeof s === 'string') }\n : {}),\n ...(Array.isArray(m.resolutions)\n ? { resolutions: m.resolutions.filter((s): s is string => typeof s === 'string') }\n : {}),\n ...(typeof m.type === 'string' ? { type: m.type } : {}),\n supportedDurationsSeconds: durationList(m.supportedDurationsSeconds),\n ...(duration(m.defaultDurationSeconds) ? { defaultDurationSeconds: Number(m.defaultDurationSeconds) } : {}),\n ...(duration(m.maxDurationSeconds) ? { maxDurationSeconds: Number(m.maxDurationSeconds) } : {}),\n }))\n .filter((m) => Boolean(m.id));\n}\n\nexport function buildVideoGenerateParams(opts: {\n prompt: string;\n aspectRatio: string;\n model?: string;\n durationSeconds?: number;\n referenceImageUrl?: string;\n referenceVideoUrl?: string;\n /** End frame (web `referenceEndImageUrl`); only models with `supportsEndFrame` read it. */\n referenceEndImageUrl?: string;\n /** Style/subject stills, capped by `videoReferenceCap`. */\n styleReferenceUrls?: string[];\n resolution?: string;\n generateAudio?: boolean;\n negativePrompt?: string;\n}): Record<string, unknown> {\n return {\n prompt: opts.prompt,\n aspectRatio: opts.aspectRatio,\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.durationSeconds ? { durationSeconds: opts.durationSeconds } : {}),\n ...(opts.referenceImageUrl ? { referenceImageUrl: opts.referenceImageUrl } : {}),\n ...(opts.referenceVideoUrl ? { referenceVideoUrl: opts.referenceVideoUrl } : {}),\n ...(opts.referenceEndImageUrl ? { referenceEndImageUrl: opts.referenceEndImageUrl } : {}),\n ...(opts.styleReferenceUrls?.length ? { styleReferenceUrls: opts.styleReferenceUrls } : {}),\n ...(opts.resolution ? { resolution: opts.resolution } : {}),\n // Sent whenever set: a model that defaults to sound needs an explicit false.\n ...(opts.generateAudio !== undefined ? { generateAudio: opts.generateAudio } : {}),\n ...(opts.negativePrompt ? { negativePrompt: opts.negativePrompt } : {}),\n };\n}\n\n/** Smallest reference count any provider takes - the cap when the connector does not say (web). */\nexport const DEFAULT_VIDEO_REFERENCE_CAP = 3;\n\n/** How many reference stills the selected video model's slot holds (web `videoReferenceCap`). */\nexport function videoReferenceCap(models: readonly ModelInfo[], selectedId: string): number {\n const current = models.find((m) => m.id === selectedId);\n if (!current) return DEFAULT_VIDEO_REFERENCE_CAP;\n if (typeof current.maxReferenceImages === 'number') return current.maxReferenceImages;\n return current.supportsReferenceImages === false ? 0 : DEFAULT_VIDEO_REFERENCE_CAP;\n}\n\n/** With a still attached, the first model that reads images when the pick cannot (web `modelThatReadsImages`). */\nexport function modelThatReadsImages(models: readonly ModelInfo[], selectedId: string): string | null {\n const current = models.find((m) => m.id === selectedId);\n if (!current || current.supportsImageInput !== false) return null;\n return models.find((m) => m.supportsImageInput)?.id ?? null;\n}\n\n/** Twin of canvas-surface `videoGenOptions.generationCapabilities`. */\nexport function generationCapabilities(model: ModelInfo | undefined): {\n aspects: string[];\n resolutions: string[];\n canAudio: boolean;\n canStartFrame: boolean;\n canEndFrame: boolean;\n canVideoInput: boolean;\n} {\n const google = model?.provider === 'google';\n return {\n aspects: model?.aspectRatios?.length ? model.aspectRatios : ['16:9', '9:16'],\n resolutions: model?.resolutions ?? [],\n canAudio: Boolean(model?.supportsAudio),\n canStartFrame: model?.supportsImageToVideo ?? true,\n canEndFrame: Boolean(model?.supportsEndFrame),\n canVideoInput: Boolean(model?.supportsVideoInput),\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generationModels.js","sources":["../../../src/features/canvas/generationModels.ts"],"sourcesContent":["/**\n * Native twin of canvas-surface `hooks/useModelList` — LIST_MODELS shapes\n * and duration gating. An out-of-range `durationSeconds` comes back as a\n * blank video, not an error (web issue #305).\n */\n\nexport interface ModelInfo {\n id: string;\n label: string;\n provider: string;\n description: string;\n supportsImageInput?: boolean;\n supportsVideoInput?: boolean;\n supportsImageToVideo?: boolean;\n supportsEndFrame?: boolean;\n /** Whether the video model reads style/subject reference stills (`styleReferenceUrls`). */\n supportsReferenceImages?: boolean;\n /** How many reference stills it reads (Veo 3, Seedance 9); see `videoReferenceCap`. */\n maxReferenceImages?: number;\n supportsAudio?: boolean;\n isFast?: boolean;\n type?: string;\n supportedDurationsSeconds?: number[];\n defaultDurationSeconds?: number;\n maxDurationSeconds?: number;\n aspectRatios?: string[];\n resolutions?: string[];\n}\n\nconst VEO_ASPECTS = ['16:9', '9:16'];\nconst VEO_RESOLUTIONS = ['720p', '1080p'];\nconst VEO_DURATIONS = [4, 6, 8];\n\nexport const STATIC_IMAGE_MODELS: ModelInfo[] = [\n { id: 'gemini-3.1-flash-image-preview', label: 'Gemini Efficient', provider: 'google', description: '' },\n];\n\n/** Offline fallback — verbatim copy of canvas-surface `hooks/useModelList` STATIC_VIDEO_MODELS (the connector's VEO_MODEL_REGISTRY). */\nexport const STATIC_VIDEO_MODELS: ModelInfo[] = [\n {\n id: 'veo-3.1-generate-preview',\n label: 'Veo 3.1 Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n supportsEndFrame: true,\n supportsAudio: true,\n supportsReferenceImages: true,\n maxReferenceImages: 3,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3.1-fast-generate-preview',\n label: 'Veo 3.1 Fast Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n supportsEndFrame: true,\n isFast: true,\n supportsReferenceImages: true,\n maxReferenceImages: 3,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3-generate-preview',\n label: 'Veo 3 Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-3-fast-generate-preview',\n label: 'Veo 3 Fast Preview',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: VEO_DURATIONS,\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n isFast: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'veo-2.0-generate-001',\n label: 'Veo 2.0',\n provider: 'google',\n description: '',\n supportedDurationsSeconds: [5, 6, 7, 8],\n defaultDurationSeconds: 8,\n maxDurationSeconds: 8,\n supportsImageToVideo: true,\n aspectRatios: VEO_ASPECTS,\n resolutions: VEO_RESOLUTIONS,\n },\n {\n id: 'bytedance/seedance-2.0',\n label: 'Seedance 2.0',\n provider: 'openrouter',\n description: '',\n supportedDurationsSeconds: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n defaultDurationSeconds: 5,\n maxDurationSeconds: 15,\n supportsImageToVideo: true,\n supportsReferenceImages: true,\n maxReferenceImages: 9,\n },\n {\n id: 'bytedance/seedance-2.0-fast',\n label: 'Seedance 2.0 Fast',\n provider: 'openrouter',\n description: '',\n supportedDurationsSeconds: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n defaultDurationSeconds: 5,\n maxDurationSeconds: 15,\n supportsImageToVideo: true,\n supportsReferenceImages: true,\n maxReferenceImages: 9,\n isFast: true,\n },\n];\n\nexport const AUDIO_PROMPT_TYPES = new Set(['tts', 'sfx', 'music']);\n\nfunction durationList(raw: unknown): number[] {\n if (!Array.isArray(raw)) return [];\n return raw.filter((s): s is number => typeof s === 'number' && Number.isFinite(s) && s > 0);\n}\n\nfunction duration(raw: unknown): number | undefined {\n return typeof raw === 'number' && Number.isFinite(raw) && raw > 0 ? raw : undefined;\n}\n\nexport function videoDurationOptions(model: ModelInfo | undefined): number[] {\n return model?.supportedDurationsSeconds ?? [];\n}\n\nexport function promptAudioModels(models: ModelInfo[]): ModelInfo[] {\n return models.filter((m) => !m.type || AUDIO_PROMPT_TYPES.has(m.type));\n}\n\nexport function normalizeModels(raw: unknown): ModelInfo[] {\n let payload: unknown = raw;\n if (typeof payload === 'string') {\n try {\n payload = JSON.parse(payload);\n } catch {\n return [];\n }\n }\n const record = payload && typeof payload === 'object' ? (payload as Record<string, unknown>) : {};\n const nested = record.data && typeof record.data === 'object' ? (record.data as Record<string, unknown>) : record;\n const list = Array.isArray(payload)\n ? payload\n : Array.isArray(nested.models)\n ? nested.models\n : Array.isArray(nested.data)\n ? nested.data\n : Array.isArray(record.models)\n ? record.models\n : [];\n return (list as Array<Record<string, unknown>>)\n .map((m) => ({\n id: String(m.id ?? m.modelId ?? m.name ?? ''),\n label: String(m.displayName ?? m.label ?? m.title ?? m.name ?? m.id ?? ''),\n provider: String(m.provider ?? m.source ?? ''),\n description: String(m.description ?? ''),\n ...(typeof m.supportsImageInput === 'boolean' ? { supportsImageInput: m.supportsImageInput } : {}),\n ...(typeof m.supportsVideoInput === 'boolean' ? { supportsVideoInput: m.supportsVideoInput } : {}),\n ...(typeof m.supportsImageToVideo === 'boolean' ? { supportsImageToVideo: m.supportsImageToVideo } : {}),\n ...(typeof m.supportsEndFrame === 'boolean' ? { supportsEndFrame: m.supportsEndFrame } : {}),\n ...(typeof m.supportsReferenceImages === 'boolean'\n ? { supportsReferenceImages: m.supportsReferenceImages }\n : {}),\n ...(typeof m.maxReferenceImages === 'number' && Number.isFinite(m.maxReferenceImages)\n ? { maxReferenceImages: Math.max(0, Math.round(m.maxReferenceImages)) }\n : {}),\n ...(typeof m.supportsAudio === 'boolean' ? { supportsAudio: m.supportsAudio } : {}),\n ...(typeof m.isFast === 'boolean' ? { isFast: m.isFast } : {}),\n ...(Array.isArray(m.aspectRatios) ? { aspectRatios: m.aspectRatios.map(String).filter(Boolean) } : {}),\n ...(Array.isArray(m.resolutions) ? { resolutions: m.resolutions.map(String).filter(Boolean) } : {}),\n ...(typeof m.type === 'string' ? { type: m.type } : {}),\n supportedDurationsSeconds: durationList(m.supportedDurationsSeconds),\n ...(duration(m.defaultDurationSeconds) ? { defaultDurationSeconds: Number(m.defaultDurationSeconds) } : {}),\n ...(duration(m.maxDurationSeconds) ? { maxDurationSeconds: Number(m.maxDurationSeconds) } : {}),\n }))\n .filter((m) => Boolean(m.id));\n}\n\nexport function buildVideoGenerateParams(opts: {\n prompt: string;\n aspectRatio: string;\n model?: string;\n durationSeconds?: number;\n referenceImageUrl?: string;\n referenceVideoUrl?: string;\n /** End frame (web `referenceEndImageUrl`); only models with `supportsEndFrame` read it. */\n referenceEndImageUrl?: string;\n /** Style/subject stills, capped by `videoReferenceCap`. */\n styleReferenceUrls?: string[];\n resolution?: string;\n generateAudio?: boolean;\n negativePrompt?: string;\n}): Record<string, unknown> {\n return {\n prompt: opts.prompt,\n aspectRatio: opts.aspectRatio,\n ...(opts.model ? { model: opts.model } : {}),\n ...(opts.durationSeconds ? { durationSeconds: opts.durationSeconds } : {}),\n ...(opts.referenceImageUrl ? { referenceImageUrl: opts.referenceImageUrl } : {}),\n ...(opts.referenceVideoUrl ? { referenceVideoUrl: opts.referenceVideoUrl } : {}),\n ...(opts.referenceEndImageUrl ? { referenceEndImageUrl: opts.referenceEndImageUrl } : {}),\n ...(opts.styleReferenceUrls?.length ? { styleReferenceUrls: opts.styleReferenceUrls } : {}),\n ...(opts.resolution ? { resolution: opts.resolution } : {}),\n // Sent whenever set: a model that defaults to sound needs an explicit false.\n ...(opts.generateAudio !== undefined ? { generateAudio: opts.generateAudio } : {}),\n ...(opts.negativePrompt ? { negativePrompt: opts.negativePrompt } : {}),\n };\n}\n\n/** Smallest reference count any provider takes - the cap when the connector does not say (web). */\nexport const DEFAULT_VIDEO_REFERENCE_CAP = 3;\n\n/** How many reference stills the selected video model's slot holds (web `videoReferenceCap`). */\nexport function videoReferenceCap(models: readonly ModelInfo[], selectedId: string): number {\n const current = models.find((m) => m.id === selectedId);\n if (!current) return DEFAULT_VIDEO_REFERENCE_CAP;\n if (typeof current.maxReferenceImages === 'number') return current.maxReferenceImages;\n return current.supportsReferenceImages === false ? 0 : DEFAULT_VIDEO_REFERENCE_CAP;\n}\n\n/** With a still attached, the first model that reads images when the pick cannot (web `modelThatReadsImages`). */\nexport function modelThatReadsImages(models: readonly ModelInfo[], selectedId: string): string | null {\n const current = models.find((m) => m.id === selectedId);\n if (!current || current.supportsImageInput !== false) return null;\n return models.find((m) => m.supportsImageInput)?.id ?? null;\n}\n\n/** Twin of canvas-surface `videoGenOptions.generationCapabilities`. */\nexport function generationCapabilities(model: ModelInfo | undefined): {\n aspects: string[];\n resolutions: string[];\n canAudio: boolean;\n canStartFrame: boolean;\n canEndFrame: boolean;\n canVideoInput: boolean;\n} {\n const google = model?.provider === 'google';\n return {\n aspects: model?.aspectRatios?.length ? model.aspectRatios : ['16:9', '9:16'],\n resolutions: model?.resolutions ?? [],\n canAudio: Boolean(model?.supportsAudio),\n canStartFrame: model?.supportsImageToVideo ?? true,\n canEndFrame: Boolean(model?.supportsEndFrame),\n canVideoInput: Boolean(model?.supportsVideoInput),\n };\n}\n"],"names":[],"mappings":"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"}
|