@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 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 +3 -3
- package/lib/features/design/exportDesign.js +0 -133
- package/lib/features/design/exportDesign.js.map +0 -1
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useState}from'react';import {StyleSheet,View,Text}from'react-native';import {Image}from'expo-image';import {MaterialCommunityIcons}from'@expo/vector-icons';import {hasAdjust}from'../doc/imageAdjust.js';import {isStrokeShape}from'../doc/shapes.js';import {offsetAlong,rgbaOf,tintOf,neonBlur,liftShadow,GLITCH_COLORS,spliceFillOf}from'../doc/textEffects.js';import {chartSvg,croppedPlacement,imageSvg,shapeSvg,needsSvgText,curvedHeight,textSvg}from'./svgParts.js';import {getSvg,svgUsable,SvgBoundary}from'./svg.js';import {CurveMeasure,LineMeasure,textBaseStyle,renderWords}from'./TextMeasure.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
|
+
function LayerFrame({
|
|
21
|
+
layer,
|
|
22
|
+
W,
|
|
23
|
+
H,
|
|
24
|
+
children,
|
|
25
|
+
autoHeight
|
|
26
|
+
}) {
|
|
27
|
+
var _a;
|
|
28
|
+
const transform = [];
|
|
29
|
+
if (layer.rotation) transform.push({
|
|
30
|
+
rotate: `${layer.rotation}deg`
|
|
31
|
+
});
|
|
32
|
+
if (layer.flipX) transform.push({
|
|
33
|
+
scaleX: -1
|
|
34
|
+
});
|
|
35
|
+
if (layer.flipY) transform.push({
|
|
36
|
+
scaleY: -1
|
|
37
|
+
});
|
|
38
|
+
return /* @__PURE__ */ jsx(View, { pointerEvents: "none", style: __spreadValues(__spreadProps(__spreadValues({
|
|
39
|
+
position: "absolute",
|
|
40
|
+
left: layer.x * W,
|
|
41
|
+
top: layer.y * H,
|
|
42
|
+
width: Math.max(1, layer.w * W)
|
|
43
|
+
}, autoHeight ? {
|
|
44
|
+
minHeight: layer.h * H
|
|
45
|
+
} : {
|
|
46
|
+
height: Math.max(1, layer.h * H)
|
|
47
|
+
}), {
|
|
48
|
+
opacity: (_a = layer.opacity) != null ? _a : 1
|
|
49
|
+
}), transform.length ? {
|
|
50
|
+
transform
|
|
51
|
+
} : {}), children });
|
|
52
|
+
}
|
|
53
|
+
function LayerView({
|
|
54
|
+
layer,
|
|
55
|
+
W,
|
|
56
|
+
H,
|
|
57
|
+
fontPair
|
|
58
|
+
}) {
|
|
59
|
+
switch (layer.kind) {
|
|
60
|
+
case "text":
|
|
61
|
+
return /* @__PURE__ */ jsx(LayerFrame, { layer, W, H, autoHeight: true, children: /* @__PURE__ */ jsx(TextLayerView, { layer, W, fontPair }) });
|
|
62
|
+
case "shape":
|
|
63
|
+
return /* @__PURE__ */ jsx(LayerFrame, { layer, W, H, children: /* @__PURE__ */ jsx(ShapeLayerView, { layer, bw: layer.w * W, bh: layer.h * H, W }) });
|
|
64
|
+
case "image":
|
|
65
|
+
return /* @__PURE__ */ jsx(LayerFrame, { layer, W, H, children: /* @__PURE__ */ jsx(ImageLayerView, { layer, bw: layer.w * W, bh: layer.h * H, W }) });
|
|
66
|
+
case "chart":
|
|
67
|
+
return /* @__PURE__ */ jsx(LayerFrame, { layer, W, H, children: /* @__PURE__ */ jsx(ChartLayerView, { layer, bw: layer.w * W, bh: layer.h * H }) });
|
|
68
|
+
default:
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function shadowStyle(shadow, W) {
|
|
73
|
+
const {
|
|
74
|
+
dx,
|
|
75
|
+
dy
|
|
76
|
+
} = offsetAlong(shadow.angle, shadow.distFrac * W);
|
|
77
|
+
return {
|
|
78
|
+
textShadowColor: rgbaOf(shadow.color, shadow.alpha),
|
|
79
|
+
textShadowOffset: {
|
|
80
|
+
width: dx,
|
|
81
|
+
height: dy
|
|
82
|
+
},
|
|
83
|
+
textShadowRadius: Math.max(0.5, shadow.blurFrac * W)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function textShadowFor(layer, W, fontSize) {
|
|
87
|
+
var _a;
|
|
88
|
+
if (layer.shadow) return shadowStyle(layer.shadow, W);
|
|
89
|
+
const effect = layer.effect;
|
|
90
|
+
if (!effect) return null;
|
|
91
|
+
switch (effect.kind) {
|
|
92
|
+
case "lift": {
|
|
93
|
+
const s = liftShadow(effect.intensity, fontSize);
|
|
94
|
+
return {
|
|
95
|
+
textShadowColor: s.color,
|
|
96
|
+
textShadowOffset: {
|
|
97
|
+
width: 0,
|
|
98
|
+
height: s.dy
|
|
99
|
+
},
|
|
100
|
+
textShadowRadius: s.blur
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
case "glow":
|
|
104
|
+
return {
|
|
105
|
+
textShadowColor: rgbaOf((_a = effect.color) != null ? _a : layer.color, effect.opacity),
|
|
106
|
+
textShadowOffset: {
|
|
107
|
+
width: 0,
|
|
108
|
+
height: 0
|
|
109
|
+
},
|
|
110
|
+
textShadowRadius: effect.sizeEm * fontSize
|
|
111
|
+
};
|
|
112
|
+
case "neon":
|
|
113
|
+
return {
|
|
114
|
+
textShadowColor: layer.color,
|
|
115
|
+
textShadowOffset: {
|
|
116
|
+
width: 0,
|
|
117
|
+
height: 0
|
|
118
|
+
},
|
|
119
|
+
textShadowRadius: neonBlur(effect.intensity, fontSize)
|
|
120
|
+
};
|
|
121
|
+
default:
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function underlays(layer, fontSize) {
|
|
126
|
+
var _a, _b, _c;
|
|
127
|
+
const out = [];
|
|
128
|
+
const ring = (radius, color) => {
|
|
129
|
+
const steps = radius > 2 ? 16 : 8;
|
|
130
|
+
for (let i = 0; i < steps; i += 1) {
|
|
131
|
+
const a = i / steps * Math.PI * 2;
|
|
132
|
+
out.push({
|
|
133
|
+
dx: Math.cos(a) * radius,
|
|
134
|
+
dy: Math.sin(a) * radius,
|
|
135
|
+
color
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
if (layer.outline && layer.outline.widthEm > 0) ring(layer.outline.widthEm * fontSize, layer.outline.color);
|
|
140
|
+
const effect = layer.effect;
|
|
141
|
+
if (!effect) return out;
|
|
142
|
+
switch (effect.kind) {
|
|
143
|
+
case "splice": {
|
|
144
|
+
const {
|
|
145
|
+
dx,
|
|
146
|
+
dy
|
|
147
|
+
} = offsetAlong(effect.angle, effect.offsetEm * fontSize);
|
|
148
|
+
out.push({
|
|
149
|
+
dx,
|
|
150
|
+
dy,
|
|
151
|
+
color: (_a = effect.color) != null ? _a : spliceFillOf(layer.color)
|
|
152
|
+
});
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case "echo": {
|
|
156
|
+
const {
|
|
157
|
+
dx,
|
|
158
|
+
dy
|
|
159
|
+
} = offsetAlong(effect.angle, effect.offsetEm * fontSize);
|
|
160
|
+
const color = (_b = effect.color) != null ? _b : layer.color;
|
|
161
|
+
out.push({
|
|
162
|
+
dx: dx * 2,
|
|
163
|
+
dy: dy * 2,
|
|
164
|
+
color: rgbaOf(color, 0.25)
|
|
165
|
+
}, {
|
|
166
|
+
dx,
|
|
167
|
+
dy,
|
|
168
|
+
color: rgbaOf(color, 0.5)
|
|
169
|
+
});
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case "glitch": {
|
|
173
|
+
const {
|
|
174
|
+
dx,
|
|
175
|
+
dy
|
|
176
|
+
} = offsetAlong(effect.angle, effect.offsetEm * fontSize);
|
|
177
|
+
const [a, b] = (_c = GLITCH_COLORS[effect.palette]) != null ? _c : GLITCH_COLORS["cyan-magenta"];
|
|
178
|
+
out.push({
|
|
179
|
+
dx: -dx,
|
|
180
|
+
dy: -dy,
|
|
181
|
+
color: a
|
|
182
|
+
}, {
|
|
183
|
+
dx,
|
|
184
|
+
dy,
|
|
185
|
+
color: b
|
|
186
|
+
});
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
function TextLayerView({
|
|
193
|
+
layer,
|
|
194
|
+
W,
|
|
195
|
+
fontPair
|
|
196
|
+
}) {
|
|
197
|
+
if (needsSvgText(layer) && svgUsable()) {
|
|
198
|
+
return /* @__PURE__ */ jsx(SvgBoundary, { fallback: /* @__PURE__ */ jsx(PlainTextLayerView, { layer, W, fontPair }), children: /* @__PURE__ */ jsx(SvgTextLayerView, { layer, W, fontPair }) });
|
|
199
|
+
}
|
|
200
|
+
return /* @__PURE__ */ jsx(PlainTextLayerView, { layer, W, fontPair });
|
|
201
|
+
}
|
|
202
|
+
function PlainTextLayerView({
|
|
203
|
+
layer,
|
|
204
|
+
W,
|
|
205
|
+
fontPair
|
|
206
|
+
}) {
|
|
207
|
+
const fontSize = Math.max(1, layer.fontSizeFrac * W);
|
|
208
|
+
const effect = layer.effect;
|
|
209
|
+
const hollow = (effect == null ? void 0 : effect.kind) === "hollow";
|
|
210
|
+
const base = __spreadProps(__spreadValues({}, textBaseStyle(layer, W, fontPair)), {
|
|
211
|
+
color: hollow ? rgbaOf(layer.color, 0.18) : (effect == null ? void 0 : effect.kind) === "neon" ? tintOf(layer.color, 0.45 + 0.35 * effect.intensity) : layer.color
|
|
212
|
+
});
|
|
213
|
+
const words = renderWords(layer, W, fontPair);
|
|
214
|
+
const highlight = (effect == null ? void 0 : effect.kind) === "background" ? rgbaOf(effect.color, effect.opacity) : void 0;
|
|
215
|
+
const shadow = textShadowFor(layer, W, fontSize);
|
|
216
|
+
const copies = underlays(layer, fontSize);
|
|
217
|
+
return /* @__PURE__ */ jsxs(View, { children: [
|
|
218
|
+
copies.map((copy, i) => /* @__PURE__ */ jsx(Text, { style: [base, styles.underlay, {
|
|
219
|
+
color: copy.color,
|
|
220
|
+
transform: [{
|
|
221
|
+
translateX: copy.dx
|
|
222
|
+
}, {
|
|
223
|
+
translateY: copy.dy
|
|
224
|
+
}]
|
|
225
|
+
}], children: renderWords(layer, W, fontPair, copy.color) }, `u${i}`)),
|
|
226
|
+
/* @__PURE__ */ jsx(Text, { style: [base, shadow], children: highlight ? /* @__PURE__ */ jsx(Text, { style: {
|
|
227
|
+
backgroundColor: highlight
|
|
228
|
+
}, children: words }) : words })
|
|
229
|
+
] });
|
|
230
|
+
}
|
|
231
|
+
function SvgTextLayerView({
|
|
232
|
+
layer,
|
|
233
|
+
W,
|
|
234
|
+
fontPair
|
|
235
|
+
}) {
|
|
236
|
+
const svg = getSvg();
|
|
237
|
+
const [lines, setLines] = useState(null);
|
|
238
|
+
const [curve, setCurve] = useState(null);
|
|
239
|
+
const curved = Boolean(layer.curve);
|
|
240
|
+
const fontSize = Math.max(1, layer.fontSizeFrac * W);
|
|
241
|
+
const bw = Math.max(1, layer.w * W);
|
|
242
|
+
const pad = Math.ceil(fontSize * 0.6);
|
|
243
|
+
if (curved) {
|
|
244
|
+
const height = curve ? curvedHeight(layer, curve) : fontSize * (layer.lineHeight || 1.2);
|
|
245
|
+
const inkW = curve ? Math.max(bw, curve.width * 1.05) : bw;
|
|
246
|
+
const left = (bw - inkW) / 2 - pad;
|
|
247
|
+
return /* @__PURE__ */ jsxs(View, { style: {
|
|
248
|
+
height
|
|
249
|
+
}, children: [
|
|
250
|
+
/* @__PURE__ */ jsx(CurveMeasure, { layer, W, fontPair, onCurve: setCurve }),
|
|
251
|
+
curve ? /* @__PURE__ */ jsx(svg.Svg, { width: inkW + pad * 2, height: height + pad * 2, style: {
|
|
252
|
+
position: "absolute",
|
|
253
|
+
left,
|
|
254
|
+
top: -pad
|
|
255
|
+
}, children: /* @__PURE__ */ jsx(svg.G, { transform: `translate(${-left}, ${pad})`, children: textSvg(svg, layer, [], W, fontPair, curve) }) }) : null
|
|
256
|
+
] });
|
|
257
|
+
}
|
|
258
|
+
return /* @__PURE__ */ jsxs(View, { children: [
|
|
259
|
+
/* @__PURE__ */ jsx(LineMeasure, { layer, W, fontPair, onLines: setLines }),
|
|
260
|
+
lines ? /* @__PURE__ */ jsx(svg.Svg, { width: bw + pad * 2, height: lines.reduce((m, l) => Math.max(m, l.y + l.height), 0) + pad * 2, style: {
|
|
261
|
+
position: "absolute",
|
|
262
|
+
left: -pad,
|
|
263
|
+
top: -pad
|
|
264
|
+
}, children: /* @__PURE__ */ jsx(svg.G, { transform: `translate(${pad}, ${pad})`, children: textSvg(svg, layer, lines, W, fontPair) }) }) : null
|
|
265
|
+
] });
|
|
266
|
+
}
|
|
267
|
+
function ShapeFallback({
|
|
268
|
+
layer,
|
|
269
|
+
bw,
|
|
270
|
+
bh
|
|
271
|
+
}) {
|
|
272
|
+
const round = layer.shape === "ellipse" ? Math.min(bw, bh) / 2 : layer.shape === "rect" ? Math.min(bw, bh) * Math.min(0.5, layer.radiusFrac || 0) : 0;
|
|
273
|
+
const line = isStrokeShape(layer.shape);
|
|
274
|
+
return /* @__PURE__ */ jsx(View, { style: __spreadValues({
|
|
275
|
+
position: "absolute",
|
|
276
|
+
left: 0,
|
|
277
|
+
top: line ? bh / 2 - 1 : 0,
|
|
278
|
+
width: bw,
|
|
279
|
+
height: line ? 2 : bh,
|
|
280
|
+
backgroundColor: layer.fill,
|
|
281
|
+
borderRadius: layer.shape === "ellipse" ? bw / 2 : round
|
|
282
|
+
}, layer.stroke && layer.stroke !== "none" ? {
|
|
283
|
+
borderColor: layer.stroke,
|
|
284
|
+
borderWidth: 1
|
|
285
|
+
} : {}) });
|
|
286
|
+
}
|
|
287
|
+
function ShapeLayerView({
|
|
288
|
+
layer,
|
|
289
|
+
bw,
|
|
290
|
+
bh,
|
|
291
|
+
W
|
|
292
|
+
}) {
|
|
293
|
+
var _a;
|
|
294
|
+
const svg = getSvg();
|
|
295
|
+
if (!svg || !svgUsable()) return /* @__PURE__ */ jsx(ShapeFallback, { layer, bw, bh });
|
|
296
|
+
const sw = Math.max(0.5, ((_a = layer.strokeWidthFrac) != null ? _a : 0) * W);
|
|
297
|
+
const pad = Math.ceil(sw) + 1;
|
|
298
|
+
return /* @__PURE__ */ jsx(SvgBoundary, { fallback: /* @__PURE__ */ jsx(ShapeFallback, { layer, bw, bh }), children: /* @__PURE__ */ jsx(svg.Svg, { width: bw + pad * 2, height: bh + pad * 2, style: {
|
|
299
|
+
position: "absolute",
|
|
300
|
+
left: -pad,
|
|
301
|
+
top: -pad
|
|
302
|
+
}, children: /* @__PURE__ */ jsx(svg.G, { transform: `translate(${pad}, ${pad})`, children: shapeSvg(svg, layer, bw, bh, W) }) }) });
|
|
303
|
+
}
|
|
304
|
+
function isEllipseFrame(d) {
|
|
305
|
+
return /^M0 \.5A\.5 \.5 0 1 1 1 \.5A\.5 \.5 0 1 1 0 \.5Z$/.test(d.trim()) || /^M0 0\.5A0\.5 0\.5/.test(d.trim());
|
|
306
|
+
}
|
|
307
|
+
function ImagePlaceholder({
|
|
308
|
+
bw,
|
|
309
|
+
bh,
|
|
310
|
+
busy
|
|
311
|
+
}) {
|
|
312
|
+
return /* @__PURE__ */ jsx(View, { style: [styles.placeholder, {
|
|
313
|
+
width: bw,
|
|
314
|
+
height: bh
|
|
315
|
+
}], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: busy ? "progress-clock" : "image-outline", size: Math.max(12, Math.min(bw, bh) * 0.3), color: "#94a3b8" }) });
|
|
316
|
+
}
|
|
317
|
+
function ImageLayerView({
|
|
318
|
+
layer,
|
|
319
|
+
bw,
|
|
320
|
+
bh,
|
|
321
|
+
W
|
|
322
|
+
}) {
|
|
323
|
+
if (!layer.src) return /* @__PURE__ */ jsx(ImagePlaceholder, { bw, bh, busy: layer.imageStatus === "generating" });
|
|
324
|
+
const place = croppedPlacement(bw, bh, layer.crop);
|
|
325
|
+
const shadow = layer.shadow ? (() => {
|
|
326
|
+
const {
|
|
327
|
+
dx,
|
|
328
|
+
dy
|
|
329
|
+
} = offsetAlong(layer.shadow.angle, layer.shadow.distFrac * W);
|
|
330
|
+
return {
|
|
331
|
+
shadowColor: layer.shadow.color,
|
|
332
|
+
shadowOpacity: layer.shadow.alpha,
|
|
333
|
+
shadowRadius: layer.shadow.blurFrac * W,
|
|
334
|
+
shadowOffset: {
|
|
335
|
+
width: dx,
|
|
336
|
+
height: dy
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
})() : null;
|
|
340
|
+
const ellipse = Boolean(layer.clipPath && isEllipseFrame(layer.clipPath));
|
|
341
|
+
const plain = /* @__PURE__ */ jsx(View, { style: [{
|
|
342
|
+
width: bw,
|
|
343
|
+
height: bh,
|
|
344
|
+
overflow: "hidden"
|
|
345
|
+
}, ellipse ? {
|
|
346
|
+
borderRadius: Math.max(bw, bh)
|
|
347
|
+
} : null], children: /* @__PURE__ */ jsx(Image, { source: {
|
|
348
|
+
uri: layer.src
|
|
349
|
+
}, style: __spreadValues({
|
|
350
|
+
position: "absolute"
|
|
351
|
+
}, place), contentFit: "fill", transition: 120 }) });
|
|
352
|
+
const svg = getSvg();
|
|
353
|
+
const needsSvg = Boolean(layer.clipPath) && !ellipse || hasAdjust(layer.adjust);
|
|
354
|
+
if (!needsSvg || !svg || !svgUsable()) {
|
|
355
|
+
return shadow ? /* @__PURE__ */ jsx(View, { style: shadow, children: plain }) : plain;
|
|
356
|
+
}
|
|
357
|
+
const pad = layer.shadow ? Math.ceil((layer.shadow.distFrac + layer.shadow.blurFrac * 2) * W) : 0;
|
|
358
|
+
return /* @__PURE__ */ jsx(SvgBoundary, { fallback: plain, children: /* @__PURE__ */ jsx(svg.Svg, { width: bw + pad * 2, height: bh + pad * 2, style: {
|
|
359
|
+
position: "absolute",
|
|
360
|
+
left: -pad,
|
|
361
|
+
top: -pad
|
|
362
|
+
}, children: /* @__PURE__ */ jsx(svg.G, { transform: `translate(${pad}, ${pad})`, children: imageSvg(svg, layer, bw, bh, W) }) }) });
|
|
363
|
+
}
|
|
364
|
+
function ChartLayerView({
|
|
365
|
+
layer,
|
|
366
|
+
bw,
|
|
367
|
+
bh
|
|
368
|
+
}) {
|
|
369
|
+
const svg = getSvg();
|
|
370
|
+
const fallback = /* @__PURE__ */ jsx(View, { style: [styles.placeholder, {
|
|
371
|
+
width: bw,
|
|
372
|
+
height: bh
|
|
373
|
+
}] });
|
|
374
|
+
if (!svg || !svgUsable()) return fallback;
|
|
375
|
+
const body = chartSvg(svg, layer, bw, bh);
|
|
376
|
+
if (!body) return fallback;
|
|
377
|
+
return /* @__PURE__ */ jsx(SvgBoundary, { fallback, children: /* @__PURE__ */ jsx(svg.Svg, { width: bw, height: bh, children: body }) });
|
|
378
|
+
}
|
|
379
|
+
const styles = StyleSheet.create({
|
|
380
|
+
underlay: {
|
|
381
|
+
position: "absolute",
|
|
382
|
+
left: 0,
|
|
383
|
+
top: 0,
|
|
384
|
+
right: 0,
|
|
385
|
+
textShadowRadius: 0
|
|
386
|
+
},
|
|
387
|
+
placeholder: {
|
|
388
|
+
backgroundColor: "rgba(148,163,184,0.18)",
|
|
389
|
+
alignItems: "center",
|
|
390
|
+
justifyContent: "center"
|
|
391
|
+
}
|
|
392
|
+
});export{ChartLayerView,ImageLayerView,LayerFrame,LayerView,ShapeLayerView,TextLayerView,croppedPlacement};//# sourceMappingURL=layers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layers.js","sources":["../../../../src/features/design/render/layers.tsx"],"sourcesContent":["/**\n * One layer, drawn natively - the native half of canvas-surface's renderer\n * (`carousel-editor/renderer.ts`, `shared/textRaster.ts`, `shared/shapes.ts`).\n *\n * Every length on a layer is a fraction of the page WIDTH (font size,\n * tracking, stroke, blur, shadow distance), so each view takes `W`, the page's\n * drawn width in dp, and multiplies. Boxes are fractions of their own axis.\n *\n * text RN Text with nested runs; Drop, Lift, Glow and Neon as a text\n * shadow, Outline, Echo and Glitch as offset copies under the words,\n * Background as a highlight. Hollow, Splice and Curve need what a\n * view cannot do (a stroked glyph edge, a path to follow), so those\n * draw through svg from RN's own line layout (svgParts textSvg)\n * shape the web's unit-box outline through react-native-svg\n * image expo-image, cropped by placing the whole source behind a window;\n * a frame (`clipPath`) or a look (filter, adjust) through svg\n * chart every series through svg (bars, rows, lines, areas; pies of the first)\n *\n * Rotation, flips and opacity are the wrapper's (LayerFrame), shared by all.\n */\nimport React, { useState } from 'react';\nimport { StyleSheet, Text, View, type TextStyle, type ViewStyle } from 'react-native';\nimport { Image } from 'expo-image';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { hasAdjust } from '../doc/imageAdjust';\nimport { isStrokeShape } from '../doc/shapes';\nimport { GLITCH_COLORS, liftShadow, neonBlur, offsetAlong, rgbaOf, spliceFillOf, tintOf } from '../doc/textEffects';\nimport type {\n ChartLayer,\n DesignFontPair,\n EditorLayer,\n ImageLayer,\n LayerShadow,\n ShapeLayer,\n TextLayer,\n} from '../doc/types';\nimport {\n chartSvg,\n croppedPlacement,\n curvedHeight,\n imageSvg,\n needsSvgText,\n shapeSvg,\n textSvg,\n type MeasuredCurve,\n type MeasuredLine,\n} from './svgParts';\nimport { SvgBoundary, getSvg, svgUsable } from './svg';\nimport { CurveMeasure, LineMeasure, renderWords, textBaseStyle } from './TextMeasure';\n\nexport { croppedPlacement } from './svgParts';\n\n/** The box, rotation, flips and opacity every layer kind shares. */\nexport function LayerFrame({\n layer,\n W,\n H,\n children,\n autoHeight,\n}: {\n layer: EditorLayer;\n W: number;\n H: number;\n children: React.ReactNode;\n /** Text grows past its stored box when its words wrap longer, as on web. */\n autoHeight?: boolean;\n}) {\n const transform: Array<{ rotate: string } | { scaleX: number } | { scaleY: number }> = [];\n if (layer.rotation) transform.push({ rotate: `${layer.rotation}deg` });\n if (layer.flipX) transform.push({ scaleX: -1 });\n if (layer.flipY) transform.push({ scaleY: -1 });\n return (\n <View\n pointerEvents=\"none\"\n style={{\n position: 'absolute',\n left: layer.x * W,\n top: layer.y * H,\n width: Math.max(1, layer.w * W),\n ...(autoHeight ? { minHeight: layer.h * H } : { height: Math.max(1, layer.h * H) }),\n opacity: layer.opacity ?? 1,\n ...(transform.length ? { transform } : {}),\n }}\n >\n {children}\n </View>\n );\n}\n\nexport function LayerView({\n layer,\n W,\n H,\n fontPair,\n}: {\n layer: EditorLayer;\n W: number;\n H: number;\n fontPair?: DesignFontPair;\n}) {\n switch (layer.kind) {\n case 'text':\n return (\n <LayerFrame layer={layer} W={W} H={H} autoHeight>\n <TextLayerView layer={layer} W={W} fontPair={fontPair} />\n </LayerFrame>\n );\n case 'shape':\n return (\n <LayerFrame layer={layer} W={W} H={H}>\n <ShapeLayerView layer={layer} bw={layer.w * W} bh={layer.h * H} W={W} />\n </LayerFrame>\n );\n case 'image':\n return (\n <LayerFrame layer={layer} W={W} H={H}>\n <ImageLayerView layer={layer} bw={layer.w * W} bh={layer.h * H} W={W} />\n </LayerFrame>\n );\n case 'chart':\n return (\n <LayerFrame layer={layer} W={W} H={H}>\n <ChartLayerView layer={layer} bw={layer.w * W} bh={layer.h * H} />\n </LayerFrame>\n );\n default:\n return null;\n }\n}\n\n// ── Text ─────────────────────────────────────────────────────────────────\n\nfunction shadowStyle(shadow: LayerShadow, W: number): TextStyle {\n const { dx, dy } = offsetAlong(shadow.angle, shadow.distFrac * W);\n return {\n textShadowColor: rgbaOf(shadow.color, shadow.alpha),\n textShadowOffset: { width: dx, height: dy },\n textShadowRadius: Math.max(0.5, shadow.blurFrac * W),\n };\n}\n\n/** The shadow-like part of a layer's effects as one RN text shadow; null when none applies. */\nfunction textShadowFor(layer: TextLayer, W: number, fontSize: number): TextStyle | null {\n if (layer.shadow) return shadowStyle(layer.shadow, W);\n const effect = layer.effect;\n if (!effect) return null;\n switch (effect.kind) {\n case 'lift': {\n const s = liftShadow(effect.intensity, fontSize);\n return { textShadowColor: s.color, textShadowOffset: { width: 0, height: s.dy }, textShadowRadius: s.blur };\n }\n case 'glow':\n return {\n textShadowColor: rgbaOf(effect.color ?? layer.color, effect.opacity),\n textShadowOffset: { width: 0, height: 0 },\n textShadowRadius: effect.sizeEm * fontSize,\n };\n case 'neon':\n return {\n textShadowColor: layer.color,\n textShadowOffset: { width: 0, height: 0 },\n textShadowRadius: neonBlur(effect.intensity, fontSize),\n };\n default:\n return null;\n }\n}\n\n/** Copies drawn under the words: an outline ring, or an effect's offset ghosts (web paint order). */\nfunction underlays(layer: TextLayer, fontSize: number): Array<{ dx: number; dy: number; color: string }> {\n const out: Array<{ dx: number; dy: number; color: string }> = [];\n const ring = (radius: number, color: string) => {\n const steps = radius > 2 ? 16 : 8;\n for (let i = 0; i < steps; i += 1) {\n const a = (i / steps) * Math.PI * 2;\n out.push({ dx: Math.cos(a) * radius, dy: Math.sin(a) * radius, color });\n }\n };\n if (layer.outline && layer.outline.widthEm > 0) ring(layer.outline.widthEm * fontSize, layer.outline.color);\n const effect = layer.effect;\n if (!effect) return out;\n switch (effect.kind) {\n case 'splice': {\n const { dx, dy } = offsetAlong(effect.angle, effect.offsetEm * fontSize);\n out.push({ dx, dy, color: effect.color ?? spliceFillOf(layer.color) });\n break;\n }\n case 'echo': {\n // Web fills each ghost at a fixed alpha of its colour (0.25 far, 0.5 near).\n const { dx, dy } = offsetAlong(effect.angle, effect.offsetEm * fontSize);\n const color = effect.color ?? layer.color;\n out.push({ dx: dx * 2, dy: dy * 2, color: rgbaOf(color, 0.25) }, { dx, dy, color: rgbaOf(color, 0.5) });\n break;\n }\n case 'glitch': {\n const { dx, dy } = offsetAlong(effect.angle, effect.offsetEm * fontSize);\n const [a, b] = GLITCH_COLORS[effect.palette] ?? GLITCH_COLORS['cyan-magenta'];\n out.push({ dx: -dx, dy: -dy, color: a }, { dx, dy, color: b });\n break;\n }\n default:\n break;\n }\n return out;\n}\n\nexport function TextLayerView({ layer, W, fontPair }: { layer: TextLayer; W: number; fontPair?: DesignFontPair }) {\n if (needsSvgText(layer) && svgUsable()) {\n return (\n <SvgBoundary fallback={<PlainTextLayerView layer={layer} W={W} fontPair={fontPair} />}>\n <SvgTextLayerView layer={layer} W={W} fontPair={fontPair} />\n </SvgBoundary>\n );\n }\n return <PlainTextLayerView layer={layer} W={W} fontPair={fontPair} />;\n}\n\nfunction PlainTextLayerView({ layer, W, fontPair }: { layer: TextLayer; W: number; fontPair?: DesignFontPair }) {\n const fontSize = Math.max(1, layer.fontSizeFrac * W);\n const effect = layer.effect;\n const hollow = effect?.kind === 'hollow';\n const base: TextStyle = {\n ...textBaseStyle(layer, W, fontPair),\n color: hollow\n ? rgbaOf(layer.color, 0.18)\n : effect?.kind === 'neon'\n ? tintOf(layer.color, 0.45 + 0.35 * effect.intensity)\n : layer.color,\n };\n const words = renderWords(layer, W, fontPair);\n const highlight = effect?.kind === 'background' ? rgbaOf(effect.color, effect.opacity) : undefined;\n const shadow = textShadowFor(layer, W, fontSize);\n const copies = underlays(layer, fontSize);\n return (\n <View>\n {copies.map((copy, i) => (\n <Text\n key={`u${i}`}\n style={[\n base,\n styles.underlay,\n { color: copy.color, transform: [{ translateX: copy.dx }, { translateY: copy.dy }] },\n ]}\n >\n {renderWords(layer, W, fontPair, copy.color)}\n </Text>\n ))}\n <Text style={[base, shadow]}>\n {highlight ? <Text style={{ backgroundColor: highlight }}>{words}</Text> : words}\n </Text>\n </View>\n );\n}\n\n/** Text drawn through svg on RN's own line layout: hollow and splice outlines, and curves. */\nfunction SvgTextLayerView({ layer, W, fontPair }: { layer: TextLayer; W: number; fontPair?: DesignFontPair }) {\n const svg = getSvg()!;\n const [lines, setLines] = useState<MeasuredLine[] | null>(null);\n const [curve, setCurve] = useState<MeasuredCurve | null>(null);\n const curved = Boolean(layer.curve);\n const fontSize = Math.max(1, layer.fontSizeFrac * W);\n const bw = Math.max(1, layer.w * W);\n // Room for strokes and offsets past the glyphs.\n const pad = Math.ceil(fontSize * 0.6);\n if (curved) {\n const height = curve ? curvedHeight(layer, curve) : fontSize * (layer.lineHeight || 1.2);\n const inkW = curve ? Math.max(bw, curve.width * 1.05) : bw;\n const left = (bw - inkW) / 2 - pad;\n return (\n <View style={{ height }}>\n <CurveMeasure layer={layer} W={W} fontPair={fontPair} onCurve={setCurve} />\n {curve ? (\n <svg.Svg\n width={inkW + pad * 2}\n height={height + pad * 2}\n style={{ position: 'absolute', left, top: -pad }}\n >\n <svg.G transform={`translate(${-left}, ${pad})`}>\n {textSvg(svg, layer, [], W, fontPair, curve)}\n </svg.G>\n </svg.Svg>\n ) : null}\n </View>\n );\n }\n return (\n <View>\n <LineMeasure layer={layer} W={W} fontPair={fontPair} onLines={setLines} />\n {lines ? (\n <svg.Svg\n width={bw + pad * 2}\n height={lines.reduce((m, l) => Math.max(m, l.y + l.height), 0) + pad * 2}\n style={{ position: 'absolute', left: -pad, top: -pad }}\n >\n <svg.G transform={`translate(${pad}, ${pad})`}>{textSvg(svg, layer, lines, W, fontPair)}</svg.G>\n </svg.Svg>\n ) : null}\n </View>\n );\n}\n\n// ── Shapes ───────────────────────────────────────────────────────────────\n\nfunction ShapeFallback({ layer, bw, bh }: { layer: ShapeLayer; bw: number; bh: number }) {\n const round =\n layer.shape === 'ellipse'\n ? Math.min(bw, bh) / 2\n : layer.shape === 'rect'\n ? Math.min(bw, bh) * Math.min(0.5, layer.radiusFrac || 0)\n : 0;\n const line = isStrokeShape(layer.shape);\n return (\n <View\n style={{\n position: 'absolute',\n left: 0,\n top: line ? bh / 2 - 1 : 0,\n width: bw,\n height: line ? 2 : bh,\n backgroundColor: layer.fill,\n borderRadius: layer.shape === 'ellipse' ? bw / 2 : round,\n ...(layer.stroke && layer.stroke !== 'none' ? { borderColor: layer.stroke, borderWidth: 1 } : {}),\n }}\n />\n );\n}\n\nexport function ShapeLayerView({ layer, bw, bh, W }: { layer: ShapeLayer; bw: number; bh: number; W: number }) {\n const svg = getSvg();\n if (!svg || !svgUsable()) return <ShapeFallback layer={layer} bw={bw} bh={bh} />;\n const sw = Math.max(0.5, (layer.strokeWidthFrac ?? 0) * W);\n const pad = Math.ceil(sw) + 1;\n return (\n <SvgBoundary fallback={<ShapeFallback layer={layer} bw={bw} bh={bh} />}>\n <svg.Svg width={bw + pad * 2} height={bh + pad * 2} style={{ position: 'absolute', left: -pad, top: -pad }}>\n <svg.G transform={`translate(${pad}, ${pad})`}>{shapeSvg(svg, layer, bw, bh, W)}</svg.G>\n </svg.Svg>\n </SvgBoundary>\n );\n}\n\n// ── Images ───────────────────────────────────────────────────────────────\n\n/** A frame the platform can draw without svg: a circle or an ellipse. */\nfunction isEllipseFrame(d: string): boolean {\n return /^M0 \\.5A\\.5 \\.5 0 1 1 1 \\.5A\\.5 \\.5 0 1 1 0 \\.5Z$/.test(d.trim()) || /^M0 0\\.5A0\\.5 0\\.5/.test(d.trim());\n}\n\nfunction ImagePlaceholder({ bw, bh, busy }: { bw: number; bh: number; busy?: boolean }) {\n return (\n <View style={[styles.placeholder, { width: bw, height: bh }]}>\n <MaterialCommunityIcons\n name={busy ? 'progress-clock' : 'image-outline'}\n size={Math.max(12, Math.min(bw, bh) * 0.3)}\n color=\"#94a3b8\"\n />\n </View>\n );\n}\n\nexport function ImageLayerView({ layer, bw, bh, W }: { layer: ImageLayer; bw: number; bh: number; W: number }) {\n if (!layer.src) return <ImagePlaceholder bw={bw} bh={bh} busy={layer.imageStatus === 'generating'} />;\n const place = croppedPlacement(bw, bh, layer.crop);\n const shadow: ViewStyle | null = layer.shadow\n ? (() => {\n const { dx, dy } = offsetAlong(layer.shadow.angle, layer.shadow.distFrac * W);\n return {\n shadowColor: layer.shadow.color,\n shadowOpacity: layer.shadow.alpha,\n shadowRadius: layer.shadow.blurFrac * W,\n shadowOffset: { width: dx, height: dy },\n };\n })()\n : null;\n const ellipse = Boolean(layer.clipPath && isEllipseFrame(layer.clipPath));\n const plain = (\n <View\n style={[{ width: bw, height: bh, overflow: 'hidden' }, ellipse ? { borderRadius: Math.max(bw, bh) } : null]}\n >\n <Image\n source={{ uri: layer.src }}\n style={{ position: 'absolute', ...place }}\n contentFit=\"fill\"\n transition={120}\n />\n </View>\n );\n const svg = getSvg();\n const needsSvg = (Boolean(layer.clipPath) && !ellipse) || hasAdjust(layer.adjust);\n if (!needsSvg || !svg || !svgUsable()) {\n return shadow ? <View style={shadow}>{plain}</View> : plain;\n }\n const pad = layer.shadow ? Math.ceil((layer.shadow.distFrac + layer.shadow.blurFrac * 2) * W) : 0;\n return (\n <SvgBoundary fallback={plain}>\n <svg.Svg width={bw + pad * 2} height={bh + pad * 2} style={{ position: 'absolute', left: -pad, top: -pad }}>\n <svg.G transform={`translate(${pad}, ${pad})`}>{imageSvg(svg, layer, bw, bh, W)}</svg.G>\n </svg.Svg>\n </SvgBoundary>\n );\n}\n\n// ── Charts ───────────────────────────────────────────────────────────────\n\nexport function ChartLayerView({ layer, bw, bh }: { layer: ChartLayer; bw: number; bh: number }) {\n const svg = getSvg();\n const fallback = <View style={[styles.placeholder, { width: bw, height: bh }]} />;\n if (!svg || !svgUsable()) return fallback;\n const body = chartSvg(svg, layer, bw, bh);\n if (!body) return fallback;\n return (\n <SvgBoundary fallback={fallback}>\n <svg.Svg width={bw} height={bh}>\n {body}\n </svg.Svg>\n </SvgBoundary>\n );\n}\n\nconst styles = StyleSheet.create({\n underlay: { position: 'absolute', left: 0, top: 0, right: 0, textShadowRadius: 0 },\n placeholder: { backgroundColor: 'rgba(148,163,184,0.18)', alignItems: 'center', justifyContent: 'center' },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React__default from'react';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "" , value);
|
|
4
|
+
let svgModule;
|
|
5
|
+
function getSvg() {
|
|
6
|
+
if (svgModule === void 0) {
|
|
7
|
+
try {
|
|
8
|
+
svgModule = require("react-native-svg");
|
|
9
|
+
} catch (e) {
|
|
10
|
+
svgModule = null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return svgModule;
|
|
14
|
+
}
|
|
15
|
+
let svgBroken = false;
|
|
16
|
+
function svgUsable() {
|
|
17
|
+
return !svgBroken && getSvg() !== null;
|
|
18
|
+
}
|
|
19
|
+
class SvgBoundary extends React__default.Component {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
__publicField(this, "state", {
|
|
23
|
+
failed: false
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static getDerivedStateFromError() {
|
|
27
|
+
svgBroken = true;
|
|
28
|
+
return {
|
|
29
|
+
failed: true
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
return this.state.failed || svgBroken ? this.props.fallback : this.props.children;
|
|
34
|
+
}
|
|
35
|
+
}export{SvgBoundary,getSvg,svgUsable};//# sourceMappingURL=svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svg.js","sources":["../../../../src/features/design/render/svg.tsx"],"sourcesContent":["/**\n * react-native-svg, loaded defensively.\n *\n * It is not a federation singleton: the remote bundles its own JS copy, whose\n * views render only because the host registered the same native views first\n * (the app draws its mascot through react-native-svg at startup). A host that\n * never did would fail on the first svg element - so the require is guarded\n * and every svg drawing sits in a boundary whose fallback is a plain View, and\n * a design still opens with its shapes as boxes rather than not at all.\n */\nimport React from 'react';\n\ntype SvgModule = typeof import('react-native-svg');\n\nlet svgModule: SvgModule | null | undefined;\n\nexport function getSvg(): SvgModule | null {\n if (svgModule === undefined) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require\n svgModule = require('react-native-svg') as SvgModule;\n } catch {\n svgModule = null;\n }\n }\n return svgModule;\n}\n\n/** Once one svg element has failed to render, every later drawing takes its fallback straight away. */\nlet svgBroken = false;\n\nexport function svgUsable(): boolean {\n return !svgBroken && getSvg() !== null;\n}\n\nexport class SvgBoundary extends React.Component<\n { fallback: React.ReactNode; children: React.ReactNode },\n { failed: boolean }\n> {\n state = { failed: false };\n\n static getDerivedStateFromError(): { failed: boolean } {\n svgBroken = true;\n return { failed: true };\n }\n\n render(): React.ReactNode {\n return this.state.failed || svgBroken ? this.props.fallback : this.props.children;\n }\n}\n"],"names":["React"],"mappings":";;;AAYA,IAAI,SAAA;AACG,SAAS,MAA2B,GAAA;AACzC,EAAA,IAAI,cAAc,MAAW,EAAA;AAC3B,IAAI,IAAA;AAEF,MAAA,SAAA,GAAY,QAAQ,kBAAkB,CAAA;AAAA,KAChC,CAAA,OAAA,CAAA,EAAA;AACN,MAAY,SAAA,GAAA,IAAA;AAAA;AACd;AAEF,EAAO,OAAA,SAAA;AACT;AAGA,IAAI,SAAY,GAAA,KAAA;AACT,SAAS,SAAqB,GAAA;AACnC,EAAO,OAAA,CAAC,SAAa,IAAA,MAAA,EAAa,KAAA,IAAA;AACpC;AACa,MAAA,WAAA,SAAoBA,eAAM,SAKpC,CAAA;AAAA,EALI,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAML,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAA,MACN,MAAQ,EAAA;AAAA,KACV,CAAA;AAAA;AAAA,EACA,OAAO,wBAEL,GAAA;AACA,IAAY,SAAA,GAAA,IAAA;AACZ,IAAO,OAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACV;AAAA;AACF,EACA,MAA0B,GAAA;AACxB,IAAO,OAAA,IAAA,CAAK,MAAM,MAAU,IAAA,SAAA,GAAY,KAAK,KAAM,CAAA,QAAA,GAAW,KAAK,KAAM,CAAA,QAAA;AAAA;AAE7E"}
|