@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,435 @@
|
|
|
1
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {readChartData,pieSlices,slicePath,chartMax}from'../doc/chart.js';import {curveArc}from'../doc/curve.js';import {adjustColorMatrix}from'../doc/imageAdjust.js';import {scalePath}from'../doc/pathScale.js';import {gradientLine,isStrokeShape,roundRectD,shapeSpec}from'../doc/shapes.js';import {layerSpans}from'../doc/textLayout.js';import {offsetAlong,rgbaOf,GLITCH_COLORS,spliceFillOf,liftShadow,neonBlur,tintOf}from'../doc/textEffects.js';import {layerFontFamily}from'../doc/types.js';import {resolveTextFont}from'./fontRegistry.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 safeId = (id) => id.replace(/[^A-Za-z0-9_-]/g, "_");
|
|
21
|
+
function shapeSvg(svg, layer, bw, bh, W) {
|
|
22
|
+
var _a, _b, _c;
|
|
23
|
+
const {
|
|
24
|
+
Path,
|
|
25
|
+
Line,
|
|
26
|
+
Polygon,
|
|
27
|
+
Defs,
|
|
28
|
+
LinearGradient,
|
|
29
|
+
Stop,
|
|
30
|
+
G
|
|
31
|
+
} = svg;
|
|
32
|
+
const stroke = layer.stroke && layer.stroke !== "none" ? layer.stroke : void 0;
|
|
33
|
+
const sw = Math.max(0.5, ((_a = layer.strokeWidthFrac) != null ? _a : 0) * W);
|
|
34
|
+
const gradient = layer.fillTo ? gradientLine(0, 0, bw, bh, (_b = layer.fillAngle) != null ? _b : 180) : null;
|
|
35
|
+
const gid = `sg-${safeId(layer.id)}`;
|
|
36
|
+
const paint = gradient ? `url(#${gid})` : layer.fill;
|
|
37
|
+
let body;
|
|
38
|
+
if (isStrokeShape(layer.shape)) {
|
|
39
|
+
const vertical = bh > bw;
|
|
40
|
+
const thickness = Math.max(sw, 1);
|
|
41
|
+
const span = vertical ? bh : bw;
|
|
42
|
+
const headLen = layer.shape === "arrow" ? Math.min(span * 0.4, thickness * 3.2) : 0;
|
|
43
|
+
const c = vertical ? bw / 2 : bh / 2;
|
|
44
|
+
const tip = vertical ? bh : bw;
|
|
45
|
+
body = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
46
|
+
vertical ? /* @__PURE__ */ jsx(Line, { x1: c, y1: 0, x2: c, y2: bh - headLen, stroke: paint, strokeWidth: thickness, strokeLinecap: "round" }) : /* @__PURE__ */ jsx(Line, { x1: 0, y1: c, x2: bw - headLen, y2: c, stroke: paint, strokeWidth: thickness, strokeLinecap: "round" }),
|
|
47
|
+
headLen > 0 ? /* @__PURE__ */ jsx(Polygon, { fill: paint, points: vertical ? `${c},${tip} ${c - thickness * 1.6},${tip - headLen} ${c + thickness * 1.6},${tip - headLen}` : `${tip},${c} ${tip - headLen},${c - thickness * 1.6} ${tip - headLen},${c + thickness * 1.6}` }) : null
|
|
48
|
+
] });
|
|
49
|
+
} else {
|
|
50
|
+
const d = layer.shape === "rect" ? roundRectD(bw, bh, (_c = layer.radiusFrac) != null ? _c : 0) : scalePath(shapeSpec(layer.shape).d, bw, bh);
|
|
51
|
+
body = /* @__PURE__ */ jsx(Path, { d, fill: paint, stroke, strokeWidth: stroke ? sw : 0, strokeLinejoin: "round" });
|
|
52
|
+
}
|
|
53
|
+
return /* @__PURE__ */ jsxs(G, { children: [
|
|
54
|
+
gradient ? /* @__PURE__ */ jsx(Defs, { children: /* @__PURE__ */ jsxs(LinearGradient, { id: gid, gradientUnits: "userSpaceOnUse", x1: gradient[0], y1: gradient[1], x2: gradient[2], y2: gradient[3], children: [
|
|
55
|
+
/* @__PURE__ */ jsx(Stop, { offset: "0", stopColor: layer.fill }),
|
|
56
|
+
/* @__PURE__ */ jsx(Stop, { offset: "1", stopColor: layer.fillTo })
|
|
57
|
+
] }) }) : null,
|
|
58
|
+
body
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
function chartSvg(svg, layer, bw, bh) {
|
|
62
|
+
var _a, _b, _c, _d, _e;
|
|
63
|
+
const {
|
|
64
|
+
Rect,
|
|
65
|
+
Path,
|
|
66
|
+
Polyline,
|
|
67
|
+
G,
|
|
68
|
+
Text: SvgText,
|
|
69
|
+
Circle
|
|
70
|
+
} = svg;
|
|
71
|
+
const data = readChartData(layer);
|
|
72
|
+
const colors = ((_a = layer.colors) == null ? void 0 : _a.length) ? layer.colors : ["#38bdf8"];
|
|
73
|
+
if (data.categories.length === 0) return null;
|
|
74
|
+
const ink = (_b = layer.ink) != null ? _b : "#475569";
|
|
75
|
+
const n = data.categories.length;
|
|
76
|
+
const legend = Boolean(layer.legend) && data.series.length > 0;
|
|
77
|
+
const legendH = legend ? Math.max(10, bh * 0.08) : 0;
|
|
78
|
+
const ph = bh - legendH;
|
|
79
|
+
let body;
|
|
80
|
+
if (layer.chart === "pie" || layer.chart === "donut") {
|
|
81
|
+
const r = Math.min(bw, ph) / 2;
|
|
82
|
+
const inner = layer.chart === "donut" ? r * ((_c = layer.holeFrac) != null ? _c : 0.55) : 0;
|
|
83
|
+
body = pieSlices((_e = (_d = data.series[0]) == null ? void 0 : _d.values) != null ? _e : []).map((s) => /* @__PURE__ */ jsx(Path, { d: slicePath(bw / 2, ph / 2, r, s.start, s.sweep, inner), fill: colors[s.index % colors.length] }, s.index));
|
|
84
|
+
} else if (layer.chart === "line" || layer.chart === "area") {
|
|
85
|
+
const stacked = layer.chart === "area" && Boolean(layer.stacked);
|
|
86
|
+
const max = chartMax(data, stacked);
|
|
87
|
+
const x = (i) => n === 1 ? bw / 2 : i / (n - 1) * bw;
|
|
88
|
+
const y = (v) => ph - Math.max(0, v) / max * ph;
|
|
89
|
+
const base = new Array(n).fill(0);
|
|
90
|
+
body = data.series.map((s, si) => {
|
|
91
|
+
const color = colors[si % colors.length];
|
|
92
|
+
const tops = s.values.map((v, i) => stacked ? base[i] + Math.max(0, v) : v);
|
|
93
|
+
const bottoms = stacked ? [...base] : new Array(n).fill(0);
|
|
94
|
+
if (stacked) tops.forEach((t, i) => base[i] = t);
|
|
95
|
+
if (layer.chart === "area") {
|
|
96
|
+
const top = tops.map((v, i) => `${i === 0 ? "M" : "L"}${x(i)} ${y(v)}`).join("");
|
|
97
|
+
const bottom = bottoms.map((v, i) => [i, v]).reverse().map(([i, v]) => `L${x(i)} ${y(v)}`).join("");
|
|
98
|
+
return /* @__PURE__ */ jsx(Path, { d: `${top}${bottom}Z`, fill: color, opacity: stacked ? 0.85 : 0.55 }, si);
|
|
99
|
+
}
|
|
100
|
+
const pts = tops.map((v, i) => `${x(i)},${y(v)}`).join(" ");
|
|
101
|
+
const sw = Math.max(1.5, ph * 0.012);
|
|
102
|
+
return /* @__PURE__ */ jsxs(G, { children: [
|
|
103
|
+
/* @__PURE__ */ jsx(Polyline, { points: pts, fill: "none", stroke: color, strokeWidth: sw, strokeLinejoin: "round", strokeLinecap: "round" }),
|
|
104
|
+
tops.map((v, i) => /* @__PURE__ */ jsx(Circle, { cx: x(i), cy: y(v), r: sw * 1.3, fill: color }, i))
|
|
105
|
+
] }, si);
|
|
106
|
+
});
|
|
107
|
+
} else {
|
|
108
|
+
const horizontal = layer.chart === "row";
|
|
109
|
+
const stacked = Boolean(layer.stacked);
|
|
110
|
+
const max = chartMax(data, stacked);
|
|
111
|
+
const band = (horizontal ? ph : bw) / n;
|
|
112
|
+
const groups = stacked ? 1 : data.series.length;
|
|
113
|
+
const barW = band * 0.7 / groups;
|
|
114
|
+
const length = horizontal ? bw : ph;
|
|
115
|
+
const rects = [];
|
|
116
|
+
for (let i = 0; i < n; i += 1) {
|
|
117
|
+
let offset = 0;
|
|
118
|
+
data.series.forEach((s, si) => {
|
|
119
|
+
var _a2;
|
|
120
|
+
const v = Math.max(0, (_a2 = s.values[i]) != null ? _a2 : 0);
|
|
121
|
+
const size = v / max * length;
|
|
122
|
+
const across = i * band + band * 0.15 + (stacked ? 0 : si * barW);
|
|
123
|
+
const along = stacked ? offset : 0;
|
|
124
|
+
offset += size;
|
|
125
|
+
const color = colors[si % colors.length];
|
|
126
|
+
rects.push(horizontal ? /* @__PURE__ */ jsx(Rect, { x: along, y: across, width: size, height: barW, fill: color }, `${i}-${si}`) : /* @__PURE__ */ jsx(Rect, { x: across, y: ph - along - size, width: barW, height: size, fill: color }, `${i}-${si}`));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
body = rects;
|
|
130
|
+
}
|
|
131
|
+
const legendFont = Math.max(6, legendH * 0.6);
|
|
132
|
+
const pie = layer.chart === "pie" || layer.chart === "donut";
|
|
133
|
+
const entries = pie ? data.categories : data.series.map((s) => s.name);
|
|
134
|
+
const slot = entries.length ? bw / entries.length : bw;
|
|
135
|
+
return /* @__PURE__ */ jsxs(G, { children: [
|
|
136
|
+
body,
|
|
137
|
+
legend ? entries.map((name, i) => /* @__PURE__ */ jsxs(G, { children: [
|
|
138
|
+
/* @__PURE__ */ jsx(Rect, { x: i * slot, y: ph + legendH * 0.3, width: legendFont * 0.8, height: legendFont * 0.8, rx: legendFont * 0.2, fill: colors[i % colors.length] }),
|
|
139
|
+
/* @__PURE__ */ jsx(SvgText, { x: i * slot + legendFont * 1.1, y: ph + legendH * 0.3 + legendFont * 0.75, fontSize: legendFont, fill: ink, children: name || `Series ${i + 1}` })
|
|
140
|
+
] }, `lg${i}`)) : null
|
|
141
|
+
] });
|
|
142
|
+
}
|
|
143
|
+
function croppedPlacement(bw, bh, crop) {
|
|
144
|
+
const c = crop && crop.w > 0 && crop.h > 0 ? crop : {
|
|
145
|
+
x: 0,
|
|
146
|
+
y: 0,
|
|
147
|
+
w: 1,
|
|
148
|
+
h: 1
|
|
149
|
+
};
|
|
150
|
+
const iw = bw / c.w;
|
|
151
|
+
const ih = bh / c.h;
|
|
152
|
+
return {
|
|
153
|
+
left: -c.x * iw,
|
|
154
|
+
top: -c.y * ih,
|
|
155
|
+
width: iw,
|
|
156
|
+
height: ih
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function imageSvg(svg, layer, bw, bh, W, onLoad) {
|
|
160
|
+
var _a, _b;
|
|
161
|
+
if (!layer.src) return null;
|
|
162
|
+
const {
|
|
163
|
+
Defs,
|
|
164
|
+
ClipPath,
|
|
165
|
+
Path,
|
|
166
|
+
Rect,
|
|
167
|
+
Image: SvgImage,
|
|
168
|
+
G,
|
|
169
|
+
Filter,
|
|
170
|
+
FeColorMatrix,
|
|
171
|
+
FeGaussianBlur
|
|
172
|
+
} = svg;
|
|
173
|
+
const id = safeId(layer.id);
|
|
174
|
+
const place = croppedPlacement(bw, bh, layer.crop);
|
|
175
|
+
const outline = layer.clipPath ? scalePath(layer.clipPath, bw, bh) : null;
|
|
176
|
+
const matrix = adjustColorMatrix(layer.adjust);
|
|
177
|
+
const blur = ((_b = (_a = layer.adjust) == null ? void 0 : _a.blurFrac) != null ? _b : 0) * W;
|
|
178
|
+
const look = Boolean((matrix || blur) && Filter && FeColorMatrix && FeGaussianBlur);
|
|
179
|
+
const shadow = layer.shadow;
|
|
180
|
+
const off = shadow ? offsetAlong(shadow.angle, shadow.distFrac * W) : null;
|
|
181
|
+
const shadowBlur = shadow ? shadow.blurFrac * W : 0;
|
|
182
|
+
return /* @__PURE__ */ jsxs(G, { children: [
|
|
183
|
+
/* @__PURE__ */ jsxs(Defs, { children: [
|
|
184
|
+
/* @__PURE__ */ jsx(ClipPath, { id: `ic-${id}`, children: outline ? /* @__PURE__ */ jsx(Path, { d: outline }) : /* @__PURE__ */ jsx(Rect, { x: 0, y: 0, width: bw, height: bh }) }),
|
|
185
|
+
look ? /* @__PURE__ */ jsxs(Filter, { id: `if-${id}`, x: "-20%", y: "-20%", width: "140%", height: "140%", children: [
|
|
186
|
+
matrix ? /* @__PURE__ */ jsx(FeColorMatrix, { type: "matrix", values: matrix }) : null,
|
|
187
|
+
blur ? /* @__PURE__ */ jsx(FeGaussianBlur, { stdDeviation: blur / 2 }) : null
|
|
188
|
+
] }) : null,
|
|
189
|
+
shadow && shadowBlur > 0 && Filter && FeGaussianBlur ? /* @__PURE__ */ jsx(Filter, { id: `is-${id}`, x: "-50%", y: "-50%", width: "200%", height: "200%", children: /* @__PURE__ */ jsx(FeGaussianBlur, { stdDeviation: shadowBlur / 2 }) }) : null
|
|
190
|
+
] }),
|
|
191
|
+
shadow && off ? /* @__PURE__ */ jsx(G, __spreadProps(__spreadValues({ transform: `translate(${off.dx}, ${off.dy})`, opacity: shadow.alpha }, shadowBlur > 0 && Filter && FeGaussianBlur ? {
|
|
192
|
+
filter: `url(#is-${id})`
|
|
193
|
+
} : {}), { children: outline ? /* @__PURE__ */ jsx(Path, { d: outline, fill: shadow.color }) : /* @__PURE__ */ jsx(Rect, { x: 0, y: 0, width: bw, height: bh, fill: shadow.color }) })) : null,
|
|
194
|
+
/* @__PURE__ */ jsx(G, { clipPath: `url(#ic-${id})`, children: /* @__PURE__ */ jsx(SvgImage, __spreadValues({ href: {
|
|
195
|
+
uri: layer.src
|
|
196
|
+
}, x: place.left, y: place.top, width: place.width, height: place.height, preserveAspectRatio: "none", onLoad }, look ? {
|
|
197
|
+
filter: `url(#if-${id})`
|
|
198
|
+
} : {})) })
|
|
199
|
+
] });
|
|
200
|
+
}
|
|
201
|
+
function needsSvgText(layer) {
|
|
202
|
+
var _a, _b;
|
|
203
|
+
return Boolean(layer.curve) || ((_a = layer.effect) == null ? void 0 : _a.kind) === "hollow" || ((_b = layer.effect) == null ? void 0 : _b.kind) === "splice";
|
|
204
|
+
}
|
|
205
|
+
function svgFont(family, weight, italic) {
|
|
206
|
+
const f = resolveTextFont(family, weight, italic);
|
|
207
|
+
const out = {};
|
|
208
|
+
if (f.fontFamily) out.fontFamily = f.fontFamily;
|
|
209
|
+
if (f.fontWeight) out.fontWeight = String(f.fontWeight);
|
|
210
|
+
if (f.fontStyle) out.fontStyle = f.fontStyle;
|
|
211
|
+
return out;
|
|
212
|
+
}
|
|
213
|
+
function linePieces(spans, lines) {
|
|
214
|
+
const drawn = spans.map((s) => s.text).join("");
|
|
215
|
+
const styleAt = [];
|
|
216
|
+
for (const s of spans) for (let i = 0; i < s.text.length; i += 1) styleAt.push(s.style);
|
|
217
|
+
let cursor = 0;
|
|
218
|
+
return lines.map((line) => {
|
|
219
|
+
var _a;
|
|
220
|
+
let start = cursor;
|
|
221
|
+
const t = line.text;
|
|
222
|
+
if (drawn.startsWith(t, cursor)) {
|
|
223
|
+
cursor += t.length;
|
|
224
|
+
} else {
|
|
225
|
+
const at = drawn.indexOf(t.replace(/\s+$/, ""), cursor);
|
|
226
|
+
if (at < 0) return [{
|
|
227
|
+
text: t.replace(/\n$/, ""),
|
|
228
|
+
style: null
|
|
229
|
+
}];
|
|
230
|
+
start = at;
|
|
231
|
+
cursor = at + t.length;
|
|
232
|
+
}
|
|
233
|
+
if (drawn[cursor] === "\n" && !t.endsWith("\n")) cursor += 1;
|
|
234
|
+
const pieces = [];
|
|
235
|
+
for (let i = start; i < Math.min(start + t.length, drawn.length); i += 1) {
|
|
236
|
+
const ch = drawn[i];
|
|
237
|
+
if (ch === "\n") continue;
|
|
238
|
+
const st = (_a = styleAt[i]) != null ? _a : null;
|
|
239
|
+
const prev = pieces[pieces.length - 1];
|
|
240
|
+
if (prev && prev.style === st) prev.text += ch;
|
|
241
|
+
else pieces.push({
|
|
242
|
+
text: ch,
|
|
243
|
+
style: st
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return pieces;
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function textSvg(svg, layer, lines, W, fontPair, curve) {
|
|
250
|
+
var _a, _b, _c;
|
|
251
|
+
const {
|
|
252
|
+
G,
|
|
253
|
+
Text: SvgText,
|
|
254
|
+
TSpan,
|
|
255
|
+
Rect,
|
|
256
|
+
Defs,
|
|
257
|
+
Filter,
|
|
258
|
+
FeGaussianBlur,
|
|
259
|
+
Path,
|
|
260
|
+
TextPath
|
|
261
|
+
} = svg;
|
|
262
|
+
const id = safeId(layer.id);
|
|
263
|
+
const fs = Math.max(1, layer.fontSizeFrac * W);
|
|
264
|
+
const family = layerFontFamily(layer, fontPair);
|
|
265
|
+
const baseFont = svgFont(family, layer.fontWeight, layer.italic);
|
|
266
|
+
const spans = layerSpans(layer);
|
|
267
|
+
const own = (piece) => {
|
|
268
|
+
var _a2, _b2;
|
|
269
|
+
return (_b2 = (_a2 = piece.style) == null ? void 0 : _a2.color) != null ? _b2 : layer.color;
|
|
270
|
+
};
|
|
271
|
+
const fx = layer.effect;
|
|
272
|
+
const canBlur = Boolean(Filter && FeGaussianBlur);
|
|
273
|
+
const blurs = [];
|
|
274
|
+
const blurId = (std) => {
|
|
275
|
+
const key = `tb-${id}-${blurs.length}`;
|
|
276
|
+
blurs.push({
|
|
277
|
+
key,
|
|
278
|
+
std
|
|
279
|
+
});
|
|
280
|
+
return `url(#${key})`;
|
|
281
|
+
};
|
|
282
|
+
const tracking = ((_a = layer.letterSpacingFrac) != null ? _a : 0) * W;
|
|
283
|
+
const deco = (st) => {
|
|
284
|
+
var _a2, _b2;
|
|
285
|
+
const u = (_a2 = st == null ? void 0 : st.underline) != null ? _a2 : layer.underline;
|
|
286
|
+
const s = (_b2 = st == null ? void 0 : st.strike) != null ? _b2 : layer.strike;
|
|
287
|
+
return u && s ? "underline line-through" : u ? "underline" : s ? "line-through" : void 0;
|
|
288
|
+
};
|
|
289
|
+
const pieceProps = (piece) => {
|
|
290
|
+
var _a2, _b2, _c2;
|
|
291
|
+
const st = piece.style;
|
|
292
|
+
const props = {};
|
|
293
|
+
if ((st == null ? void 0 : st.fontSizeFrac) != null) props.fontSize = st.fontSizeFrac * W;
|
|
294
|
+
if ((st == null ? void 0 : st.letterSpacingFrac) != null) props.letterSpacing = st.letterSpacingFrac * W;
|
|
295
|
+
if (st && (st.fontFamily != null || st.fontWeight != null || st.italic != null)) {
|
|
296
|
+
Object.assign(props, svgFont((_a2 = st.fontFamily) != null ? _a2 : family, (_b2 = st.fontWeight) != null ? _b2 : layer.fontWeight, (_c2 = st.italic) != null ? _c2 : layer.italic));
|
|
297
|
+
}
|
|
298
|
+
const d = deco(st);
|
|
299
|
+
if (d) props.textDecoration = d;
|
|
300
|
+
return props;
|
|
301
|
+
};
|
|
302
|
+
const paintOf = (v, piece) => typeof v === "function" ? v(piece) : v;
|
|
303
|
+
let draw;
|
|
304
|
+
let highlight = null;
|
|
305
|
+
if (curve) {
|
|
306
|
+
const arc = curveArc(curve.width, layer.curve, curve.ascender, curve.descender);
|
|
307
|
+
const flat = spans.map((s) => ({
|
|
308
|
+
text: s.text.replace(/\n/g, " "),
|
|
309
|
+
style: s.style
|
|
310
|
+
}));
|
|
311
|
+
const pathId = `tp-${id}`;
|
|
312
|
+
const shiftX = layer.w * W / 2;
|
|
313
|
+
const shiftY = arc ? -arc.minY : curve.ascender;
|
|
314
|
+
draw = (ink, key) => {
|
|
315
|
+
var _a2, _b2;
|
|
316
|
+
return /* @__PURE__ */ jsx(G, __spreadProps(__spreadValues({ transform: `translate(${shiftX + ((_a2 = ink.dx) != null ? _a2 : 0)}, ${shiftY + ((_b2 = ink.dy) != null ? _b2 : 0)})`, opacity: ink.opacity }, ink.filter ? {
|
|
317
|
+
filter: ink.filter
|
|
318
|
+
} : {}), { children: /* @__PURE__ */ jsx(SvgText, __spreadProps(__spreadValues({ fontSize: fs, letterSpacing: tracking, textAnchor: "middle" }, baseFont), { children: /* @__PURE__ */ jsx(TextPath, { href: `#${pathId}`, startOffset: "50%", children: flat.map((p, i) => {
|
|
319
|
+
var _a3;
|
|
320
|
+
return /* @__PURE__ */ jsx(TSpan, __spreadProps(__spreadValues({}, pieceProps(p)), { fill: (_a3 = paintOf(ink.fill, p)) != null ? _a3 : "none", stroke: paintOf(ink.stroke, p), strokeWidth: ink.strokeWidth, strokeLinejoin: "round", children: p.text }), i);
|
|
321
|
+
}) }) })) }), key);
|
|
322
|
+
};
|
|
323
|
+
const arcDef = arc ? /* @__PURE__ */ jsx(Path, { id: pathId, d: arc.d, fill: "none" }) : /* @__PURE__ */ jsx(Path, { id: pathId, d: `M${-curve.width / 2} 0H${curve.width / 2}`, fill: "none" });
|
|
324
|
+
highlight = /* @__PURE__ */ jsx(Defs, { children: arcDef });
|
|
325
|
+
} else {
|
|
326
|
+
const pieces = linePieces(spans, lines);
|
|
327
|
+
draw = (ink, key) => {
|
|
328
|
+
var _a2, _b2;
|
|
329
|
+
return /* @__PURE__ */ jsx(G, __spreadProps(__spreadValues({ transform: ink.dx || ink.dy ? `translate(${(_a2 = ink.dx) != null ? _a2 : 0}, ${(_b2 = ink.dy) != null ? _b2 : 0})` : void 0, opacity: ink.opacity }, ink.filter ? {
|
|
330
|
+
filter: ink.filter
|
|
331
|
+
} : {}), { children: lines.map((line, li) => {
|
|
332
|
+
var _a3;
|
|
333
|
+
return /* @__PURE__ */ jsx(SvgText, __spreadProps(__spreadValues({ x: line.x, y: line.y + line.ascender, fontSize: fs, letterSpacing: tracking }, baseFont), { children: ((_a3 = pieces[li]) != null ? _a3 : []).map((p, pi) => {
|
|
334
|
+
var _a4;
|
|
335
|
+
return /* @__PURE__ */ jsx(TSpan, __spreadProps(__spreadValues({}, pieceProps(p)), { fill: (_a4 = paintOf(ink.fill, p)) != null ? _a4 : "none", stroke: paintOf(ink.stroke, p), strokeWidth: ink.strokeWidth, strokeLinejoin: "round", children: p.text }), pi);
|
|
336
|
+
}) }), li);
|
|
337
|
+
}) }), key);
|
|
338
|
+
};
|
|
339
|
+
if ((fx == null ? void 0 : fx.kind) === "background") {
|
|
340
|
+
const spread = fx.spreadEm * fs;
|
|
341
|
+
highlight = lines.filter((l) => l.width > 0).map((l, i) => /* @__PURE__ */ jsx(Rect, { x: l.x - spread, y: l.y, width: l.width + spread * 2, height: l.height, rx: fx.roundness * l.height / 2, fill: rgbaOf(fx.color, fx.opacity) }, `hl${i}`));
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
const layers = [];
|
|
345
|
+
if ((fx == null ? void 0 : fx.kind) === "echo") {
|
|
346
|
+
const o = offsetAlong(fx.angle, fx.offsetEm * fs);
|
|
347
|
+
layers.push(draw({
|
|
348
|
+
fill: (p) => {
|
|
349
|
+
var _a2;
|
|
350
|
+
return rgbaOf((_a2 = fx.color) != null ? _a2 : own(p), 0.25);
|
|
351
|
+
},
|
|
352
|
+
dx: o.dx * 2,
|
|
353
|
+
dy: o.dy * 2
|
|
354
|
+
}, "echo2"));
|
|
355
|
+
layers.push(draw({
|
|
356
|
+
fill: (p) => {
|
|
357
|
+
var _a2;
|
|
358
|
+
return rgbaOf((_a2 = fx.color) != null ? _a2 : own(p), 0.5);
|
|
359
|
+
},
|
|
360
|
+
dx: o.dx,
|
|
361
|
+
dy: o.dy
|
|
362
|
+
}, "echo1"));
|
|
363
|
+
} else if ((fx == null ? void 0 : fx.kind) === "glitch") {
|
|
364
|
+
const [a, b] = (_b = GLITCH_COLORS[fx.palette]) != null ? _b : GLITCH_COLORS["cyan-magenta"];
|
|
365
|
+
const o = offsetAlong(fx.angle, fx.offsetEm * fs);
|
|
366
|
+
layers.push(draw({
|
|
367
|
+
fill: a,
|
|
368
|
+
dx: -o.dx,
|
|
369
|
+
dy: -o.dy
|
|
370
|
+
}, "gl-a"));
|
|
371
|
+
layers.push(draw({
|
|
372
|
+
fill: b,
|
|
373
|
+
dx: o.dx,
|
|
374
|
+
dy: o.dy
|
|
375
|
+
}, "gl-b"));
|
|
376
|
+
} else if ((fx == null ? void 0 : fx.kind) === "splice") {
|
|
377
|
+
const o = offsetAlong(fx.angle, fx.offsetEm * fs);
|
|
378
|
+
layers.push(draw({
|
|
379
|
+
fill: (p) => {
|
|
380
|
+
var _a2;
|
|
381
|
+
return (_a2 = fx.color) != null ? _a2 : spliceFillOf(own(p));
|
|
382
|
+
},
|
|
383
|
+
dx: o.dx,
|
|
384
|
+
dy: o.dy
|
|
385
|
+
}, "splice"));
|
|
386
|
+
}
|
|
387
|
+
const shadowCopy = (color, blur, dx, dy, key, opacity) => layers.push(draw(__spreadValues({
|
|
388
|
+
fill: color,
|
|
389
|
+
dx,
|
|
390
|
+
dy,
|
|
391
|
+
opacity
|
|
392
|
+
}, canBlur && blur > 0.5 ? {
|
|
393
|
+
filter: blurId(blur / 2)
|
|
394
|
+
} : {}), key));
|
|
395
|
+
if (layer.shadow) {
|
|
396
|
+
const s = layer.shadow;
|
|
397
|
+
const o = offsetAlong(s.angle, s.distFrac * W);
|
|
398
|
+
shadowCopy(rgbaOf(s.color, s.alpha), s.blurFrac * W, o.dx, o.dy, "drop");
|
|
399
|
+
} else if ((fx == null ? void 0 : fx.kind) === "lift") {
|
|
400
|
+
const l = liftShadow(fx.intensity, fs);
|
|
401
|
+
shadowCopy(l.color, l.blur, 0, l.dy, "lift");
|
|
402
|
+
} else if ((fx == null ? void 0 : fx.kind) === "glow") {
|
|
403
|
+
shadowCopy(rgbaOf((_c = fx.color) != null ? _c : layer.color, fx.opacity), fx.sizeEm * fs, 0, 0, "glow");
|
|
404
|
+
} else if ((fx == null ? void 0 : fx.kind) === "neon") {
|
|
405
|
+
shadowCopy(layer.color, neonBlur(fx.intensity, fs), 0, 0, "neon");
|
|
406
|
+
}
|
|
407
|
+
if ((fx == null ? void 0 : fx.kind) === "hollow" || (fx == null ? void 0 : fx.kind) === "splice") {
|
|
408
|
+
layers.push(draw({
|
|
409
|
+
fill: "none",
|
|
410
|
+
stroke: own,
|
|
411
|
+
strokeWidth: fs * fx.thicknessEm
|
|
412
|
+
}, "words"));
|
|
413
|
+
} else {
|
|
414
|
+
if (layer.outline && layer.outline.widthEm > 0) {
|
|
415
|
+
layers.push(draw({
|
|
416
|
+
fill: layer.outline.color,
|
|
417
|
+
stroke: layer.outline.color,
|
|
418
|
+
strokeWidth: layer.outline.widthEm * fs * 2
|
|
419
|
+
}, "outline"));
|
|
420
|
+
}
|
|
421
|
+
const neon = (fx == null ? void 0 : fx.kind) === "neon" ? 0.45 + 0.35 * fx.intensity : 0;
|
|
422
|
+
layers.push(draw({
|
|
423
|
+
fill: neon ? (p) => tintOf(own(p), neon) : own
|
|
424
|
+
}, "words"));
|
|
425
|
+
}
|
|
426
|
+
return /* @__PURE__ */ jsxs(G, { children: [
|
|
427
|
+
blurs.length ? /* @__PURE__ */ jsx(Defs, { children: blurs.map((b) => /* @__PURE__ */ jsx(Filter, { id: b.key, x: "-50%", y: "-50%", width: "200%", height: "200%", children: /* @__PURE__ */ jsx(FeGaussianBlur, { stdDeviation: b.std }) }, b.key)) }) : null,
|
|
428
|
+
highlight,
|
|
429
|
+
layers
|
|
430
|
+
] });
|
|
431
|
+
}
|
|
432
|
+
function curvedHeight(layer, curve) {
|
|
433
|
+
const arc = curveArc(curve.width, layer.curve, curve.ascender, curve.descender);
|
|
434
|
+
return arc ? arc.height : curve.ascender + curve.descender;
|
|
435
|
+
}export{chartSvg,croppedPlacement,curvedHeight,imageSvg,linePieces,needsSvgText,shapeSvg,textSvg};//# sourceMappingURL=svgParts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svgParts.js","sources":["../../../../src/features/design/render/svgParts.tsx"],"sourcesContent":["/**\n * Layers as react-native-svg elements, in their own box's coordinates - the\n * drawing both the live canvas (where a view alone cannot do it: true outlines,\n * curved text, filtered pictures) and the export page (render/PageSvg.tsx)\n * share, so what is exported is what was on screen.\n *\n * Every length on a layer is a fraction of the page WIDTH, so each part takes\n * `W`, the page's drawn width in the units of the svg it lands in.\n *\n * Text cannot wrap itself in svg. Its lines come measured from a hidden RN\n * Text of the same style (`MeasuredLine`, render/TextMeasure.tsx), and each\n * line is drawn as one svg text at the place RN laid it out.\n */\nimport React from 'react';\nimport { chartMax, pieSlices, readChartData, slicePath } from '../doc/chart';\nimport { curveArc } from '../doc/curve';\nimport { adjustColorMatrix } from '../doc/imageAdjust';\nimport { scalePath } from '../doc/pathScale';\nimport { gradientLine, isStrokeShape, roundRectD, shapeSpec } from '../doc/shapes';\nimport { layerSpans, type RunStyle, type TextSpan } from '../doc/textLayout';\nimport { GLITCH_COLORS, liftShadow, neonBlur, offsetAlong, rgbaOf, spliceFillOf, tintOf } from '../doc/textEffects';\nimport {\n layerFontFamily,\n type ChartLayer,\n type DesignFontPair,\n type ImageLayer,\n type ShapeLayer,\n type TextLayer,\n} from '../doc/types';\nimport { resolveTextFont } from './fontRegistry';\n\nexport type SvgModule = typeof import('react-native-svg');\n\n/** One laid-out line of a text layer, in the units it was measured at. */\nexport interface MeasuredLine {\n text: string;\n x: number;\n y: number;\n width: number;\n height: number;\n ascender: number;\n descender: number;\n}\n\n/** What a curved layer needs measured: its words on one line. */\nexport interface MeasuredCurve {\n width: number;\n ascender: number;\n descender: number;\n}\n\n/** A per-layer id prefix that survives being several times in one svg. */\nconst safeId = (id: string) => id.replace(/[^A-Za-z0-9_-]/g, '_');\n\n// ── Shapes ───────────────────────────────────────────────────────────────\n\nexport function shapeSvg(svg: SvgModule, layer: ShapeLayer, bw: number, bh: number, W: number): React.ReactElement {\n const { Path, Line, Polygon, Defs, LinearGradient, Stop, G } = svg;\n const stroke = layer.stroke && layer.stroke !== 'none' ? layer.stroke : undefined;\n const sw = Math.max(0.5, (layer.strokeWidthFrac ?? 0) * W);\n const gradient = layer.fillTo ? gradientLine(0, 0, bw, bh, layer.fillAngle ?? 180) : null;\n const gid = `sg-${safeId(layer.id)}`;\n const paint = gradient ? `url(#${gid})` : layer.fill;\n let body: React.ReactNode;\n if (isStrokeShape(layer.shape)) {\n const vertical = bh > bw;\n const thickness = Math.max(sw, 1);\n const span = vertical ? bh : bw;\n const headLen = layer.shape === 'arrow' ? Math.min(span * 0.4, thickness * 3.2) : 0;\n const c = vertical ? bw / 2 : bh / 2;\n const tip = vertical ? bh : bw;\n body = (\n <>\n {vertical ? (\n <Line\n x1={c}\n y1={0}\n x2={c}\n y2={bh - headLen}\n stroke={paint}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n />\n ) : (\n <Line\n x1={0}\n y1={c}\n x2={bw - headLen}\n y2={c}\n stroke={paint}\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n />\n )}\n {headLen > 0 ? (\n <Polygon\n fill={paint}\n points={\n vertical\n ? `${c},${tip} ${c - thickness * 1.6},${tip - headLen} ${c + thickness * 1.6},${tip - headLen}`\n : `${tip},${c} ${tip - headLen},${c - thickness * 1.6} ${tip - headLen},${c + thickness * 1.6}`\n }\n />\n ) : null}\n </>\n );\n } else {\n const d =\n layer.shape === 'rect'\n ? roundRectD(bw, bh, layer.radiusFrac ?? 0)\n : scalePath(shapeSpec(layer.shape).d, bw, bh);\n body = <Path d={d} fill={paint} stroke={stroke} strokeWidth={stroke ? sw : 0} strokeLinejoin=\"round\" />;\n }\n return (\n <G>\n {gradient ? (\n <Defs>\n <LinearGradient\n id={gid}\n gradientUnits=\"userSpaceOnUse\"\n x1={gradient[0]}\n y1={gradient[1]}\n x2={gradient[2]}\n y2={gradient[3]}\n >\n <Stop offset=\"0\" stopColor={layer.fill} />\n <Stop offset=\"1\" stopColor={layer.fillTo} />\n </LinearGradient>\n </Defs>\n ) : null}\n {body}\n </G>\n );\n}\n\n// ── Charts ───────────────────────────────────────────────────────────────\n\n/** Every series: grouped or stacked bars and rows, a line or area per series, a pie of the first. */\nexport function chartSvg(svg: SvgModule, layer: ChartLayer, bw: number, bh: number): React.ReactElement | null {\n const { Rect, Path, Polyline, G, Text: SvgText, Circle } = svg;\n const data = readChartData(layer);\n const colors = layer.colors?.length ? layer.colors : ['#38bdf8'];\n if (data.categories.length === 0) return null;\n const ink = layer.ink ?? '#475569';\n const n = data.categories.length;\n const legend = Boolean(layer.legend) && data.series.length > 0;\n const legendH = legend ? Math.max(10, bh * 0.08) : 0;\n const ph = bh - legendH;\n let body: React.ReactNode;\n if (layer.chart === 'pie' || layer.chart === 'donut') {\n const r = Math.min(bw, ph) / 2;\n const inner = layer.chart === 'donut' ? r * (layer.holeFrac ?? 0.55) : 0;\n body = pieSlices(data.series[0]?.values ?? []).map((s) => (\n <Path\n key={s.index}\n d={slicePath(bw / 2, ph / 2, r, s.start, s.sweep, inner)}\n fill={colors[s.index % colors.length]}\n />\n ));\n } else if (layer.chart === 'line' || layer.chart === 'area') {\n const stacked = layer.chart === 'area' && Boolean(layer.stacked);\n const max = chartMax(data, stacked);\n const x = (i: number) => (n === 1 ? bw / 2 : (i / (n - 1)) * bw);\n const y = (v: number) => ph - (Math.max(0, v) / max) * ph;\n const base = new Array(n).fill(0);\n body = data.series.map((s, si) => {\n const color = colors[si % colors.length];\n const tops = s.values.map((v, i) => (stacked ? base[i] + Math.max(0, v) : v));\n const bottoms = stacked ? [...base] : new Array(n).fill(0);\n if (stacked) tops.forEach((t, i) => (base[i] = t));\n if (layer.chart === 'area') {\n const top = tops.map((v, i) => `${i === 0 ? 'M' : 'L'}${x(i)} ${y(v)}`).join('');\n const bottom = bottoms\n .map((v, i) => [i, v] as const)\n .reverse()\n .map(([i, v]) => `L${x(i)} ${y(v)}`)\n .join('');\n return <Path key={si} d={`${top}${bottom}Z`} fill={color} opacity={stacked ? 0.85 : 0.55} />;\n }\n const pts = tops.map((v, i) => `${x(i)},${y(v)}`).join(' ');\n const sw = Math.max(1.5, ph * 0.012);\n return (\n <G key={si}>\n <Polyline\n points={pts}\n fill=\"none\"\n stroke={color}\n strokeWidth={sw}\n strokeLinejoin=\"round\"\n strokeLinecap=\"round\"\n />\n {tops.map((v, i) => (\n <Circle key={i} cx={x(i)} cy={y(v)} r={sw * 1.3} fill={color} />\n ))}\n </G>\n );\n });\n } else {\n const horizontal = layer.chart === 'row';\n const stacked = Boolean(layer.stacked);\n const max = chartMax(data, stacked);\n const band = (horizontal ? ph : bw) / n;\n const groups = stacked ? 1 : data.series.length;\n const barW = (band * 0.7) / groups;\n const length = horizontal ? bw : ph;\n const rects: React.ReactNode[] = [];\n for (let i = 0; i < n; i += 1) {\n let offset = 0;\n data.series.forEach((s, si) => {\n const v = Math.max(0, s.values[i] ?? 0);\n const size = (v / max) * length;\n const across = i * band + band * 0.15 + (stacked ? 0 : si * barW);\n const along = stacked ? offset : 0;\n offset += size;\n const color = colors[si % colors.length];\n rects.push(\n horizontal ? (\n <Rect key={`${i}-${si}`} x={along} y={across} width={size} height={barW} fill={color} />\n ) : (\n <Rect\n key={`${i}-${si}`}\n x={across}\n y={ph - along - size}\n width={barW}\n height={size}\n fill={color}\n />\n ),\n );\n });\n }\n body = rects;\n }\n const legendFont = Math.max(6, legendH * 0.6);\n const pie = layer.chart === 'pie' || layer.chart === 'donut';\n const entries = pie ? data.categories : data.series.map((s) => s.name);\n const slot = entries.length ? bw / entries.length : bw;\n return (\n <G>\n {body}\n {legend\n ? entries.map((name, i) => (\n <G key={`lg${i}`}>\n <Rect\n x={i * slot}\n y={ph + legendH * 0.3}\n width={legendFont * 0.8}\n height={legendFont * 0.8}\n rx={legendFont * 0.2}\n fill={colors[i % colors.length]}\n />\n <SvgText\n x={i * slot + legendFont * 1.1}\n y={ph + legendH * 0.3 + legendFont * 0.75}\n fontSize={legendFont}\n fill={ink}\n >\n {name || `Series ${i + 1}`}\n </SvgText>\n </G>\n ))\n : null}\n </G>\n );\n}\n\n// ── Images ───────────────────────────────────────────────────────────────\n\n/** Where the whole source sits behind a box that shows only `crop` of it. */\nexport function croppedPlacement(bw: number, bh: number, crop?: { x: number; y: number; w: number; h: number }) {\n const c = crop && crop.w > 0 && crop.h > 0 ? crop : { x: 0, y: 0, w: 1, h: 1 };\n const iw = bw / c.w;\n const ih = bh / c.h;\n return { left: -c.x * iw, top: -c.y * ih, width: iw, height: ih };\n}\n\n/** A picture with its crop, frame, look and shadow (web drawImageLayer). */\nexport function imageSvg(\n svg: SvgModule,\n layer: ImageLayer,\n bw: number,\n bh: number,\n W: number,\n onLoad?: () => void,\n): React.ReactElement | null {\n if (!layer.src) return null;\n const { Defs, ClipPath, Path, Rect, Image: SvgImage, G, Filter, FeColorMatrix, FeGaussianBlur } = svg;\n const id = safeId(layer.id);\n const place = croppedPlacement(bw, bh, layer.crop);\n const outline = layer.clipPath ? scalePath(layer.clipPath, bw, bh) : null;\n const matrix = adjustColorMatrix(layer.adjust);\n const blur = (layer.adjust?.blurFrac ?? 0) * W;\n const look = Boolean((matrix || blur) && Filter && FeColorMatrix && FeGaussianBlur);\n const shadow = layer.shadow;\n const off = shadow ? offsetAlong(shadow.angle, shadow.distFrac * W) : null;\n const shadowBlur = shadow ? shadow.blurFrac * W : 0;\n return (\n <G>\n <Defs>\n <ClipPath id={`ic-${id}`}>\n {outline ? <Path d={outline} /> : <Rect x={0} y={0} width={bw} height={bh} />}\n </ClipPath>\n {look ? (\n <Filter id={`if-${id}`} x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n {matrix ? <FeColorMatrix type=\"matrix\" values={matrix} /> : null}\n {blur ? <FeGaussianBlur stdDeviation={blur / 2} /> : null}\n </Filter>\n ) : null}\n {shadow && shadowBlur > 0 && Filter && FeGaussianBlur ? (\n <Filter id={`is-${id}`} x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <FeGaussianBlur stdDeviation={shadowBlur / 2} />\n </Filter>\n ) : null}\n </Defs>\n {shadow && off ? (\n <G\n transform={`translate(${off.dx}, ${off.dy})`}\n opacity={shadow.alpha}\n {...(shadowBlur > 0 && Filter && FeGaussianBlur ? { filter: `url(#is-${id})` } : {})}\n >\n {outline ? (\n <Path d={outline} fill={shadow.color} />\n ) : (\n <Rect x={0} y={0} width={bw} height={bh} fill={shadow.color} />\n )}\n </G>\n ) : null}\n <G clipPath={`url(#ic-${id})`}>\n <SvgImage\n href={{ uri: layer.src }}\n x={place.left}\n y={place.top}\n width={place.width}\n height={place.height}\n preserveAspectRatio=\"none\"\n onLoad={onLoad}\n {...(look ? { filter: `url(#if-${id})` } : {})}\n />\n </G>\n </G>\n );\n}\n\n// ── Text ─────────────────────────────────────────────────────────────────\n\n/** Text a view cannot draw faithfully: true outlines, a splice, a curve. */\nexport function needsSvgText(layer: TextLayer): boolean {\n return Boolean(layer.curve) || layer.effect?.kind === 'hollow' || layer.effect?.kind === 'splice';\n}\n\ninterface SvgFont {\n fontFamily?: string;\n fontWeight?: string;\n fontStyle?: 'normal' | 'italic';\n}\n\nfunction svgFont(family: string, weight: number | undefined, italic: boolean | undefined): SvgFont {\n const f = resolveTextFont(family, weight, italic);\n const out: SvgFont = {};\n if (f.fontFamily) out.fontFamily = f.fontFamily;\n if (f.fontWeight) out.fontWeight = String(f.fontWeight);\n if (f.fontStyle) out.fontStyle = f.fontStyle;\n return out;\n}\n\n/** One stretch of a line in one style. */\ninterface Piece {\n text: string;\n style: RunStyle | null;\n}\n\n/** The pieces each measured line is made of, found by walking the drawn text alongside the lines. */\nexport function linePieces(spans: TextSpan[], lines: Array<Pick<MeasuredLine, 'text'>>): Piece[][] {\n const drawn = spans.map((s) => s.text).join('');\n const styleAt: Array<RunStyle | null> = [];\n for (const s of spans) for (let i = 0; i < s.text.length; i += 1) styleAt.push(s.style);\n let cursor = 0;\n return lines.map((line) => {\n let start = cursor;\n const t = line.text;\n if (drawn.startsWith(t, cursor)) {\n cursor += t.length;\n } else {\n const at = drawn.indexOf(t.replace(/\\s+$/, ''), cursor);\n if (at < 0) return [{ text: t.replace(/\\n$/, ''), style: null }];\n start = at;\n cursor = at + t.length;\n }\n if (drawn[cursor] === '\\n' && !t.endsWith('\\n')) cursor += 1;\n const pieces: Piece[] = [];\n for (let i = start; i < Math.min(start + t.length, drawn.length); i += 1) {\n const ch = drawn[i];\n if (ch === '\\n') continue;\n const st = styleAt[i] ?? null;\n const prev = pieces[pieces.length - 1];\n if (prev && prev.style === st) prev.text += ch;\n else pieces.push({ text: ch, style: st });\n }\n return pieces;\n });\n}\n\ninterface Ink {\n fill?: string | ((piece: Piece) => string);\n stroke?: string | ((piece: Piece) => string);\n strokeWidth?: number;\n dx?: number;\n dy?: number;\n opacity?: number;\n filter?: string;\n}\n\n/**\n * A text layer as svg, from its measured lines: the effect's copies behind\n * the words, then the words (web shared/textRaster.ts paint order).\n */\nexport function textSvg(\n svg: SvgModule,\n layer: TextLayer,\n lines: MeasuredLine[],\n W: number,\n fontPair?: DesignFontPair,\n curve?: MeasuredCurve | null,\n): React.ReactElement {\n const { G, Text: SvgText, TSpan, Rect, Defs, Filter, FeGaussianBlur, Path, TextPath } = svg;\n const id = safeId(layer.id);\n const fs = Math.max(1, layer.fontSizeFrac * W);\n const family = layerFontFamily(layer, fontPair);\n const baseFont = svgFont(family, layer.fontWeight, layer.italic);\n const spans = layerSpans(layer);\n const own = (piece: Piece) => piece.style?.color ?? layer.color;\n const fx = layer.effect;\n const canBlur = Boolean(Filter && FeGaussianBlur);\n const blurs: Array<{ key: string; std: number }> = [];\n const blurId = (std: number) => {\n const key = `tb-${id}-${blurs.length}`;\n blurs.push({ key, std });\n return `url(#${key})`;\n };\n const tracking = (layer.letterSpacingFrac ?? 0) * W;\n const deco = (st: RunStyle | null) => {\n const u = st?.underline ?? layer.underline;\n const s = st?.strike ?? layer.strike;\n return u && s ? 'underline line-through' : u ? 'underline' : s ? 'line-through' : undefined;\n };\n const pieceProps = (piece: Piece) => {\n const st = piece.style;\n const props: Record<string, unknown> = {};\n if (st?.fontSizeFrac != null) props.fontSize = st.fontSizeFrac * W;\n if (st?.letterSpacingFrac != null) props.letterSpacing = st.letterSpacingFrac * W;\n if (st && (st.fontFamily != null || st.fontWeight != null || st.italic != null)) {\n Object.assign(\n props,\n svgFont(st.fontFamily ?? family, st.fontWeight ?? layer.fontWeight, st.italic ?? layer.italic),\n );\n }\n const d = deco(st);\n if (d) props.textDecoration = d;\n return props;\n };\n const paintOf = (v: Ink['fill'], piece: Piece) => (typeof v === 'function' ? v(piece) : v);\n\n let draw: (ink: Ink, key: string) => React.ReactElement;\n let highlight: React.ReactNode = null;\n if (curve) {\n const arc = curveArc(curve.width, layer.curve, curve.ascender, curve.descender);\n const flat = spans.map((s) => ({ text: s.text.replace(/\\n/g, ' '), style: s.style }));\n const pathId = `tp-${id}`;\n const shiftX = (layer.w * W) / 2;\n const shiftY = arc ? -arc.minY : curve.ascender;\n draw = (ink, key) => (\n <G\n key={key}\n transform={`translate(${shiftX + (ink.dx ?? 0)}, ${shiftY + (ink.dy ?? 0)})`}\n opacity={ink.opacity}\n {...(ink.filter ? { filter: ink.filter } : {})}\n >\n <SvgText fontSize={fs} letterSpacing={tracking} textAnchor=\"middle\" {...baseFont}>\n <TextPath href={`#${pathId}`} startOffset=\"50%\">\n {flat.map((p, i) => (\n <TSpan\n key={i}\n {...pieceProps(p)}\n fill={paintOf(ink.fill, p) ?? 'none'}\n stroke={paintOf(ink.stroke, p)}\n strokeWidth={ink.strokeWidth}\n strokeLinejoin=\"round\"\n >\n {p.text}\n </TSpan>\n ))}\n </TextPath>\n </SvgText>\n </G>\n );\n const arcDef = arc ? (\n <Path id={pathId} d={arc.d} fill=\"none\" />\n ) : (\n <Path id={pathId} d={`M${-curve.width / 2} 0H${curve.width / 2}`} fill=\"none\" />\n );\n highlight = <Defs>{arcDef}</Defs>;\n } else {\n const pieces = linePieces(spans, lines);\n draw = (ink, key) => (\n <G\n key={key}\n transform={ink.dx || ink.dy ? `translate(${ink.dx ?? 0}, ${ink.dy ?? 0})` : undefined}\n opacity={ink.opacity}\n {...(ink.filter ? { filter: ink.filter } : {})}\n >\n {lines.map((line, li) => (\n <SvgText\n key={li}\n x={line.x}\n y={line.y + line.ascender}\n fontSize={fs}\n letterSpacing={tracking}\n {...baseFont}\n >\n {(pieces[li] ?? []).map((p, pi) => (\n <TSpan\n key={pi}\n {...pieceProps(p)}\n fill={paintOf(ink.fill, p) ?? 'none'}\n stroke={paintOf(ink.stroke, p)}\n strokeWidth={ink.strokeWidth}\n strokeLinejoin=\"round\"\n >\n {p.text}\n </TSpan>\n ))}\n </SvgText>\n ))}\n </G>\n );\n if (fx?.kind === 'background') {\n const spread = fx.spreadEm * fs;\n highlight = lines\n .filter((l) => l.width > 0)\n .map((l, i) => (\n <Rect\n key={`hl${i}`}\n x={l.x - spread}\n y={l.y}\n width={l.width + spread * 2}\n height={l.height}\n rx={(fx.roundness * l.height) / 2}\n fill={rgbaOf(fx.color, fx.opacity)}\n />\n ));\n }\n }\n\n const layers: React.ReactElement[] = [];\n // Copies behind the text.\n if (fx?.kind === 'echo') {\n const o = offsetAlong(fx.angle, fx.offsetEm * fs);\n layers.push(draw({ fill: (p) => rgbaOf(fx.color ?? own(p), 0.25), dx: o.dx * 2, dy: o.dy * 2 }, 'echo2'));\n layers.push(draw({ fill: (p) => rgbaOf(fx.color ?? own(p), 0.5), dx: o.dx, dy: o.dy }, 'echo1'));\n } else if (fx?.kind === 'glitch') {\n const [a, b] = GLITCH_COLORS[fx.palette] ?? GLITCH_COLORS['cyan-magenta'];\n const o = offsetAlong(fx.angle, fx.offsetEm * fs);\n layers.push(draw({ fill: a, dx: -o.dx, dy: -o.dy }, 'gl-a'));\n layers.push(draw({ fill: b, dx: o.dx, dy: o.dy }, 'gl-b'));\n } else if (fx?.kind === 'splice') {\n const o = offsetAlong(fx.angle, fx.offsetEm * fs);\n layers.push(draw({ fill: (p) => fx.color ?? spliceFillOf(own(p)), dx: o.dx, dy: o.dy }, 'splice'));\n }\n // Shadows: a blurred copy where the platform blurs, else a soft offset copy.\n const shadowCopy = (color: string, blur: number, dx: number, dy: number, key: string, opacity?: number) =>\n layers.push(\n draw({ fill: color, dx, dy, opacity, ...(canBlur && blur > 0.5 ? { filter: blurId(blur / 2) } : {}) }, key),\n );\n if (layer.shadow) {\n const s = layer.shadow;\n const o = offsetAlong(s.angle, s.distFrac * W);\n shadowCopy(rgbaOf(s.color, s.alpha), s.blurFrac * W, o.dx, o.dy, 'drop');\n } else if (fx?.kind === 'lift') {\n const l = liftShadow(fx.intensity, fs);\n shadowCopy(l.color, l.blur, 0, l.dy, 'lift');\n } else if (fx?.kind === 'glow') {\n shadowCopy(rgbaOf(fx.color ?? layer.color, fx.opacity), fx.sizeEm * fs, 0, 0, 'glow');\n } else if (fx?.kind === 'neon') {\n shadowCopy(layer.color, neonBlur(fx.intensity, fs), 0, 0, 'neon');\n }\n // The words.\n if (fx?.kind === 'hollow' || fx?.kind === 'splice') {\n layers.push(draw({ fill: 'none', stroke: own, strokeWidth: fs * fx.thicknessEm }, 'words'));\n } else {\n if (layer.outline && layer.outline.widthEm > 0) {\n layers.push(\n draw(\n {\n fill: layer.outline.color,\n stroke: layer.outline.color,\n strokeWidth: layer.outline.widthEm * fs * 2,\n },\n 'outline',\n ),\n );\n }\n const neon = fx?.kind === 'neon' ? 0.45 + 0.35 * fx.intensity : 0;\n layers.push(draw({ fill: neon ? (p) => tintOf(own(p), neon) : own }, 'words'));\n }\n return (\n <G>\n {blurs.length ? (\n <Defs>\n {blurs.map((b) => (\n <Filter key={b.key} id={b.key} x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <FeGaussianBlur stdDeviation={b.std} />\n </Filter>\n ))}\n </Defs>\n ) : null}\n {highlight}\n {layers}\n </G>\n );\n}\n\n/** The height a curved layer draws at, in the units its curve was measured in. */\nexport function curvedHeight(layer: TextLayer, curve: MeasuredCurve): number {\n const arc = curveArc(curve.width, layer.curve, curve.ascender, curve.descender);\n return arc ? arc.height : curve.ascender + curve.descender;\n}\n"],"names":["_a","_b","_c"],"mappings":";;;;;;;;;;;;;;;;;;;AA4CA,MAAM,SAAS,CAAC,EAAA,KAAe,EAAG,CAAA,OAAA,CAAQ,mBAAmB,GAAG,CAAA;AAIzD,SAAS,QAAS,CAAA,GAAA,EAAgB,KAAmB,EAAA,EAAA,EAAY,IAAY,CAA+B,EAAA;AAhDnH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiDE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACE,GAAA,GAAA;AACJ,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA,IAAU,MAAM,MAAW,KAAA,MAAA,GAAS,MAAM,MAAS,GAAA,MAAA;AACxE,EAAM,MAAA,EAAA,GAAK,KAAK,GAAI,CAAA,GAAA,EAAA,CAAA,CAAM,WAAM,eAAN,KAAA,IAAA,GAAA,EAAA,GAAyB,KAAK,CAAC,CAAA;AACzD,EAAA,MAAM,QAAW,GAAA,KAAA,CAAM,MAAS,GAAA,YAAA,CAAa,CAAG,EAAA,CAAA,EAAG,EAAI,EAAA,EAAA,EAAA,CAAI,EAAM,GAAA,KAAA,CAAA,SAAA,KAAN,IAAmB,GAAA,EAAA,GAAA,GAAG,CAAI,GAAA,IAAA;AACrF,EAAA,MAAM,GAAM,GAAA,CAAA,GAAA,EAAM,MAAO,CAAA,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAClC,EAAA,MAAM,KAAQ,GAAA,QAAA,GAAW,CAAQ,KAAA,EAAA,GAAG,MAAM,KAAM,CAAA,IAAA;AAChD,EAAI,IAAA,IAAA;AACJ,EAAI,IAAA,aAAA,CAAc,KAAM,CAAA,KAAK,CAAG,EAAA;AAC9B,IAAA,MAAM,WAAW,EAAK,GAAA,EAAA;AACtB,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,EAAA,EAAI,CAAC,CAAA;AAChC,IAAM,MAAA,IAAA,GAAO,WAAW,EAAK,GAAA,EAAA;AAC7B,IAAM,MAAA,OAAA,GAAU,KAAM,CAAA,KAAA,KAAU,OAAU,GAAA,IAAA,CAAK,IAAI,IAAO,GAAA,GAAA,EAAK,SAAY,GAAA,GAAG,CAAI,GAAA,CAAA;AAClF,IAAA,MAAM,CAAI,GAAA,QAAA,GAAW,EAAK,GAAA,CAAA,GAAI,EAAK,GAAA,CAAA;AACnC,IAAM,MAAA,GAAA,GAAM,WAAW,EAAK,GAAA,EAAA;AAC5B,IAAA,IAAA,mBACa,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,MAAA,QAAA,mBAAY,GAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,CAAA,EAAG,IAAI,CAAG,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,KAAK,OAAS,EAAA,MAAA,EAAQ,KAAO,EAAA,WAAA,EAAa,WAAW,aAAc,EAAA,OAAA,EAAQ,CAAK,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAI,CAAG,EAAA,EAAA,EAAI,GAAG,EAAI,EAAA,EAAA,GAAK,OAAS,EAAA,EAAA,EAAI,GAAG,MAAQ,EAAA,KAAA,EAAO,WAAa,EAAA,SAAA,EAAW,eAAc,OAAQ,EAAA,CAAA;AAAA,MACpO,OAAA,GAAU,oBAAK,GAAA,CAAA,OAAA,EAAA,EAAQ,MAAM,KAAO,EAAA,MAAA,EAAQ,WAAW,CAAG,EAAA,CAAC,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,SAAY,GAAA,GAAG,IAAI,GAAM,GAAA,OAAO,CAAI,CAAA,EAAA,CAAA,GAAI,SAAY,GAAA,GAAG,IAAI,GAAM,GAAA,OAAO,KAAK,CAAG,EAAA,GAAG,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA,EAAI,IAAI,SAAY,GAAA,GAAG,IAAI,GAAM,GAAA,OAAO,IAAI,CAAI,GAAA,SAAA,GAAY,GAAG,CAAA,CAAA,EAAI,CAAK,GAAA;AAAA,KAChQ,EAAA,CAAA;AAAA,GACH,MAAA;AACL,IAAA,MAAM,IAAI,KAAM,CAAA,KAAA,KAAU,SAAS,UAAW,CAAA,EAAA,EAAI,KAAI,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,YAAoB,CAAC,CAAA,GAAI,UAAU,SAAU,CAAA,KAAA,CAAM,KAAK,CAAE,CAAA,CAAA,EAAG,IAAI,EAAE,CAAA;AACzH,IAAO,IAAA,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,CAAA,EAAM,IAAM,EAAA,KAAA,EAAO,MAAgB,EAAA,WAAA,EAAa,MAAS,GAAA,EAAA,GAAK,CAAG,EAAA,cAAA,EAAe,OAAQ,EAAA,CAAA;AAAA;AAEvG,EAAA,4BAAQ,CACG,EAAA,EAAA,QAAA,EAAA;AAAA,IAAW,QAAA,mBAAA,GAAA,CAAC,QACL,QAAC,kBAAA,IAAA,CAAA,cAAA,EAAA,EAAe,IAAI,GAAK,EAAA,aAAA,EAAc,gBAAiB,EAAA,EAAA,EAAI,QAAS,CAAA,CAAC,GAAG,EAAI,EAAA,QAAA,CAAS,CAAC,CAAA,EAAG,EAAI,EAAA,QAAA,CAAS,CAAC,CAAG,EAAA,EAAA,EAAI,QAAS,CAAA,CAAC,CACrH,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,MAAA,EAAO,GAAI,EAAA,SAAA,EAAW,MAAM,IAAM,EAAA,CAAA;AAAA,0BACvC,IAAK,EAAA,EAAA,MAAA,EAAO,GAAI,EAAA,SAAA,EAAW,MAAM,MAAQ,EAAA;AAAA,KAAA,EAC9C,GACJ,CAAU,GAAA,IAAA;AAAA,IACb;AAAA,GACL,EAAA,CAAA;AACR;AAKO,SAAS,QAAS,CAAA,GAAA,EAAgB,KAAmB,EAAA,EAAA,EAAY,EAAuC,EAAA;AA7F/G,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8FE,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,CAAA;AAAA,IACA,IAAM,EAAA,OAAA;AAAA,IACN;AAAA,GACE,GAAA,GAAA;AACJ,EAAM,MAAA,IAAA,GAAO,cAAc,KAAK,CAAA;AAChC,EAAM,MAAA,MAAA,GAAA,CAAA,CAAS,WAAM,MAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,UAAS,KAAM,CAAA,MAAA,GAAS,CAAC,SAAS,CAAA;AAC/D,EAAA,IAAI,IAAK,CAAA,UAAA,CAAW,MAAW,KAAA,CAAA,EAAU,OAAA,IAAA;AACzC,EAAM,MAAA,GAAA,GAAA,CAAM,EAAM,GAAA,KAAA,CAAA,GAAA,KAAN,IAAa,GAAA,EAAA,GAAA,SAAA;AACzB,EAAM,MAAA,CAAA,GAAI,KAAK,UAAW,CAAA,MAAA;AAC1B,EAAA,MAAM,SAAS,OAAQ,CAAA,KAAA,CAAM,MAAM,CAAK,IAAA,IAAA,CAAK,OAAO,MAAS,GAAA,CAAA;AAC7D,EAAA,MAAM,UAAU,MAAS,GAAA,IAAA,CAAK,IAAI,EAAI,EAAA,EAAA,GAAK,IAAI,CAAI,GAAA,CAAA;AACnD,EAAA,MAAM,KAAK,EAAK,GAAA,OAAA;AAChB,EAAI,IAAA,IAAA;AACJ,EAAA,IAAI,KAAM,CAAA,KAAA,KAAU,KAAS,IAAA,KAAA,CAAM,UAAU,OAAS,EAAA;AACpD,IAAA,MAAM,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,EAAA,EAAI,EAAE,CAAI,GAAA,CAAA;AAC7B,IAAM,MAAA,KAAA,GAAQ,MAAM,KAAU,KAAA,OAAA,GAAU,MAAK,EAAM,GAAA,KAAA,CAAA,QAAA,KAAN,YAAkB,IAAQ,CAAA,GAAA,CAAA;AACvE,IAAA,IAAA,GAAO,WAAU,EAAK,GAAA,CAAA,EAAA,GAAA,IAAA,CAAA,MAAA,CAAO,CAAC,CAAA,KAAb,mBAAgB,MAAhB,KAAA,IAAA,GAAA,EAAA,GAA0B,EAAE,EAAE,GAAI,CAAA,CAAA,CAAA,qBAAM,GAAA,CAAA,IAAA,EAAA,EAAmB,GAAG,SAAU,CAAA,EAAA,GAAK,CAAG,EAAA,EAAA,GAAK,GAAG,CAAG,EAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,OAAO,KAAK,CAAA,EAAG,IAAM,EAAA,MAAA,CAAO,EAAE,KAAQ,GAAA,MAAA,CAAO,MAAM,CAAvG,EAAA,EAAA,CAAA,CAAE,KAAwG,CAAE,CAAA;AAAA,aACtK,KAAM,CAAA,KAAA,KAAU,MAAU,IAAA,KAAA,CAAM,UAAU,MAAQ,EAAA;AAC3D,IAAA,MAAM,UAAU,KAAM,CAAA,KAAA,KAAU,MAAU,IAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AAC/D,IAAM,MAAA,GAAA,GAAM,QAAS,CAAA,IAAA,EAAM,OAAO,CAAA;AAClC,IAAM,MAAA,CAAA,GAAI,CAAC,CAAc,KAAA,CAAA,KAAM,IAAI,EAAK,GAAA,CAAA,GAAI,CAAK,IAAA,CAAA,GAAI,CAAK,CAAA,GAAA,EAAA;AAC1D,IAAM,MAAA,CAAA,GAAI,CAAC,CAAc,KAAA,EAAA,GAAK,KAAK,GAAI,CAAA,CAAA,EAAG,CAAC,CAAA,GAAI,GAAM,GAAA,EAAA;AACrD,IAAA,MAAM,OAAO,IAAI,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,CAAC,CAAA;AAChC,IAAA,IAAA,GAAO,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,EAAO,KAAA;AAChC,MAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,EAAK,GAAA,MAAA,CAAO,MAAM,CAAA;AACvC,MAAA,MAAM,OAAO,CAAE,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,CAAM,KAAA,OAAA,GAAU,IAAK,CAAA,CAAC,IAAI,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAC,IAAI,CAAC,CAAA;AAC1E,MAAM,MAAA,OAAA,GAAU,OAAU,GAAA,CAAC,GAAG,IAAI,CAAI,GAAA,IAAI,KAAM,CAAA,CAAC,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA;AACzD,MAAI,IAAA,OAAA,OAAc,OAAQ,CAAA,CAAC,GAAG,CAAM,KAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAC,CAAA;AAC/C,MAAI,IAAA,KAAA,CAAM,UAAU,MAAQ,EAAA;AAC1B,QAAM,MAAA,GAAA,GAAM,KAAK,GAAI,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,EAAG,CAAM,KAAA,CAAA,GAAI,GAAM,GAAA,GAAG,GAAG,CAAE,CAAA,CAAC,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAC/E,QAAA,MAAM,MAAS,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,CAAC,CAAA,EAAG,CAAC,CAAU,CAAE,CAAA,OAAA,GAAU,GAAI,CAAA,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAI,CAAA,EAAA,CAAA,CAAE,CAAC,CAAC,CAAI,CAAA,EAAA,CAAA,CAAE,CAAC,CAAC,CAAE,CAAA,CAAA,CAAE,KAAK,EAAE,CAAA;AAC3G,QAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAc,CAAG,EAAA,CAAA,EAAG,GAAG,CAAG,EAAA,MAAM,CAAK,CAAA,CAAA,EAAA,IAAA,EAAM,KAAO,EAAA,OAAA,EAAS,OAAU,GAAA,IAAA,GAAO,QAAlE,EAAwE,CAAA;AAAA;AAE5F,MAAA,MAAM,MAAM,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAG,EAAA,CAAA,CAAE,CAAC,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAC1D,MAAA,MAAM,EAAK,GAAA,IAAA,CAAK,GAAI,CAAA,GAAA,EAAK,KAAK,KAAK,CAAA;AACnC,MAAA,4BAAQ,CACM,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,MAAA,EAAQ,GAAK,EAAA,IAAA,EAAK,MAAO,EAAA,MAAA,EAAQ,KAAO,EAAA,WAAA,EAAa,EAAI,EAAA,cAAA,EAAe,OAAQ,EAAA,aAAA,EAAc,OAAQ,EAAA,CAAA;AAAA,QAC/G,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,sBAAO,GAAA,CAAA,MAAA,EAAA,EAAe,IAAI,CAAE,CAAA,CAAC,GAAG,EAAI,EAAA,CAAA,CAAE,CAAC,CAAG,EAAA,CAAA,EAAG,KAAK,GAAK,EAAA,IAAA,EAAM,KAA1C,EAAA,EAAA,CAAiD,CAAE;AAAA,OAAA,EAAA,EAFnF,EAGL,CAAA;AAAA,KACX,CAAA;AAAA,GACI,MAAA;AACL,IAAM,MAAA,UAAA,GAAa,MAAM,KAAU,KAAA,KAAA;AACnC,IAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,KAAA,CAAM,OAAO,CAAA;AACrC,IAAM,MAAA,GAAA,GAAM,QAAS,CAAA,IAAA,EAAM,OAAO,CAAA;AAClC,IAAM,MAAA,IAAA,GAAA,CAAQ,UAAa,GAAA,EAAA,GAAK,EAAM,IAAA,CAAA;AACtC,IAAA,MAAM,MAAS,GAAA,OAAA,GAAU,CAAI,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA;AACzC,IAAM,MAAA,IAAA,GAAO,OAAO,GAAM,GAAA,MAAA;AAC1B,IAAM,MAAA,MAAA,GAAS,aAAa,EAAK,GAAA,EAAA;AACjC,IAAA,MAAM,QAA2B,EAAC;AAClC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,KAAK,CAAG,EAAA;AAC7B,MAAA,IAAI,MAAS,GAAA,CAAA;AACb,MAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAO,KAAA;AArJrC,QAAAA,IAAAA,GAAAA;AAsJQ,QAAM,MAAA,CAAA,GAAI,IAAK,CAAA,GAAA,CAAI,CAAGA,EAAAA,CAAAA,GAAAA,GAAA,CAAE,CAAA,MAAA,CAAO,CAAC,CAAA,KAAV,IAAAA,GAAAA,GAAAA,GAAe,CAAC,CAAA;AACtC,QAAM,MAAA,IAAA,GAAO,IAAI,GAAM,GAAA,MAAA;AACvB,QAAA,MAAM,SAAS,CAAI,GAAA,IAAA,GAAO,OAAO,IAAQ,IAAA,OAAA,GAAU,IAAI,EAAK,GAAA,IAAA,CAAA;AAC5D,QAAM,MAAA,KAAA,GAAQ,UAAU,MAAS,GAAA,CAAA;AACjC,QAAU,MAAA,IAAA,IAAA;AACV,QAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,EAAK,GAAA,MAAA,CAAO,MAAM,CAAA;AACvC,QAAA,KAAA,CAAM,KAAK,UAAa,mBAAA,GAAA,CAAC,IAAwB,EAAA,EAAA,CAAA,EAAG,OAAO,CAAG,EAAA,MAAA,EAAQ,KAAO,EAAA,IAAA,EAAM,QAAQ,IAAM,EAAA,IAAA,EAAM,SAApE,CAAG,EAAA,CAAC,IAAI,EAAE,CAAA,CAAiE,CAAK,mBAAA,GAAA,CAAC,QAAwB,CAAG,EAAA,MAAA,EAAQ,GAAG,EAAK,GAAA,KAAA,GAAQ,MAAM,KAAO,EAAA,IAAA,EAAM,MAAQ,EAAA,IAAA,EAAM,MAAM,KAAhF,EAAA,EAAA,CAAA,EAAG,CAAC,CAAI,CAAA,EAAA,EAAE,EAA6E,CAAE,CAAA;AAAA,OACxN,CAAA;AAAA;AAEH,IAAO,IAAA,GAAA,KAAA;AAAA;AAET,EAAA,MAAM,UAAa,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,UAAU,GAAG,CAAA;AAC5C,EAAA,MAAM,GAAM,GAAA,KAAA,CAAM,KAAU,KAAA,KAAA,IAAS,MAAM,KAAU,KAAA,OAAA;AACrD,EAAM,MAAA,OAAA,GAAU,MAAM,IAAK,CAAA,UAAA,GAAa,KAAK,MAAO,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,CAAA,CAAE,IAAI,CAAA;AACnE,EAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,MAAS,GAAA,EAAA,GAAK,QAAQ,MAAS,GAAA,EAAA;AACpD,EAAA,4BAAQ,CACG,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,IACA,SAAS,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAM,EAAA,CAAA,0BAAO,CACtB,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,GAAG,CAAI,GAAA,IAAA,EAAM,GAAG,EAAK,GAAA,OAAA,GAAU,GAAK,EAAA,KAAA,EAAO,UAAa,GAAA,GAAA,EAAK,QAAQ,UAAa,GAAA,GAAA,EAAK,IAAI,UAAa,GAAA,GAAA,EAAK,MAAM,MAAO,CAAA,CAAA,GAAI,MAAO,CAAA,MAAM,CAAG,EAAA,CAAA;AAAA,sBACpJ,GAAA,CAAC,WAAQ,CAAG,EAAA,CAAA,GAAI,OAAO,UAAa,GAAA,GAAA,EAAK,GAAG,EAAK,GAAA,OAAA,GAAU,MAAM,UAAa,GAAA,IAAA,EAAM,UAAU,UAAY,EAAA,IAAA,EAAM,KAC3G,QAAQ,EAAA,IAAA,IAAA,CAAA,OAAA,EAAU,CAAI,GAAA,CAAC,CAC5B,CAAA,EAAA;AAAA,KAAA,EAAA,EAJ6B,CAAK,EAAA,EAAA,CAAC,CAKvC,CAAA,CAAI,CAAI,GAAA;AAAA,GACtB,EAAA,CAAA;AACR;AAKgB,SAAA,gBAAA,CAAiB,EAAY,EAAA,EAAA,EAAY,IAKtD,EAAA;AACD,EAAM,MAAA,CAAA,GAAI,QAAQ,IAAK,CAAA,CAAA,GAAI,KAAK,IAAK,CAAA,CAAA,GAAI,IAAI,IAAO,GAAA;AAAA,IAClD,CAAG,EAAA,CAAA;AAAA,IACH,CAAG,EAAA,CAAA;AAAA,IACH,CAAG,EAAA,CAAA;AAAA,IACH,CAAG,EAAA;AAAA,GACL;AACA,EAAM,MAAA,EAAA,GAAK,KAAK,CAAE,CAAA,CAAA;AAClB,EAAM,MAAA,EAAA,GAAK,KAAK,CAAE,CAAA,CAAA;AAClB,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,CAAC,CAAA,CAAE,CAAI,GAAA,EAAA;AAAA,IACb,GAAA,EAAK,CAAC,CAAA,CAAE,CAAI,GAAA,EAAA;AAAA,IACZ,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AACF;AAGO,SAAS,SAAS,GAAgB,EAAA,KAAA,EAAmB,EAAY,EAAA,EAAA,EAAY,GAAW,MAAgD,EAAA;AA1M/I,EAAA,IAAA,EAAA,EAAA,EAAA;AA2ME,EAAI,IAAA,CAAC,KAAM,CAAA,GAAA,EAAY,OAAA,IAAA;AACvB,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAO,EAAA,QAAA;AAAA,IACP,CAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACE,GAAA,GAAA;AACJ,EAAM,MAAA,EAAA,GAAK,MAAO,CAAA,KAAA,CAAM,EAAE,CAAA;AAC1B,EAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,EAAI,EAAA,EAAA,EAAI,MAAM,IAAI,CAAA;AACjD,EAAM,MAAA,OAAA,GAAU,MAAM,QAAW,GAAA,SAAA,CAAU,MAAM,QAAU,EAAA,EAAA,EAAI,EAAE,CAAI,GAAA,IAAA;AACrE,EAAM,MAAA,MAAA,GAAS,iBAAkB,CAAA,KAAA,CAAM,MAAM,CAAA;AAC7C,EAAA,MAAM,SAAQ,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,MAAA,KAAN,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,QAAA,KAAd,YAA0B,CAAK,IAAA,CAAA;AAC7C,EAAA,MAAM,OAAO,OAAS,CAAA,CAAA,MAAA,IAAU,IAAS,KAAA,MAAA,IAAU,iBAAiB,cAAc,CAAA;AAClF,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,EAAM,MAAA,GAAA,GAAM,SAAS,WAAY,CAAA,MAAA,CAAO,OAAO,MAAO,CAAA,QAAA,GAAW,CAAC,CAAI,GAAA,IAAA;AACtE,EAAA,MAAM,UAAa,GAAA,MAAA,GAAS,MAAO,CAAA,QAAA,GAAW,CAAI,GAAA,CAAA;AAClD,EAAA,4BAAQ,CACE,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IACG,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,QAAA,EAAA,EAAS,IAAI,CAAM,GAAA,EAAA,EAAE,IACjB,QAAU,EAAA,OAAA,mBAAA,GAAA,CAAC,QAAK,CAAG,EAAA,OAAA,EAAS,oBAAM,GAAA,CAAA,IAAA,EAAA,EAAK,GAAG,CAAG,EAAA,CAAA,EAAG,GAAG,KAAO,EAAA,EAAA,EAAI,MAAQ,EAAA,EAAA,EAAI,CAC/E,EAAA,CAAA;AAAA,MACC,IAAO,mBAAA,IAAA,CAAC,MAAO,EAAA,EAAA,EAAA,EAAI,MAAM,EAAE,CAAA,CAAA,EAAI,CAAE,EAAA,MAAA,EAAO,CAAE,EAAA,MAAA,EAAO,KAAM,EAAA,MAAA,EAAO,QAAO,MAC7D,EAAA,QAAA,EAAA;AAAA,QAAA,MAAA,uBAAU,aAAc,EAAA,EAAA,IAAA,EAAK,QAAS,EAAA,MAAA,EAAQ,QAAQ,CAAK,GAAA,IAAA;AAAA,QAC3D,uBAAQ,GAAA,CAAA,cAAA,EAAA,EAAe,YAAc,EAAA,IAAA,GAAO,GAAG,CAAK,GAAA;AAAA,OAAA,EACzD,CAAY,GAAA,IAAA;AAAA,MACf,MAAA,IAAU,UAAa,GAAA,CAAA,IAAK,MAAU,IAAA,cAAA,uBAAkB,MAAO,EAAA,EAAA,EAAA,EAAI,CAAM,GAAA,EAAA,EAAE,CAAI,CAAA,EAAA,CAAA,EAAE,QAAO,CAAE,EAAA,MAAA,EAAO,KAAM,EAAA,MAAA,EAAO,MAAO,EAAA,MAAA,EAC9G,QAAC,kBAAA,GAAA,CAAA,cAAA,EAAA,EAAe,YAAc,EAAA,UAAA,GAAa,CAAG,EAAA,CAAA,EAClD,CAAY,GAAA;AAAA,KACpB,EAAA,CAAA;AAAA,IACC,UAAU,GAAM,mBAAA,GAAA,CAAC,kCAAE,SAAW,EAAA,CAAA,UAAA,EAAa,IAAI,EAAE,CAAA,EAAA,EAAK,GAAI,CAAA,EAAE,KAAK,OAAS,EAAA,MAAA,CAAO,SAAW,UAAa,GAAA,CAAA,IAAK,UAAU,cAAiB,GAAA;AAAA,MAChJ,MAAA,EAAQ,WAAW,EAAE,CAAA,CAAA;AAAA,KACvB,GAAI,EAAC,CAAA,EAFqB,EAGT,QAAA,EAAA,OAAA,mBAAW,GAAA,CAAA,IAAA,EAAA,EAAK,CAAG,EAAA,OAAA,EAAS,IAAM,EAAA,MAAA,CAAO,KAAO,EAAA,CAAA,mBAAM,GAAA,CAAA,IAAA,EAAA,EAAK,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,KAAO,EAAA,EAAA,EAAI,MAAQ,EAAA,EAAA,EAAI,IAAM,EAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAA,CACvH,CAAO,GAAA,IAAA;AAAA,oBACX,GAAA,CAAC,KAAE,QAAU,EAAA,CAAA,QAAA,EAAW,EAAE,CACtB,CAAA,CAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,2BAAS,IAAM,EAAA;AAAA,MACxB,KAAK,KAAM,CAAA;AAAA,OACV,CAAG,EAAA,KAAA,CAAM,IAAM,EAAA,CAAA,EAAG,MAAM,GAAK,EAAA,KAAA,EAAO,KAAM,CAAA,KAAA,EAAO,QAAQ,KAAM,CAAA,MAAA,EAAQ,mBAAoB,EAAA,MAAA,EAAO,UAAoB,IAAO,GAAA;AAAA,MAC9H,MAAA,EAAQ,WAAW,EAAE,CAAA,CAAA;AAAA,KACvB,GAAI,EAAC,CAAG,CACF,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AAKO,SAAS,aAAa,KAA2B,EAAA;AA/PxD,EAAA,IAAA,EAAA,EAAA,EAAA;AAgQE,EAAA,OAAO,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,IAAA,CAAA,CAAK,EAAM,GAAA,KAAA,CAAA,MAAA,KAAN,IAAc,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,QAAY,IAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,IAAS,MAAA,QAAA;AAC3F;AAMA,SAAS,OAAA,CAAQ,MAAgB,EAAA,MAAA,EAA4B,MAAsC,EAAA;AACjG,EAAA,MAAM,CAAI,GAAA,eAAA,CAAgB,MAAQ,EAAA,MAAA,EAAQ,MAAM,CAAA;AAChD,EAAA,MAAM,MAAe,EAAC;AACtB,EAAA,IAAI,CAAE,CAAA,UAAA,EAAgB,GAAA,CAAA,UAAA,GAAa,CAAE,CAAA,UAAA;AACrC,EAAA,IAAI,EAAE,UAAY,EAAA,GAAA,CAAI,UAAa,GAAA,MAAA,CAAO,EAAE,UAAU,CAAA;AACtD,EAAA,IAAI,CAAE,CAAA,SAAA,EAAe,GAAA,CAAA,SAAA,GAAY,CAAE,CAAA,SAAA;AACnC,EAAO,OAAA,GAAA;AACT;AASgB,SAAA,UAAA,CAAW,OAAmB,KAAqD,EAAA;AACjG,EAAM,MAAA,KAAA,GAAQ,MAAM,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA;AAC5C,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAK,IAAA,KAAA,EAAgB,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,CAAA,CAAE,IAAK,CAAA,MAAA,EAAQ,CAAK,IAAA,CAAA,EAAW,OAAA,CAAA,IAAA,CAAK,EAAE,KAAK,CAAA;AACtF,EAAA,IAAI,MAAS,GAAA,CAAA;AACb,EAAO,OAAA,KAAA,CAAM,IAAI,CAAQ,IAAA,KAAA;AA5R3B,IAAA,IAAA,EAAA;AA6RI,IAAA,IAAI,KAAQ,GAAA,MAAA;AACZ,IAAA,MAAM,IAAI,IAAK,CAAA,IAAA;AACf,IAAA,IAAI,KAAM,CAAA,UAAA,CAAW,CAAG,EAAA,MAAM,CAAG,EAAA;AAC/B,MAAA,MAAA,IAAU,CAAE,CAAA,MAAA;AAAA,KACP,MAAA;AACL,MAAM,MAAA,EAAA,GAAK,MAAM,OAAQ,CAAA,CAAA,CAAE,QAAQ,MAAQ,EAAA,EAAE,GAAG,MAAM,CAAA;AACtD,MAAI,IAAA,EAAA,GAAK,CAAG,EAAA,OAAO,CAAC;AAAA,QAClB,IAAM,EAAA,CAAA,CAAE,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AAAA,QACzB,KAAO,EAAA;AAAA,OACR,CAAA;AACD,MAAQ,KAAA,GAAA,EAAA;AACR,MAAA,MAAA,GAAS,KAAK,CAAE,CAAA,MAAA;AAAA;AAElB,IAAI,IAAA,KAAA,CAAM,MAAM,CAAM,KAAA,IAAA,IAAQ,CAAC,CAAE,CAAA,QAAA,CAAS,IAAI,CAAA,EAAa,MAAA,IAAA,CAAA;AAC3D,IAAA,MAAM,SAAkB,EAAC;AACzB,IAAA,KAAA,IAAS,CAAI,GAAA,KAAA,EAAO,CAAI,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,GAAQ,CAAE,CAAA,MAAA,EAAQ,KAAM,CAAA,MAAM,CAAG,EAAA,CAAA,IAAK,CAAG,EAAA;AACxE,MAAM,MAAA,EAAA,GAAK,MAAM,CAAC,CAAA;AAClB,MAAA,IAAI,OAAO,IAAM,EAAA;AACjB,MAAA,MAAM,EAAK,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,CAAC,CAAA,KAAT,IAAc,GAAA,EAAA,GAAA,IAAA;AACzB,MAAA,MAAM,IAAO,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,GAAS,CAAC,CAAA;AACrC,MAAA,IAAI,IAAQ,IAAA,IAAA,CAAK,KAAU,KAAA,EAAA,OAAS,IAAQ,IAAA,EAAA;AAAA,kBAAe,IAAK,CAAA;AAAA,QAC9D,IAAM,EAAA,EAAA;AAAA,QACN,KAAO,EAAA;AAAA,OACR,CAAA;AAAA;AAEH,IAAO,OAAA,MAAA;AAAA,GACR,CAAA;AACH;AAeO,SAAS,QAAQ,GAAgB,EAAA,KAAA,EAAkB,KAAuB,EAAA,CAAA,EAAW,UAA2B,KAAkD,EAAA;AAvUzK,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwUE,EAAM,MAAA;AAAA,IACJ,CAAA;AAAA,IACA,IAAM,EAAA,OAAA;AAAA,IACN,KAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACE,GAAA,GAAA;AACJ,EAAM,MAAA,EAAA,GAAK,MAAO,CAAA,KAAA,CAAM,EAAE,CAAA;AAC1B,EAAA,MAAM,KAAK,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAC7C,EAAM,MAAA,MAAA,GAAS,eAAgB,CAAA,KAAA,EAAO,QAAQ,CAAA;AAC9C,EAAA,MAAM,WAAW,OAAQ,CAAA,MAAA,EAAQ,KAAM,CAAA,UAAA,EAAY,MAAM,MAAM,CAAA;AAC/D,EAAM,MAAA,KAAA,GAAQ,WAAW,KAAK,CAAA;AAC9B,EAAM,MAAA,GAAA,GAAM,CAAC,KAAc,KAAA;AAxV7B,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAwVgC,IAAAA,OAAAA,CAAAA,GAAAA,GAAAA,CAAAD,MAAA,KAAM,CAAA,KAAA,KAAN,gBAAAA,GAAa,CAAA,KAAA,KAAb,IAAAC,GAAAA,GAAAA,GAAsB,KAAM,CAAA,KAAA;AAAA,GAAA;AAC1D,EAAA,MAAM,KAAK,KAAM,CAAA,MAAA;AACjB,EAAM,MAAA,OAAA,GAAU,OAAQ,CAAA,MAAA,IAAU,cAAc,CAAA;AAChD,EAAA,MAAM,QAGD,EAAC;AACN,EAAM,MAAA,MAAA,GAAS,CAAC,GAAgB,KAAA;AAC9B,IAAA,MAAM,GAAM,GAAA,CAAA,GAAA,EAAM,EAAE,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,CAAA;AACpC,IAAA,KAAA,CAAM,IAAK,CAAA;AAAA,MACT,GAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAQ,GAAG,CAAA,CAAA,CAAA;AAAA,GACpB;AACA,EAAA,MAAM,QAAY,GAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,iBAAN,KAAA,IAAA,GAAA,EAAA,GAA2B,CAAK,IAAA,CAAA;AAClD,EAAM,MAAA,IAAA,GAAO,CAAC,EAAwB,KAAA;AAxWxC,IAAA,IAAAD,GAAAC,EAAAA,GAAAA;AAyWI,IAAA,MAAM,KAAID,GAAA,GAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,SAAJ,KAAA,IAAA,GAAAA,MAAiB,KAAM,CAAA,SAAA;AACjC,IAAA,MAAM,KAAIC,GAAA,GAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,MAAJ,KAAA,IAAA,GAAAA,MAAc,KAAM,CAAA,MAAA;AAC9B,IAAA,OAAO,KAAK,CAAI,GAAA,wBAAA,GAA2B,CAAI,GAAA,WAAA,GAAc,IAAI,cAAiB,GAAA,MAAA;AAAA,GACpF;AACA,EAAM,MAAA,UAAA,GAAa,CAAC,KAAiB,KAAA;AA7WvC,IAAA,IAAAD,KAAAC,GAAAC,EAAAA,GAAAA;AA8WI,IAAA,MAAM,KAAK,KAAM,CAAA,KAAA;AACjB,IAAA,MAAM,QAAiC,EAAC;AACxC,IAAA,IAAA,CAAI,yBAAI,YAAgB,KAAA,IAAA,EAAY,KAAA,CAAA,QAAA,GAAW,GAAG,YAAe,GAAA,CAAA;AACjE,IAAA,IAAA,CAAI,yBAAI,iBAAqB,KAAA,IAAA,EAAY,KAAA,CAAA,aAAA,GAAgB,GAAG,iBAAoB,GAAA,CAAA;AAChF,IAAI,IAAA,EAAA,KAAO,GAAG,UAAc,IAAA,IAAA,IAAQ,GAAG,UAAc,IAAA,IAAA,IAAQ,EAAG,CAAA,MAAA,IAAU,IAAO,CAAA,EAAA;AAC/E,MAAO,MAAA,CAAA,MAAA,CAAO,OAAO,OAAQF,CAAAA,CAAAA,GAAAA,GAAA,GAAG,UAAH,KAAA,IAAA,GAAAA,GAAiB,GAAA,MAAA,EAAA,CAAQC,GAAA,GAAA,EAAA,CAAG,eAAH,IAAAA,GAAAA,GAAAA,GAAiB,KAAM,CAAA,UAAA,EAAA,CAAYC,GAAA,GAAA,EAAA,CAAG,WAAH,IAAAA,GAAAA,GAAAA,GAAa,KAAM,CAAA,MAAM,CAAC,CAAA;AAAA;AAErH,IAAM,MAAA,CAAA,GAAI,KAAK,EAAE,CAAA;AACjB,IAAI,IAAA,CAAA,QAAS,cAAiB,GAAA,CAAA;AAC9B,IAAO,OAAA,KAAA;AAAA,GACT;AACA,EAAM,MAAA,OAAA,GAAU,CAAC,CAAgB,EAAA,KAAA,KAAiB,OAAO,CAAM,KAAA,UAAA,GAAa,CAAE,CAAA,KAAK,CAAI,GAAA,CAAA;AACvF,EAAI,IAAA,IAAA;AACJ,EAAA,IAAI,SAA6B,GAAA,IAAA;AACjC,EAAA,IAAI,KAAO,EAAA;AACT,IAAM,MAAA,GAAA,GAAM,SAAS,KAAM,CAAA,KAAA,EAAO,MAAM,KAAO,EAAA,KAAA,CAAM,QAAU,EAAA,KAAA,CAAM,SAAS,CAAA;AAC9E,IAAM,MAAA,IAAA,GAAO,KAAM,CAAA,GAAA,CAAI,CAAM,CAAA,MAAA;AAAA,MAC3B,IAAM,EAAA,CAAA,CAAE,IAAK,CAAA,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,MAC/B,OAAO,CAAE,CAAA;AAAA,KACT,CAAA,CAAA;AACF,IAAM,MAAA,MAAA,GAAS,MAAM,EAAE,CAAA,CAAA;AACvB,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,CAAA,GAAI,CAAI,GAAA,CAAA;AAC7B,IAAA,MAAM,MAAS,GAAA,GAAA,GAAM,CAAC,GAAA,CAAI,OAAO,KAAM,CAAA,QAAA;AACvC,IAAO,IAAA,GAAA,CAAC,KAAK,GAAK,KAAA;AArYtB,MAAA,IAAAF,GAAAC,EAAAA,GAAAA;AAqYyB,MAAC,uBAAA,GAAA,CAAA,CAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAY,WAAW,CAAa,UAAA,EAAA,MAAA,IAAA,CAAUD,MAAA,GAAI,CAAA,EAAA,KAAJ,IAAAA,GAAAA,GAAAA,GAAU,CAAE,CAAA,CAAA,EAAA,EAAK,WAAUC,GAAA,GAAA,GAAA,CAAI,EAAJ,KAAA,IAAA,GAAAA,GAAU,GAAA,CAAA,CAAE,KAAK,OAAS,EAAA,GAAA,CAAI,OAAa,EAAA,EAAA,GAAA,CAAI,MAAS,GAAA;AAAA,QACrJ,QAAQ,GAAI,CAAA;AAAA,OACd,GAAI,EAAC,CAAA,EAFiB,EAGV,QAAA,kBAAA,GAAA,CAAC,OAAQ,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAU,EAAI,EAAA,aAAA,EAAe,QAAU,EAAA,UAAA,EAAW,QAAa,EAAA,EAAA,QAAA,CAAA,EAAvE,EACG,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,IAAM,EAAA,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,WAAY,EAAA,KAAA,EACrC,QAAK,EAAA,IAAA,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAG,KAAA;AA1YzC,QAAAD,IAAAA,GAAAA;AA0Y4C,QAAA,uBAAA,GAAA,CAAC,KAAkB,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,CAAC,CAAA,CAAA,EAA9B,EAAiC,IAAA,EAAA,CAAMA,GAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,IAAA,EAAM,CAAC,CAAA,KAAnB,IAAAA,GAAAA,GAAAA,GAAwB,MAAQ,EAAA,MAAA,EAAQ,OAAQ,CAAA,GAAA,CAAI,MAAQ,EAAA,CAAC,CAAG,EAAA,WAAA,EAAa,GAAI,CAAA,WAAA,EAAa,cAAe,EAAA,OAAA,EAChK,QAAE,EAAA,CAAA,CAAA,IAAA,EAAA,CAAA,EADqB,CAE5B,CAAA;AAAA,OAAQ,CAAA,EAChB,CACJ,EAAA,CAAA,CAAA,EAAA,CAAA,EATiB,GAUrB,CAAA;AAAA,KAAA;AACR,IAAA,MAAM,MAAS,GAAA,GAAA,mBAAO,GAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,MAAA,EAAQ,CAAG,EAAA,GAAA,CAAI,CAAG,EAAA,IAAA,EAAK,MAAO,EAAA,CAAA,mBAAM,GAAA,CAAA,IAAA,EAAA,EAAK,EAAI,EAAA,MAAA,EAAQ,CAAG,EAAA,CAAA,CAAA,EAAI,CAAC,KAAA,CAAM,KAAQ,GAAA,CAAC,CAAM,GAAA,EAAA,KAAA,CAAM,KAAQ,GAAA,CAAC,CAAI,CAAA,EAAA,IAAA,EAAK,MAAO,EAAA,CAAA;AAChJ,IAAY,SAAA,mBAAA,GAAA,CAAC,QAAM,QAAO,EAAA,MAAA,EAAA,CAAA;AAAA,GACrB,MAAA;AACL,IAAM,MAAA,MAAA,GAAS,UAAW,CAAA,KAAA,EAAO,KAAK,CAAA;AACtC,IAAO,IAAA,GAAA,CAAC,KAAK,GAAK,KAAA;AApZtB,MAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAoZyB,MAAC,uBAAA,GAAA,CAAA,CAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAY,SAAW,EAAA,GAAA,CAAI,EAAM,IAAA,GAAA,CAAI,EAAK,GAAA,CAAA,UAAA,EAAA,CAAaD,GAAA,GAAA,GAAA,CAAI,EAAJ,KAAA,IAAA,GAAAA,GAAU,GAAA,CAAC,MAAKC,GAAA,GAAA,GAAA,CAAI,EAAJ,KAAA,IAAA,GAAAA,GAAU,GAAA,CAAC,CAAM,CAAA,CAAA,GAAA,MAAA,EAAW,OAAS,EAAA,GAAA,CAAI,OAAa,EAAA,EAAA,GAAA,CAAI,MAAS,GAAA;AAAA,QAC9J,QAAQ,GAAI,CAAA;AAAA,OACd,GAAI,EAFkB,CAAA,EAAA,EAGT,gBAAM,GAAI,CAAA,CAAC,MAAM,EAAI,KAAA;AAvZtC,QAAAD,IAAAA,GAAAA;AAuZyC,QAAC,uBAAA,GAAA,CAAA,OAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAiB,CAAG,EAAA,IAAA,CAAK,CAAG,EAAA,CAAA,EAAG,IAAK,CAAA,CAAA,GAAI,IAAK,CAAA,QAAA,EAAU,QAAU,EAAA,EAAA,EAAI,aAAe,EAAA,QAAA,EAAA,EAAc,QAAlG,CAAA,EAAA,EAChB,QAAAA,EAAAA,CAAAA,CAAAA,GAAAA,GAAA,MAAO,CAAA,EAAE,CAAT,KAAA,IAAA,GAAAA,GAAc,GAAA,EAAI,EAAA,GAAA,CAAI,CAAC,CAAA,EAAG,EAAI,KAAA;AAxZxD,UAAAA,IAAAA,GAAAA;AAwZ2D,UAAA,uBAAA,GAAA,CAAC,KAAmB,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,CAAC,CAAA,CAAA,EAA/B,EAAkC,IAAA,EAAA,CAAMA,GAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,IAAA,EAAM,CAAC,CAAA,KAAnB,IAAAA,GAAAA,GAAAA,GAAwB,MAAQ,EAAA,MAAA,EAAQ,OAAQ,CAAA,GAAA,CAAI,MAAQ,EAAA,CAAC,CAAG,EAAA,WAAA,EAAa,GAAI,CAAA,WAAA,EAAa,cAAe,EAAA,OAAA,EAChL,QAAE,EAAA,CAAA,CAAA,IAAA,EAAA,CAAA,EADoC,EAE3C,CAAA;AAAA,SAAQ,MAHmB,EAInC,CAAA;AAAA,OAAU,MAPG,GAQrB,CAAA;AAAA,KAAA;AACR,IAAI,IAAA,CAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,UAAS,YAAc,EAAA;AAC7B,MAAM,MAAA,MAAA,GAAS,GAAG,QAAW,GAAA,EAAA;AAC7B,MAAY,SAAA,GAAA,KAAA,CAAM,OAAO,CAAK,CAAA,KAAA,CAAA,CAAE,QAAQ,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,sBAAO,GAAA,CAAA,IAAA,EAAA,EAAoB,GAAG,CAAE,CAAA,CAAA,GAAI,QAAQ,CAAG,EAAA,CAAA,CAAE,GAAG,KAAO,EAAA,CAAA,CAAE,QAAQ,MAAS,GAAA,CAAA,EAAG,QAAQ,CAAE,CAAA,MAAA,EAAQ,IAAI,EAAG,CAAA,SAAA,GAAY,EAAE,MAAS,GAAA,CAAA,EAAG,MAAM,MAAO,CAAA,EAAA,CAAG,OAAO,EAAG,CAAA,OAAO,KAApJ,CAAK,EAAA,EAAA,CAAC,EAAiJ,CAAE,CAAA;AAAA;AAC/N;AAEF,EAAA,MAAM,SAA+B,EAAC;AAEtC,EAAI,IAAA,CAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,UAAS,MAAQ,EAAA;AACvB,IAAA,MAAM,IAAI,WAAY,CAAA,EAAA,CAAG,KAAO,EAAA,EAAA,CAAG,WAAW,EAAE,CAAA;AAChD,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,MAAM,CAAE,CAAA,KAAA;AAvad,QAAAA,IAAAA,GAAAA;AAuaiB,QAAOA,OAAAA,MAAAA,CAAAA,CAAAA,GAAAA,GAAA,GAAG,KAAH,KAAA,IAAA,GAAAA,MAAY,GAAI,CAAA,CAAC,GAAG,IAAI,CAAA;AAAA,OAAA;AAAA,MAC1C,EAAA,EAAI,EAAE,EAAK,GAAA,CAAA;AAAA,MACX,EAAA,EAAI,EAAE,EAAK,GAAA;AAAA,KACb,EAAG,OAAO,CAAC,CAAA;AACX,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,MAAM,CAAE,CAAA,KAAA;AA5ad,QAAAA,IAAAA,GAAAA;AA4aiB,QAAOA,OAAAA,MAAAA,CAAAA,CAAAA,GAAAA,GAAA,GAAG,KAAH,KAAA,IAAA,GAAAA,MAAY,GAAI,CAAA,CAAC,GAAG,GAAG,CAAA;AAAA,OAAA;AAAA,MACzC,IAAI,CAAE,CAAA,EAAA;AAAA,MACN,IAAI,CAAE,CAAA;AAAA,KACR,EAAG,OAAO,CAAC,CAAA;AAAA,GACb,MAAA,IAAA,CAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,QAAU,EAAA;AAChC,IAAM,MAAA,CAAC,CAAG,EAAA,CAAC,CAAI,GAAA,CAAA,EAAA,GAAA,aAAA,CAAc,GAAG,OAAO,CAAA,KAAxB,IAA6B,GAAA,EAAA,GAAA,aAAA,CAAc,cAAc,CAAA;AACxE,IAAA,MAAM,IAAI,WAAY,CAAA,EAAA,CAAG,KAAO,EAAA,EAAA,CAAG,WAAW,EAAE,CAAA;AAChD,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,IAAM,EAAA,CAAA;AAAA,MACN,EAAA,EAAI,CAAC,CAAE,CAAA,EAAA;AAAA,MACP,EAAA,EAAI,CAAC,CAAE,CAAA;AAAA,KACT,EAAG,MAAM,CAAC,CAAA;AACV,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,IAAM,EAAA,CAAA;AAAA,MACN,IAAI,CAAE,CAAA,EAAA;AAAA,MACN,IAAI,CAAE,CAAA;AAAA,KACR,EAAG,MAAM,CAAC,CAAA;AAAA,GACZ,MAAA,IAAA,CAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,QAAU,EAAA;AAChC,IAAA,MAAM,IAAI,WAAY,CAAA,EAAA,CAAG,KAAO,EAAA,EAAA,CAAG,WAAW,EAAE,CAAA;AAChD,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,MAAM,CAAE,CAAA,KAAA;AAhcd,QAAAA,IAAAA,GAAAA;AAgciB,QAAAA,OAAAA,CAAAA,GAAAA,GAAA,GAAG,KAAH,KAAA,IAAA,GAAAA,MAAY,YAAa,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,OAAA;AAAA,MAC1C,IAAI,CAAE,CAAA,EAAA;AAAA,MACN,IAAI,CAAE,CAAA;AAAA,KACR,EAAG,QAAQ,CAAC,CAAA;AAAA;AAGd,EAAM,MAAA,UAAA,GAAa,CAAC,KAAA,EAAe,IAAc,EAAA,EAAA,EAAY,IAAY,GAAa,EAAA,OAAA,KAAqB,MAAO,CAAA,IAAA,CAAK,IAAK,CAAA,cAAA,CAAA;AAAA,IAC1H,IAAM,EAAA,KAAA;AAAA,IACN,EAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACI,EAAA,OAAA,IAAW,OAAO,GAAM,GAAA;AAAA,IAC1B,MAAA,EAAQ,MAAO,CAAA,IAAA,GAAO,CAAC;AAAA,GACrB,GAAA,EACH,CAAA,EAAA,GAAG,CAAC,CAAA;AACP,EAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,IAAA,MAAM,IAAI,KAAM,CAAA,MAAA;AAChB,IAAA,MAAM,IAAI,WAAY,CAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,WAAW,CAAC,CAAA;AAC7C,IAAA,UAAA,CAAW,MAAO,CAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,KAAK,CAAA,EAAG,CAAE,CAAA,QAAA,GAAW,CAAG,EAAA,CAAA,CAAE,EAAI,EAAA,CAAA,CAAE,IAAI,MAAM,CAAA;AAAA,GACzE,MAAA,IAAA,CAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,MAAQ,EAAA;AAC9B,IAAA,MAAM,CAAI,GAAA,UAAA,CAAW,EAAG,CAAA,SAAA,EAAW,EAAE,CAAA;AACrC,IAAA,UAAA,CAAW,EAAE,KAAO,EAAA,CAAA,CAAE,MAAM,CAAG,EAAA,CAAA,CAAE,IAAI,MAAM,CAAA;AAAA,GAC7C,MAAA,IAAA,CAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,MAAQ,EAAA;AAC9B,IAAA,UAAA,CAAW,MAAO,CAAA,CAAA,EAAA,GAAA,EAAA,CAAG,KAAH,KAAA,IAAA,GAAA,EAAA,GAAY,MAAM,KAAO,EAAA,EAAA,CAAG,OAAO,CAAA,EAAG,EAAG,CAAA,MAAA,GAAS,EAAI,EAAA,CAAA,EAAG,GAAG,MAAM,CAAA;AAAA,GACtF,MAAA,IAAA,CAAW,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,MAAQ,EAAA;AAC9B,IAAW,UAAA,CAAA,KAAA,CAAM,OAAO,QAAS,CAAA,EAAA,CAAG,WAAW,EAAE,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,MAAM,CAAA;AAAA;AAGlE,EAAA,IAAA,CAAI,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,QAAY,IAAA,CAAA,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,UAAS,QAAU,EAAA;AAClD,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,IAAM,EAAA,MAAA;AAAA,MACN,MAAQ,EAAA,GAAA;AAAA,MACR,WAAA,EAAa,KAAK,EAAG,CAAA;AAAA,KACvB,EAAG,OAAO,CAAC,CAAA;AAAA,GACN,MAAA;AACL,IAAA,IAAI,KAAM,CAAA,OAAA,IAAW,KAAM,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AAC9C,MAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,QACf,IAAA,EAAM,MAAM,OAAQ,CAAA,KAAA;AAAA,QACpB,MAAA,EAAQ,MAAM,OAAQ,CAAA,KAAA;AAAA,QACtB,WAAa,EAAA,KAAA,CAAM,OAAQ,CAAA,OAAA,GAAU,EAAK,GAAA;AAAA,OAC5C,EAAG,SAAS,CAAC,CAAA;AAAA;AAEf,IAAA,MAAM,QAAO,EAAI,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,MAAS,SAAS,IAAO,GAAA,IAAA,GAAO,GAAG,SAAY,GAAA,CAAA;AAChE,IAAA,MAAA,CAAO,KAAK,IAAK,CAAA;AAAA,MACf,IAAA,EAAM,OAAO,CAAK,CAAA,KAAA,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG,IAAI,CAAI,GAAA;AAAA,KAC3C,EAAG,OAAO,CAAC,CAAA;AAAA;AAEb,EAAA,4BAAQ,CACG,EAAA,EAAA,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,MAAS,mBAAA,GAAA,CAAC,IACR,EAAA,EAAA,QAAA,EAAA,KAAA,CAAM,GAAI,CAAA,CAAA,CAAA,qBAAM,GAAA,CAAA,MAAA,EAAA,EAAmB,EAAI,EAAA,CAAA,CAAE,GAAK,EAAA,CAAA,EAAE,MAAO,EAAA,CAAA,EAAE,MAAO,EAAA,KAAA,EAAM,MAAO,EAAA,MAAA,EAAO,MAC7E,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,YAAA,EAAc,CAAE,CAAA,GAAA,EAAK,CADhB,EAAA,EAAA,CAAA,CAAE,GAE3B,CAAS,GACjB,CAAU,GAAA,IAAA;AAAA,IACb,SAAA;AAAA,IACA;AAAA,GACL,EAAA,CAAA;AACR;AAGgB,SAAA,YAAA,CAAa,OAAkB,KAA8B,EAAA;AAC3E,EAAM,MAAA,GAAA,GAAM,SAAS,KAAM,CAAA,KAAA,EAAO,MAAM,KAAO,EAAA,KAAA,CAAM,QAAU,EAAA,KAAA,CAAM,SAAS,CAAA;AAC9E,EAAA,OAAO,GAAM,GAAA,GAAA,CAAI,MAAS,GAAA,KAAA,CAAM,WAAW,KAAM,CAAA,SAAA;AACnD"}
|