@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 12.0.129-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/compute.js +57 -1
- package/lib/compute.js.map +1 -1
- package/lib/features/agent-chat/NativeAgentChat.js +3 -2
- package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +10 -0
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/apps/mobileAppCatalog.js +11 -0
- package/lib/features/apps/mobileAppCatalog.js.map +1 -1
- package/lib/features/canvas/AudioEditorExperience.js +448 -105
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +33 -14
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +493 -41
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +37 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +237 -22
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +119 -26
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +17 -6
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +18 -1
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/DesignCategoryGallery.js +423 -0
- package/lib/features/canvas/DesignCategoryGallery.js.map +1 -0
- package/lib/features/canvas/ImageEditorExperience.js +763 -187
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +199 -11
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +59 -40
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +134 -34
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/aiEdit.js +4 -2
- package/lib/features/canvas/aiEdit.js.map +1 -1
- package/lib/features/canvas/audioEditor/AudioWaveform.js +96 -0
- package/lib/features/canvas/audioEditor/AudioWaveform.js.map +1 -0
- package/lib/features/canvas/audioEditor/audioPeaks.js +93 -0
- package/lib/features/canvas/audioEditor/audioPeaks.js.map +1 -0
- package/lib/features/canvas/canvasTaskSync.js +34 -7
- package/lib/features/canvas/canvasTaskSync.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +23 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +10 -24
- package/lib/features/canvas/canvasTheme.js.map +1 -1
- package/lib/features/canvas/canvasUi.js +1 -1
- package/lib/features/canvas/canvasUi.js.map +1 -1
- package/lib/features/canvas/createTiles.js +17 -9
- package/lib/features/canvas/createTiles.js.map +1 -1
- package/lib/features/canvas/deepLinks.js +35 -5
- package/lib/features/canvas/deepLinks.js.map +1 -1
- package/lib/features/canvas/designCatalog.js +165 -0
- package/lib/features/canvas/designCatalog.js.map +1 -0
- package/lib/features/canvas/designCategories.js +262 -0
- package/lib/features/canvas/designCategories.js.map +1 -0
- package/lib/features/canvas/editorControls.js +406 -0
- package/lib/features/canvas/editorControls.js.map +1 -0
- package/lib/features/canvas/generationModels.js +5 -3
- package/lib/features/canvas/generationModels.js.map +1 -1
- package/lib/features/canvas/generationTasks.js +162 -0
- package/lib/features/canvas/generationTasks.js.map +1 -0
- package/lib/features/canvas/generator/BottomSheet.js +167 -0
- package/lib/features/canvas/generator/BottomSheet.js.map +1 -0
- package/lib/features/canvas/generator/BusinessCardChatCard.js +155 -0
- package/lib/features/canvas/generator/BusinessCardChatCard.js.map +1 -0
- package/lib/features/canvas/generator/DirectorSheet.js +163 -0
- package/lib/features/canvas/generator/DirectorSheet.js.map +1 -0
- package/lib/features/canvas/generator/ReframePreview.js +122 -0
- package/lib/features/canvas/generator/ReframePreview.js.map +1 -0
- package/lib/features/canvas/generator/RunLogCard.js +119 -0
- package/lib/features/canvas/generator/RunLogCard.js.map +1 -0
- package/lib/features/canvas/generator/ShotPanel.js +261 -0
- package/lib/features/canvas/generator/ShotPanel.js.map +1 -0
- package/lib/features/canvas/generator/businessCardWidget.js +117 -0
- package/lib/features/canvas/generator/businessCardWidget.js.map +1 -0
- package/lib/features/canvas/generator/cameraVocabulary.js +142 -0
- package/lib/features/canvas/generator/cameraVocabulary.js.map +1 -0
- package/lib/features/canvas/generator/cinematicVocabulary.js +416 -0
- package/lib/features/canvas/generator/cinematicVocabulary.js.map +1 -0
- package/lib/features/canvas/generator/direction.js +41 -0
- package/lib/features/canvas/generator/direction.js.map +1 -0
- package/lib/features/canvas/generator/reframeGeometry.js +108 -0
- package/lib/features/canvas/generator/reframeGeometry.js.map +1 -0
- package/lib/features/canvas/generator/runLog.js +71 -0
- package/lib/features/canvas/generator/runLog.js.map +1 -0
- package/lib/features/canvas/generator/shot.js +133 -0
- package/lib/features/canvas/generator/shot.js.map +1 -0
- package/lib/features/canvas/generator/useShotSpec.js +87 -0
- package/lib/features/canvas/generator/useShotSpec.js.map +1 -0
- package/lib/features/canvas/home/HeroComposer.js +214 -0
- package/lib/features/canvas/home/HeroComposer.js.map +1 -0
- package/lib/features/canvas/home/HeroMonitor.js +225 -0
- package/lib/features/canvas/home/HeroMonitor.js.map +1 -0
- package/lib/features/canvas/home/LookDetail.js +185 -0
- package/lib/features/canvas/home/LookDetail.js.map +1 -0
- package/lib/features/canvas/home/LoopingVideo.js +37 -0
- package/lib/features/canvas/home/LoopingVideo.js.map +1 -0
- package/lib/features/canvas/home/TemplatesGallery.js +253 -0
- package/lib/features/canvas/home/TemplatesGallery.js.map +1 -0
- package/lib/features/canvas/home/heroShots.js +100 -0
- package/lib/features/canvas/home/heroShots.js.map +1 -0
- package/lib/features/canvas/homeWork.js +62 -3
- package/lib/features/canvas/homeWork.js.map +1 -1
- package/lib/features/canvas/imageEditor/ImageMarkup.js +195 -0
- package/lib/features/canvas/imageEditor/ImageMarkup.js.map +1 -0
- package/lib/features/canvas/imageEditor/imageEditOps.js +367 -0
- package/lib/features/canvas/imageEditor/imageEditOps.js.map +1 -0
- package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
- package/lib/features/canvas/rankedCatalogSearch.js +375 -0
- package/lib/features/canvas/rankedCatalogSearch.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +68 -20
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/recorder/RecordingReview.js +272 -0
- package/lib/features/canvas/recorder/RecordingReview.js.map +1 -0
- package/lib/features/canvas/recorder/RecordingsList.js +179 -0
- package/lib/features/canvas/recorder/RecordingsList.js.map +1 -0
- package/lib/features/canvas/recorder/recorderOps.js +99 -0
- package/lib/features/canvas/recorder/recorderOps.js.map +1 -0
- package/lib/features/canvas/seedanceShowcase.js +314 -0
- package/lib/features/canvas/seedanceShowcase.js.map +1 -0
- package/lib/features/canvas/serverTasks.js +149 -15
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/sessionRenewal.js +114 -0
- package/lib/features/canvas/sessionRenewal.js.map +1 -0
- package/lib/features/canvas/set/SetViewportWebView.js +34 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/set/agent/setTurn.js +4 -2
- package/lib/features/canvas/set/agent/setTurn.js.map +1 -1
- package/lib/features/canvas/set/setPresets.js +85 -0
- package/lib/features/canvas/set/setPresets.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +4 -1
- package/lib/features/canvas/set/setProject.js.map +1 -1
- package/lib/features/canvas/studioCatalog.js +59 -4
- package/lib/features/canvas/studioCatalog.js.map +1 -1
- package/lib/features/canvas/studioLooks.js +31 -4
- package/lib/features/canvas/studioLooks.js.map +1 -1
- package/lib/features/canvas/surfaceIndex.js +1 -14
- package/lib/features/canvas/surfaceIndex.js.map +1 -1
- package/lib/features/canvas/templateSearch.js +489 -0
- package/lib/features/canvas/templateSearch.js.map +1 -0
- package/lib/features/canvas/useCanvasSession.js +28 -6
- package/lib/features/canvas/useCanvasSession.js.map +1 -1
- package/lib/features/canvas/useStudioCatalogTemplates.js +41 -5
- package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -1
- package/lib/features/canvas/videoEditor/EditorPanels.js +531 -0
- package/lib/features/canvas/videoEditor/EditorPanels.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +48 -4
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +2 -0
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/brainClient.js +97 -27
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/cutTools.js +707 -3
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
- package/lib/features/canvas/videoEditor/audioServices.js +165 -0
- package/lib/features/canvas/videoEditor/audioServices.js.map +1 -0
- package/lib/features/canvas/videoEditor/captions.js +144 -0
- package/lib/features/canvas/videoEditor/captions.js.map +1 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js +24 -16
- package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -1
- package/lib/features/canvas/videoEditor/editorModel.js +12 -2
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +89 -7
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/layers.js +117 -0
- package/lib/features/canvas/videoEditor/layers.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +45 -18
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/renderTimeline.js +18 -6
- package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -1
- package/lib/features/canvas/videoEditor/revoice.js +138 -0
- package/lib/features/canvas/videoEditor/revoice.js.map +1 -0
- package/lib/features/canvas/videoEditor/storageUpload.js +34 -0
- package/lib/features/canvas/videoEditor/storageUpload.js.map +1 -0
- package/lib/features/canvas/videoEditor/textMotion.js +109 -0
- package/lib/features/canvas/videoEditor/textMotion.js.map +1 -0
- package/lib/features/canvas/videoEditor/transitions.js +31 -0
- package/lib/features/canvas/videoEditor/transitions.js.map +1 -0
- package/lib/features/chat/TemplatesChatCards.js +8 -3
- package/lib/features/chat/TemplatesChatCards.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +674 -644
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +285 -538
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/design/designCore.js +2 -212
- package/lib/features/design/designCore.js.map +1 -1
- package/lib/features/design/designIndex.js +1 -50
- package/lib/features/design/designIndex.js.map +1 -1
- package/lib/features/design/doc/aiDesign.js +247 -0
- package/lib/features/design/doc/aiDesign.js.map +1 -0
- package/lib/features/design/doc/artifacts.js +280 -0
- package/lib/features/design/doc/artifacts.js.map +1 -0
- package/lib/features/design/doc/chart.js +98 -0
- package/lib/features/design/doc/chart.js.map +1 -0
- package/lib/features/design/doc/crop.js +104 -0
- package/lib/features/design/doc/crop.js.map +1 -0
- package/lib/features/design/doc/curve.js +49 -0
- package/lib/features/design/doc/curve.js.map +1 -0
- package/lib/features/design/doc/docOps.js +397 -0
- package/lib/features/design/doc/docOps.js.map +1 -0
- package/lib/features/design/doc/findReplace.js +112 -0
- package/lib/features/design/doc/findReplace.js.map +1 -0
- package/lib/features/design/doc/fonts.js +79 -0
- package/lib/features/design/doc/fonts.js.map +1 -0
- package/lib/features/design/doc/frames.js +17 -0
- package/lib/features/design/doc/frames.js.map +1 -0
- package/lib/features/design/doc/geometry.js +133 -0
- package/lib/features/design/doc/geometry.js.map +1 -0
- package/lib/features/design/doc/imageAdjust.js +203 -0
- package/lib/features/design/doc/imageAdjust.js.map +1 -0
- package/lib/features/design/doc/legacyDoc.js +107 -0
- package/lib/features/design/doc/legacyDoc.js.map +1 -0
- package/lib/features/design/doc/newDoc.js +335 -0
- package/lib/features/design/doc/newDoc.js.map +1 -0
- package/lib/features/design/doc/pageRange.js +17 -0
- package/lib/features/design/doc/pageRange.js.map +1 -0
- package/lib/features/design/doc/pathScale.js +68 -0
- package/lib/features/design/doc/pathScale.js.map +1 -0
- package/lib/features/design/doc/qr.js +62 -0
- package/lib/features/design/doc/qr.js.map +1 -0
- package/lib/features/design/doc/shapes.js +366 -0
- package/lib/features/design/doc/shapes.js.map +1 -0
- package/lib/features/design/doc/sizes.js +230 -0
- package/lib/features/design/doc/sizes.js.map +1 -0
- package/lib/features/design/doc/textEffects.js +134 -0
- package/lib/features/design/doc/textEffects.js.map +1 -0
- package/lib/features/design/doc/textLayout.js +182 -0
- package/lib/features/design/doc/textLayout.js.map +1 -0
- package/lib/features/design/doc/types.js +30 -0
- package/lib/features/design/doc/types.js.map +1 -0
- package/lib/features/design/editor/AiPanel.js +194 -0
- package/lib/features/design/editor/AiPanel.js.map +1 -0
- package/lib/features/design/editor/ChartDataPanel.js +182 -0
- package/lib/features/design/editor/ChartDataPanel.js.map +1 -0
- package/lib/features/design/editor/CropOverlay.js +199 -0
- package/lib/features/design/editor/CropOverlay.js.map +1 -0
- package/lib/features/design/editor/DesignCanvas.js +363 -0
- package/lib/features/design/editor/DesignCanvas.js.map +1 -0
- package/lib/features/design/editor/ExportSheet.js +123 -0
- package/lib/features/design/editor/ExportSheet.js.map +1 -0
- package/lib/features/design/editor/FindReplacePanel.js +93 -0
- package/lib/features/design/editor/FindReplacePanel.js.map +1 -0
- package/lib/features/design/editor/ImageTools.js +188 -0
- package/lib/features/design/editor/ImageTools.js.map +1 -0
- package/lib/features/design/editor/LayerTools.js +485 -0
- package/lib/features/design/editor/LayerTools.js.map +1 -0
- package/lib/features/design/editor/PageStrip.js +203 -0
- package/lib/features/design/editor/PageStrip.js.map +1 -0
- package/lib/features/design/editor/Slideshow.js +97 -0
- package/lib/features/design/editor/Slideshow.js.map +1 -0
- package/lib/features/design/editor/ToolPanels.js +695 -0
- package/lib/features/design/editor/ToolPanels.js.map +1 -0
- package/lib/features/design/editor/controls.js +630 -0
- package/lib/features/design/editor/controls.js.map +1 -0
- package/lib/features/design/editor/useDesignSave.js +91 -0
- package/lib/features/design/editor/useDesignSave.js.map +1 -0
- package/lib/features/design/export/exportDesign.js +170 -0
- package/lib/features/design/export/exportDesign.js.map +1 -0
- package/lib/features/design/export/pdf.js +143 -0
- package/lib/features/design/export/pdf.js.map +1 -0
- package/lib/features/design/home/DesignHome.js +688 -0
- package/lib/features/design/home/DesignHome.js.map +1 -0
- package/lib/features/design/home/studioHome.js +61 -0
- package/lib/features/design/home/studioHome.js.map +1 -0
- package/lib/features/design/pickDesignImage.js +60 -0
- package/lib/features/design/pickDesignImage.js.map +1 -0
- package/lib/features/design/render/DesignPageView.js +69 -0
- package/lib/features/design/render/DesignPageView.js.map +1 -0
- package/lib/features/design/render/PageCapture.js +288 -0
- package/lib/features/design/render/PageCapture.js.map +1 -0
- package/lib/features/design/render/TextMeasure.js +115 -0
- package/lib/features/design/render/TextMeasure.js.map +1 -0
- package/lib/features/design/render/fontRegistry.js +110 -0
- package/lib/features/design/render/fontRegistry.js.map +1 -0
- package/lib/features/design/render/layers.js +392 -0
- package/lib/features/design/render/layers.js.map +1 -0
- package/lib/features/design/render/svg.js +35 -0
- package/lib/features/design/render/svg.js.map +1 -0
- package/lib/features/design/render/svgParts.js +435 -0
- package/lib/features/design/render/svgParts.js.map +1 -0
- package/lib/features/design/surface/BoardScreen.js +529 -0
- package/lib/features/design/surface/BoardScreen.js.map +1 -0
- package/lib/features/design/surface/CompareView.js +138 -0
- package/lib/features/design/surface/CompareView.js.map +1 -0
- package/lib/features/design/surface/CreationScreen.js +294 -0
- package/lib/features/design/surface/CreationScreen.js.map +1 -0
- package/lib/features/design/surface/DesignAgentChatPane.js +444 -0
- package/lib/features/design/surface/DesignAgentChatPane.js.map +1 -0
- package/lib/features/design/surface/DesignBoards.js +441 -0
- package/lib/features/design/surface/DesignBoards.js.map +1 -0
- package/lib/features/design/surface/DesignPreview.js +159 -0
- package/lib/features/design/surface/DesignPreview.js.map +1 -0
- package/lib/features/design/surface/DesignSurfaceExperience.js +80 -0
- package/lib/features/design/surface/DesignSurfaceExperience.js.map +1 -0
- package/lib/features/design/surface/FullScreenPreview.js +59 -0
- package/lib/features/design/surface/FullScreenPreview.js.map +1 -0
- package/lib/features/design/surface/NewSystemDialog.js +122 -0
- package/lib/features/design/surface/NewSystemDialog.js.map +1 -0
- package/lib/features/design/surface/PickerSheet.js +175 -0
- package/lib/features/design/surface/PickerSheet.js.map +1 -0
- package/lib/features/design/surface/TemplatesGallery.js +156 -0
- package/lib/features/design/surface/TemplatesGallery.js.map +1 -0
- package/lib/features/design/surface/WetPaint.js +140 -0
- package/lib/features/design/surface/WetPaint.js.map +1 -0
- package/lib/features/design/surface/agentTurn.js +229 -0
- package/lib/features/design/surface/agentTurn.js.map +1 -0
- package/lib/features/design/surface/designBoard.js +218 -0
- package/lib/features/design/surface/designBoard.js.map +1 -0
- package/lib/features/design/surface/designChannel.js +186 -0
- package/lib/features/design/surface/designChannel.js.map +1 -0
- package/lib/features/design/surface/designChat.js +141 -0
- package/lib/features/design/surface/designChat.js.map +1 -0
- package/lib/features/design/surface/designConnector.js +266 -0
- package/lib/features/design/surface/designConnector.js.map +1 -0
- package/lib/features/design/surface/designDocument.js +40 -0
- package/lib/features/design/surface/designDocument.js.map +1 -0
- package/lib/features/design/surface/designExport.js +55 -0
- package/lib/features/design/surface/designExport.js.map +1 -0
- package/lib/features/design/surface/designLinks.js +64 -0
- package/lib/features/design/surface/designLinks.js.map +1 -0
- package/lib/features/design/surface/designPalette.js +24 -0
- package/lib/features/design/surface/designPalette.js.map +1 -0
- package/lib/features/design/surface/designRun.js +161 -0
- package/lib/features/design/surface/designRun.js.map +1 -0
- package/lib/features/design/surface/designTheme.js +119 -0
- package/lib/features/design/surface/designTheme.js.map +1 -0
- package/lib/features/design/surface/execStream.js +206 -0
- package/lib/features/design/surface/execStream.js.map +1 -0
- package/lib/features/design/surface/metaball.js +48 -0
- package/lib/features/design/surface/metaball.js.map +1 -0
- package/lib/features/design/surface/pickReferenceFiles.js +35 -0
- package/lib/features/design/surface/pickReferenceFiles.js.map +1 -0
- package/lib/features/design/surface/useDesignSurface.js +379 -0
- package/lib/features/design/surface/useDesignSurface.js.map +1 -0
- package/lib/features/docs/DocBlockRow.js +336 -0
- package/lib/features/docs/DocBlockRow.js.map +1 -0
- package/lib/features/docs/DocsEditorExperience.js +949 -0
- package/lib/features/docs/DocsEditorExperience.js.map +1 -0
- package/lib/features/docs/DocsToolbar.js +247 -0
- package/lib/features/docs/DocsToolbar.js.map +1 -0
- package/lib/features/docs/blocks.js +560 -0
- package/lib/features/docs/blocks.js.map +1 -0
- package/lib/features/docs/docArtifacts.js +129 -0
- package/lib/features/docs/docArtifacts.js.map +1 -0
- package/lib/features/docs/docEdits.js +201 -0
- package/lib/features/docs/docEdits.js.map +1 -0
- package/lib/features/docs/docExport.js +235 -0
- package/lib/features/docs/docExport.js.map +1 -0
- package/lib/features/docs/docShare.js +62 -0
- package/lib/features/docs/docShare.js.map +1 -0
- package/lib/features/links/openInApp.js +38 -2
- package/lib/features/links/openInApp.js.map +1 -1
- package/lib/routes.json +54 -0
- package/lib/screens/DesignNative/index.js +35 -0
- package/lib/screens/DesignNative/index.js.map +1 -0
- package/package.json +3 -3
- package/lib/features/design/exportDesign.js +0 -133
- package/lib/features/design/exportDesign.js.map +0 -1
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
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
|
+
var __objRest = (source, exclude) => {
|
|
21
|
+
var target = {};
|
|
22
|
+
for (var prop in source)
|
|
23
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
24
|
+
target[prop] = source[prop];
|
|
25
|
+
if (source != null && __getOwnPropSymbols)
|
|
26
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
27
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
28
|
+
target[prop] = source[prop];
|
|
29
|
+
}
|
|
30
|
+
return target;
|
|
31
|
+
};
|
|
32
|
+
const TEXT_BLOCK_TYPES = ["paragraph", "heading", "bulletListItem", "numberedListItem", "checkListItem", "quote", "codeBlock"];
|
|
33
|
+
const isTextBlock = (block) => TEXT_BLOCK_TYPES.includes(block.type);
|
|
34
|
+
function newBlockId() {
|
|
35
|
+
var _a, _b;
|
|
36
|
+
const bytes = new Uint8Array(16);
|
|
37
|
+
let filled = false;
|
|
38
|
+
try {
|
|
39
|
+
(_b = (_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues) == null ? void 0 : _b.call(_a, bytes);
|
|
40
|
+
filled = bytes.some((b) => b !== 0);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
filled = false;
|
|
43
|
+
}
|
|
44
|
+
if (!filled) for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);
|
|
45
|
+
bytes[6] = bytes[6] & 15 | 64;
|
|
46
|
+
bytes[8] = bytes[8] & 63 | 128;
|
|
47
|
+
const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
48
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
49
|
+
}
|
|
50
|
+
const isObject = (v) => Boolean(v) && typeof v === "object" && !Array.isArray(v);
|
|
51
|
+
function parseBlocks(raw) {
|
|
52
|
+
if (!Array.isArray(raw)) return [];
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const entry of raw) {
|
|
55
|
+
if (!isObject(entry) || typeof entry.type !== "string" || !entry.type) continue;
|
|
56
|
+
const block = __spreadProps(__spreadValues({}, entry), {
|
|
57
|
+
id: typeof entry.id === "string" && entry.id ? entry.id : newBlockId(),
|
|
58
|
+
type: entry.type,
|
|
59
|
+
props: isObject(entry.props) ? entry.props : {},
|
|
60
|
+
children: parseBlocks(entry.children)
|
|
61
|
+
});
|
|
62
|
+
out.push(block);
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
function serialiseBlocks(blocks) {
|
|
67
|
+
return JSON.parse(JSON.stringify(blocks));
|
|
68
|
+
}
|
|
69
|
+
function defaultProps(type, extra = {}) {
|
|
70
|
+
const base = {
|
|
71
|
+
textColor: "default",
|
|
72
|
+
backgroundColor: "default",
|
|
73
|
+
textAlignment: "left"
|
|
74
|
+
};
|
|
75
|
+
switch (type) {
|
|
76
|
+
case "heading":
|
|
77
|
+
return __spreadValues(__spreadProps(__spreadValues({}, base), {
|
|
78
|
+
level: 1,
|
|
79
|
+
isToggleable: false
|
|
80
|
+
}), extra);
|
|
81
|
+
case "checkListItem":
|
|
82
|
+
return __spreadValues(__spreadProps(__spreadValues({}, base), {
|
|
83
|
+
checked: false
|
|
84
|
+
}), extra);
|
|
85
|
+
case "codeBlock":
|
|
86
|
+
return __spreadValues({
|
|
87
|
+
language: "text"
|
|
88
|
+
}, extra);
|
|
89
|
+
case "image":
|
|
90
|
+
return __spreadValues({
|
|
91
|
+
backgroundColor: "default",
|
|
92
|
+
textAlignment: "center",
|
|
93
|
+
name: "",
|
|
94
|
+
url: "",
|
|
95
|
+
caption: "",
|
|
96
|
+
showPreview: true
|
|
97
|
+
}, extra);
|
|
98
|
+
case "table":
|
|
99
|
+
return __spreadValues({
|
|
100
|
+
textColor: "default"
|
|
101
|
+
}, extra);
|
|
102
|
+
default:
|
|
103
|
+
return __spreadValues(__spreadValues({}, base), extra);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function newBlock(type, extra = {}, content) {
|
|
107
|
+
if (type === "image") return {
|
|
108
|
+
id: newBlockId(),
|
|
109
|
+
type,
|
|
110
|
+
props: defaultProps(type, extra),
|
|
111
|
+
children: []
|
|
112
|
+
};
|
|
113
|
+
if (type === "table") {
|
|
114
|
+
const cell = () => ({
|
|
115
|
+
type: "tableCell",
|
|
116
|
+
content: [],
|
|
117
|
+
props: {}
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
id: newBlockId(),
|
|
121
|
+
type,
|
|
122
|
+
props: defaultProps(type, extra),
|
|
123
|
+
content: {
|
|
124
|
+
type: "tableContent",
|
|
125
|
+
columnWidths: [void 0, void 0, void 0],
|
|
126
|
+
rows: [0, 1, 2].map(() => ({
|
|
127
|
+
cells: [cell(), cell(), cell()]
|
|
128
|
+
}))
|
|
129
|
+
},
|
|
130
|
+
children: []
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
id: newBlockId(),
|
|
135
|
+
type,
|
|
136
|
+
props: defaultProps(type, extra),
|
|
137
|
+
content: content != null ? content : [],
|
|
138
|
+
children: []
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function emptyDocument() {
|
|
142
|
+
return [newBlock("paragraph")];
|
|
143
|
+
}
|
|
144
|
+
function cleanStyles(styles) {
|
|
145
|
+
if (!isObject(styles)) return {};
|
|
146
|
+
const out = {};
|
|
147
|
+
for (const key of Object.keys(styles)) {
|
|
148
|
+
const v = styles[key];
|
|
149
|
+
if (v === void 0 || v === false || v === null || v === "" || v === "default") continue;
|
|
150
|
+
out[key] = v;
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
function sameStyles(a, b) {
|
|
155
|
+
const ka = Object.keys(a).filter((k) => a[k] !== void 0);
|
|
156
|
+
const kb = Object.keys(b).filter((k) => b[k] !== void 0);
|
|
157
|
+
if (ka.length !== kb.length) return false;
|
|
158
|
+
return ka.every((k) => a[k] === b[k]);
|
|
159
|
+
}
|
|
160
|
+
const sameRunLook = (a, b) => {
|
|
161
|
+
var _a, _b;
|
|
162
|
+
return ((_a = a.href) != null ? _a : "") === ((_b = b.href) != null ? _b : "") && sameStyles(a.styles, b.styles);
|
|
163
|
+
};
|
|
164
|
+
function inlineToRuns(content) {
|
|
165
|
+
if (typeof content === "string") return content ? [{
|
|
166
|
+
text: content,
|
|
167
|
+
styles: {}
|
|
168
|
+
}] : [];
|
|
169
|
+
if (!Array.isArray(content)) return [];
|
|
170
|
+
const runs = [];
|
|
171
|
+
for (const node of content) {
|
|
172
|
+
if (typeof node === "string") {
|
|
173
|
+
if (node) runs.push({
|
|
174
|
+
text: node,
|
|
175
|
+
styles: {}
|
|
176
|
+
});
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (!isObject(node)) continue;
|
|
180
|
+
if (node.type === "link" && typeof node.href === "string") {
|
|
181
|
+
for (const inner of inlineToRuns(node.content)) runs.push(__spreadProps(__spreadValues({}, inner), {
|
|
182
|
+
href: node.href
|
|
183
|
+
}));
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (typeof node.text === "string" && node.text) runs.push({
|
|
187
|
+
text: node.text,
|
|
188
|
+
styles: cleanStyles(node.styles)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return normaliseRuns(runs);
|
|
192
|
+
}
|
|
193
|
+
function normaliseRuns(runs) {
|
|
194
|
+
const out = [];
|
|
195
|
+
for (const run of runs) {
|
|
196
|
+
if (!run.text) continue;
|
|
197
|
+
const last = out[out.length - 1];
|
|
198
|
+
if (last && sameRunLook(last, run)) out[out.length - 1] = __spreadProps(__spreadValues({}, last), {
|
|
199
|
+
text: last.text + run.text
|
|
200
|
+
});
|
|
201
|
+
else out.push(__spreadValues({
|
|
202
|
+
text: run.text,
|
|
203
|
+
styles: __spreadValues({}, run.styles)
|
|
204
|
+
}, run.href ? {
|
|
205
|
+
href: run.href
|
|
206
|
+
} : {}));
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
function runsToInline(runs) {
|
|
211
|
+
const out = [];
|
|
212
|
+
for (const run of normaliseRuns(runs)) {
|
|
213
|
+
const text = {
|
|
214
|
+
type: "text",
|
|
215
|
+
text: run.text,
|
|
216
|
+
styles: __spreadValues({}, run.styles)
|
|
217
|
+
};
|
|
218
|
+
if (run.href) {
|
|
219
|
+
const last = out[out.length - 1];
|
|
220
|
+
if (last && last.type === "link" && last.href === run.href) last.content.push(text);
|
|
221
|
+
else out.push({
|
|
222
|
+
type: "link",
|
|
223
|
+
href: run.href,
|
|
224
|
+
content: [text]
|
|
225
|
+
});
|
|
226
|
+
} else {
|
|
227
|
+
out.push(text);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return out;
|
|
231
|
+
}
|
|
232
|
+
const runsText = (runs) => runs.map((r) => r.text).join("");
|
|
233
|
+
function inlineText(content) {
|
|
234
|
+
if (typeof content === "string") return content;
|
|
235
|
+
if (!Array.isArray(content)) return "";
|
|
236
|
+
return content.map((node) => {
|
|
237
|
+
if (typeof node === "string") return node;
|
|
238
|
+
if (!isObject(node)) return "";
|
|
239
|
+
return typeof node.text === "string" ? node.text : inlineText(node.content);
|
|
240
|
+
}).join("");
|
|
241
|
+
}
|
|
242
|
+
function splitRuns(runs, at) {
|
|
243
|
+
const before = [];
|
|
244
|
+
const after = [];
|
|
245
|
+
let pos = 0;
|
|
246
|
+
for (const run of runs) {
|
|
247
|
+
const end = pos + run.text.length;
|
|
248
|
+
if (end <= at) before.push(run);
|
|
249
|
+
else if (pos >= at) after.push(run);
|
|
250
|
+
else {
|
|
251
|
+
before.push(__spreadProps(__spreadValues({}, run), {
|
|
252
|
+
text: run.text.slice(0, at - pos)
|
|
253
|
+
}));
|
|
254
|
+
after.push(__spreadProps(__spreadValues({}, run), {
|
|
255
|
+
text: run.text.slice(at - pos)
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
pos = end;
|
|
259
|
+
}
|
|
260
|
+
return [normaliseRuns(before), normaliseRuns(after)];
|
|
261
|
+
}
|
|
262
|
+
function lookAt(runs, at, pending) {
|
|
263
|
+
if (pending) return {
|
|
264
|
+
styles: __spreadValues({}, pending)
|
|
265
|
+
};
|
|
266
|
+
let pos = 0;
|
|
267
|
+
let prev;
|
|
268
|
+
for (const run of runs) {
|
|
269
|
+
if (at > pos && at <= pos + run.text.length) {
|
|
270
|
+
prev = run;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
pos += run.text.length;
|
|
274
|
+
}
|
|
275
|
+
if (!prev) prev = at === 0 ? runs[0] : void 0;
|
|
276
|
+
if (!prev) return {
|
|
277
|
+
styles: {}
|
|
278
|
+
};
|
|
279
|
+
const atLinkEnd = prev.href && at === pos + prev.text.length;
|
|
280
|
+
return __spreadValues({
|
|
281
|
+
styles: __spreadValues({}, prev.styles)
|
|
282
|
+
}, prev.href && !atLinkEnd ? {
|
|
283
|
+
href: prev.href
|
|
284
|
+
} : {});
|
|
285
|
+
}
|
|
286
|
+
function applyTextChange(runs, nextText, cursor, pending) {
|
|
287
|
+
const prevText = runsText(runs);
|
|
288
|
+
if (prevText === nextText) return [...runs];
|
|
289
|
+
let start = 0;
|
|
290
|
+
const max = Math.min(prevText.length, nextText.length);
|
|
291
|
+
while (start < max && prevText[start] === nextText[start]) start += 1;
|
|
292
|
+
let endPrev = prevText.length;
|
|
293
|
+
let endNext = nextText.length;
|
|
294
|
+
while (endPrev > start && endNext > start && prevText[endPrev - 1] === nextText[endNext - 1]) {
|
|
295
|
+
endPrev -= 1;
|
|
296
|
+
endNext -= 1;
|
|
297
|
+
}
|
|
298
|
+
const inserted = nextText.slice(start, endNext);
|
|
299
|
+
const look = lookAt(runs, start, pending);
|
|
300
|
+
const [before] = splitRuns(runs, start);
|
|
301
|
+
const [, after] = splitRuns(runs, endPrev);
|
|
302
|
+
return normaliseRuns([...before, ...inserted ? [__spreadValues({
|
|
303
|
+
text: inserted
|
|
304
|
+
}, look)] : [], ...after]);
|
|
305
|
+
}
|
|
306
|
+
function rangeHasStyle(runs, start, end, style) {
|
|
307
|
+
if (end <= start) return false;
|
|
308
|
+
let pos = 0;
|
|
309
|
+
let any = false;
|
|
310
|
+
for (const run of runs) {
|
|
311
|
+
const rEnd = pos + run.text.length;
|
|
312
|
+
if (rEnd > start && pos < end) {
|
|
313
|
+
any = true;
|
|
314
|
+
if (!run.styles[style]) return false;
|
|
315
|
+
}
|
|
316
|
+
pos = rEnd;
|
|
317
|
+
}
|
|
318
|
+
return any;
|
|
319
|
+
}
|
|
320
|
+
function mapRange(runs, start, end, fn) {
|
|
321
|
+
const [before, rest] = splitRuns(runs, start);
|
|
322
|
+
const [middle, after] = splitRuns(rest, end - start);
|
|
323
|
+
return normaliseRuns([...before, ...middle.map(fn), ...after]);
|
|
324
|
+
}
|
|
325
|
+
function toggleStyle(runs, start, end, style) {
|
|
326
|
+
if (end <= start) return [...runs];
|
|
327
|
+
const on = !rangeHasStyle(runs, start, end, style);
|
|
328
|
+
return mapRange(runs, start, end, (run) => {
|
|
329
|
+
const styles = __spreadValues({}, run.styles);
|
|
330
|
+
if (on) styles[style] = true;
|
|
331
|
+
else delete styles[style];
|
|
332
|
+
return __spreadProps(__spreadValues({}, run), {
|
|
333
|
+
styles
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
function setColor(runs, start, end, key, color) {
|
|
338
|
+
if (end <= start) return [...runs];
|
|
339
|
+
return mapRange(runs, start, end, (run) => {
|
|
340
|
+
const styles = __spreadValues({}, run.styles);
|
|
341
|
+
if (!color || color === "default") delete styles[key];
|
|
342
|
+
else styles[key] = color;
|
|
343
|
+
return __spreadProps(__spreadValues({}, run), {
|
|
344
|
+
styles
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
function setLink(runs, start, end, href) {
|
|
349
|
+
if (end <= start) return [...runs];
|
|
350
|
+
return mapRange(runs, start, end, (run) => {
|
|
351
|
+
const _a = run, {
|
|
352
|
+
href: _old
|
|
353
|
+
} = _a, rest = __objRest(_a, [
|
|
354
|
+
"href"
|
|
355
|
+
]);
|
|
356
|
+
return href ? __spreadProps(__spreadValues({}, rest), {
|
|
357
|
+
href
|
|
358
|
+
}) : rest;
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function linkAt(runs, at) {
|
|
362
|
+
var _a;
|
|
363
|
+
let pos = 0;
|
|
364
|
+
for (const run of runs) {
|
|
365
|
+
if (at >= pos && at < pos + run.text.length) return (_a = run.href) != null ? _a : null;
|
|
366
|
+
pos += run.text.length;
|
|
367
|
+
}
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
function activeStyles(runs, start, end) {
|
|
371
|
+
const out = /* @__PURE__ */ new Set();
|
|
372
|
+
const all = ["bold", "italic", "underline", "strike", "code"];
|
|
373
|
+
if (end > start) {
|
|
374
|
+
for (const s of all) if (rangeHasStyle(runs, start, end, s)) out.add(s);
|
|
375
|
+
return out;
|
|
376
|
+
}
|
|
377
|
+
const look = lookAt(runs, start).styles;
|
|
378
|
+
for (const s of all) if (look[s]) out.add(s);
|
|
379
|
+
return out;
|
|
380
|
+
}
|
|
381
|
+
function findBlock(blocks, id) {
|
|
382
|
+
var _a;
|
|
383
|
+
for (const block of blocks) {
|
|
384
|
+
if (block.id === id) return block;
|
|
385
|
+
const inner = findBlock((_a = block.children) != null ? _a : [], id);
|
|
386
|
+
if (inner) return inner;
|
|
387
|
+
}
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
function updateBlock(blocks, id, fn) {
|
|
391
|
+
let changed = false;
|
|
392
|
+
const next = blocks.map((block) => {
|
|
393
|
+
var _a;
|
|
394
|
+
if (block.id === id) {
|
|
395
|
+
changed = true;
|
|
396
|
+
return fn(block);
|
|
397
|
+
}
|
|
398
|
+
if ((_a = block.children) == null ? void 0 : _a.length) {
|
|
399
|
+
const children = updateBlock(block.children, id, fn);
|
|
400
|
+
if (children !== block.children) {
|
|
401
|
+
changed = true;
|
|
402
|
+
return __spreadProps(__spreadValues({}, block), {
|
|
403
|
+
children
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return block;
|
|
408
|
+
});
|
|
409
|
+
return changed ? next : blocks;
|
|
410
|
+
}
|
|
411
|
+
function withSiblings(blocks, id, fn) {
|
|
412
|
+
const index = blocks.findIndex((b) => b.id === id);
|
|
413
|
+
if (index >= 0) return fn([...blocks], index);
|
|
414
|
+
let changed = false;
|
|
415
|
+
const next = blocks.map((block) => {
|
|
416
|
+
var _a;
|
|
417
|
+
if (changed || !((_a = block.children) == null ? void 0 : _a.length)) return block;
|
|
418
|
+
const children = withSiblings(block.children, id, fn);
|
|
419
|
+
if (children !== block.children) {
|
|
420
|
+
changed = true;
|
|
421
|
+
return __spreadProps(__spreadValues({}, block), {
|
|
422
|
+
children
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
return block;
|
|
426
|
+
});
|
|
427
|
+
return changed ? next : blocks;
|
|
428
|
+
}
|
|
429
|
+
function insertAfter(blocks, id, added) {
|
|
430
|
+
return withSiblings(blocks, id, (list, i) => {
|
|
431
|
+
list.splice(i + 1, 0, ...added);
|
|
432
|
+
return list;
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
function removeBlock(blocks, id) {
|
|
436
|
+
return withSiblings(blocks, id, (list, i) => {
|
|
437
|
+
var _a;
|
|
438
|
+
list.splice(i, 1, ...(_a = list[i].children) != null ? _a : []);
|
|
439
|
+
return list;
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
function moveBlock(blocks, id, dir) {
|
|
443
|
+
return withSiblings(blocks, id, (list, i) => {
|
|
444
|
+
const j = i + dir;
|
|
445
|
+
if (j < 0 || j >= list.length) return list;
|
|
446
|
+
[list[i], list[j]] = [list[j], list[i]];
|
|
447
|
+
return list;
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
function indentBlock(blocks, id) {
|
|
451
|
+
return withSiblings(blocks, id, (list, i) => {
|
|
452
|
+
var _a;
|
|
453
|
+
if (i === 0) return list;
|
|
454
|
+
const [block] = list.splice(i, 1);
|
|
455
|
+
const parent = list[i - 1];
|
|
456
|
+
list[i - 1] = __spreadProps(__spreadValues({}, parent), {
|
|
457
|
+
children: [...(_a = parent.children) != null ? _a : [], block]
|
|
458
|
+
});
|
|
459
|
+
return list;
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
function outdentBlock(blocks, id) {
|
|
463
|
+
var _a;
|
|
464
|
+
const lift = (list) => {
|
|
465
|
+
var _a2, _b;
|
|
466
|
+
for (let i = 0; i < list.length; i += 1) {
|
|
467
|
+
const parent = list[i];
|
|
468
|
+
const kids = (_a2 = parent.children) != null ? _a2 : [];
|
|
469
|
+
const k = kids.findIndex((c) => c.id === id);
|
|
470
|
+
if (k >= 0) {
|
|
471
|
+
const block = kids[k];
|
|
472
|
+
const lifted = __spreadProps(__spreadValues({}, block), {
|
|
473
|
+
children: [...(_b = block.children) != null ? _b : [], ...kids.slice(k + 1)]
|
|
474
|
+
});
|
|
475
|
+
const next = [...list];
|
|
476
|
+
next.splice(i, 1, __spreadProps(__spreadValues({}, parent), {
|
|
477
|
+
children: kids.slice(0, k)
|
|
478
|
+
}), lifted);
|
|
479
|
+
return next;
|
|
480
|
+
}
|
|
481
|
+
const inner = lift(kids);
|
|
482
|
+
if (inner) {
|
|
483
|
+
const next = [...list];
|
|
484
|
+
next[i] = __spreadProps(__spreadValues({}, parent), {
|
|
485
|
+
children: inner
|
|
486
|
+
});
|
|
487
|
+
return next;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return null;
|
|
491
|
+
};
|
|
492
|
+
return (_a = lift(blocks)) != null ? _a : blocks;
|
|
493
|
+
}
|
|
494
|
+
function flattenBlocks(blocks, depth = 0) {
|
|
495
|
+
var _a, _b;
|
|
496
|
+
const out = [];
|
|
497
|
+
let n = 0;
|
|
498
|
+
for (const block of blocks) {
|
|
499
|
+
let number;
|
|
500
|
+
if (block.type === "numberedListItem") {
|
|
501
|
+
const start = Number((_a = block.props) == null ? void 0 : _a.start);
|
|
502
|
+
n = n === 0 && Number.isFinite(start) && start > 0 ? start : n + 1;
|
|
503
|
+
number = n;
|
|
504
|
+
} else {
|
|
505
|
+
n = 0;
|
|
506
|
+
}
|
|
507
|
+
out.push(__spreadValues({
|
|
508
|
+
block,
|
|
509
|
+
depth
|
|
510
|
+
}, number !== void 0 ? {
|
|
511
|
+
number
|
|
512
|
+
} : {}));
|
|
513
|
+
if ((_b = block.children) == null ? void 0 : _b.length) out.push(...flattenBlocks(block.children, depth + 1));
|
|
514
|
+
}
|
|
515
|
+
return out;
|
|
516
|
+
}
|
|
517
|
+
function outlineOf(blocks) {
|
|
518
|
+
return flattenBlocks(blocks).filter(({
|
|
519
|
+
block
|
|
520
|
+
}) => block.type === "heading").map(({
|
|
521
|
+
block
|
|
522
|
+
}) => {
|
|
523
|
+
var _a;
|
|
524
|
+
const raw = Number((_a = block.props) == null ? void 0 : _a.level);
|
|
525
|
+
const level = raw === 2 || raw === 3 ? raw : 1;
|
|
526
|
+
return {
|
|
527
|
+
id: block.id,
|
|
528
|
+
level,
|
|
529
|
+
text: inlineText(block.content).replace(/\s+/g, " ").trim()
|
|
530
|
+
};
|
|
531
|
+
}).filter((entry) => entry.text);
|
|
532
|
+
}
|
|
533
|
+
function docPreviewLines(blocks, max = 6) {
|
|
534
|
+
const out = [];
|
|
535
|
+
const walk = (list) => {
|
|
536
|
+
if (!Array.isArray(list)) return;
|
|
537
|
+
for (const block of list) {
|
|
538
|
+
if (out.length >= max) return;
|
|
539
|
+
const text = inlineText(block == null ? void 0 : block.content).replace(/\s+/g, " ").trim();
|
|
540
|
+
if (text) out.push({
|
|
541
|
+
text,
|
|
542
|
+
heading: (block == null ? void 0 : block.type) === "heading"
|
|
543
|
+
});
|
|
544
|
+
walk(block == null ? void 0 : block.children);
|
|
545
|
+
}
|
|
546
|
+
};
|
|
547
|
+
walk(blocks);
|
|
548
|
+
return out;
|
|
549
|
+
}
|
|
550
|
+
function tableCellRuns(cell) {
|
|
551
|
+
if (isObject(cell) && cell.type === "tableCell") return inlineToRuns(cell.content);
|
|
552
|
+
return inlineToRuns(cell);
|
|
553
|
+
}
|
|
554
|
+
function withTableCellRuns(cell, runs) {
|
|
555
|
+
const content = runsToInline(runs);
|
|
556
|
+
if (isObject(cell) && cell.type === "tableCell") return __spreadProps(__spreadValues({}, cell), {
|
|
557
|
+
content
|
|
558
|
+
});
|
|
559
|
+
return content;
|
|
560
|
+
}export{TEXT_BLOCK_TYPES,activeStyles,applyTextChange,defaultProps,docPreviewLines,emptyDocument,findBlock,flattenBlocks,indentBlock,inlineText,inlineToRuns,insertAfter,isObject,isTextBlock,linkAt,moveBlock,newBlock,newBlockId,normaliseRuns,outdentBlock,outlineOf,parseBlocks,rangeHasStyle,removeBlock,runsText,runsToInline,serialiseBlocks,setColor,setLink,splitRuns,tableCellRuns,toggleStyle,updateBlock,withTableCellRuns};//# sourceMappingURL=blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","sources":["../../../src/features/docs/blocks.ts"],"sourcesContent":["/**\n * BlockNote block JSON - the document model the web docs editor stores\n * (`editor.document`) and the native docs editor edits in place.\n *\n * The wire shape is BlockNote's own: `{ id, type, props, content, children }`\n * where `content` is inline content (styled text and links) for text blocks,\n * `{ type: 'tableContent', rows }` for tables and absent for images. A block\n * type native does not know (a web-only embed, a future type) is kept\n * byte-for-byte: parsing never rewrites it and saving sends it back untouched.\n *\n * For editing, inline content is flattened to RUNS (one style set + optional\n * link per run) because a TextInput edits plain text; `runsToInline` folds\n * runs back into BlockNote's inline JSON.\n *\n * Pure: no RN imports, so it runs under jest as-is.\n */\n\n/** BlockNote's default style schema. Colors are BlockNote color names ('red', 'blue'...). */\nexport interface InlineStyles {\n bold?: true;\n italic?: true;\n underline?: true;\n strike?: true;\n code?: true;\n textColor?: string;\n backgroundColor?: string;\n}\n\nexport type ToggleStyle = 'bold' | 'italic' | 'underline' | 'strike' | 'code';\n\nexport interface StyledText {\n type: 'text';\n text: string;\n styles: InlineStyles;\n}\n\nexport interface LinkContent {\n type: 'link';\n href: string;\n content: StyledText[];\n}\n\nexport type InlineContent = StyledText | LinkContent;\n\nexport interface TableCell {\n type: 'tableCell';\n content: InlineContent[];\n props?: Record<string, unknown>;\n}\n\nexport interface TableContent {\n type: 'tableContent';\n columnWidths?: Array<number | null | undefined>;\n headerRows?: number;\n headerCols?: number;\n /** Older BlockNote writes a cell as bare inline content; newer as a `tableCell`. */\n rows: Array<{ cells: Array<InlineContent[] | TableCell> }>;\n}\n\nexport type KnownBlockType =\n | 'paragraph'\n | 'heading'\n | 'bulletListItem'\n | 'numberedListItem'\n | 'checkListItem'\n | 'quote'\n | 'codeBlock'\n | 'image'\n | 'table';\n\n/** One block. `type` stays a string: unknown types ride through unchanged. */\nexport interface DocBlock {\n id: string;\n type: string;\n props: Record<string, unknown>;\n content?: InlineContent[] | TableContent | unknown;\n children: DocBlock[];\n /** Anything else BlockNote (or a future version) put on the block. */\n [key: string]: unknown;\n}\n\n/** Block types whose `content` is inline text the native editor writes into. */\nexport const TEXT_BLOCK_TYPES: readonly string[] = [\n 'paragraph',\n 'heading',\n 'bulletListItem',\n 'numberedListItem',\n 'checkListItem',\n 'quote',\n 'codeBlock',\n];\n\nexport const KNOWN_BLOCK_TYPES: readonly string[] = [...TEXT_BLOCK_TYPES, 'image', 'table'];\n\nexport const isTextBlock = (block: Pick<DocBlock, 'type'>): boolean => TEXT_BLOCK_TYPES.includes(block.type);\nexport const isKnownBlock = (block: Pick<DocBlock, 'type'>): boolean => KNOWN_BLOCK_TYPES.includes(block.type);\n\n// ── ids ────────────────────────────────────────────────────────────────\n\n/** A BlockNote-style block id (a v4 UUID). */\nexport function newBlockId(): string {\n const bytes = new Uint8Array(16);\n let filled = false;\n try {\n (globalThis.crypto as Crypto | undefined)?.getRandomValues?.(bytes);\n filled = bytes.some((b) => b !== 0);\n } catch {\n filled = false;\n }\n if (!filled) for (let i = 0; i < 16; i += 1) bytes[i] = Math.floor(Math.random() * 256);\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n// ── parse / serialise ──────────────────────────────────────────────────\n\nexport const isObject = (v: unknown): v is Record<string, unknown> =>\n Boolean(v) && typeof v === 'object' && !Array.isArray(v);\n\n/**\n * Untrusted block JSON (a row someone else wrote) to blocks. Junk entries\n * drop; a block missing `id`/`props`/`children` gets them; everything else on\n * a block, known type or not, is kept as it came.\n */\nexport function parseBlocks(raw: unknown): DocBlock[] {\n if (!Array.isArray(raw)) return [];\n const out: DocBlock[] = [];\n for (const entry of raw) {\n if (!isObject(entry) || typeof entry.type !== 'string' || !entry.type) continue;\n const block: DocBlock = {\n ...entry,\n id: typeof entry.id === 'string' && entry.id ? entry.id : newBlockId(),\n type: entry.type,\n props: isObject(entry.props) ? (entry.props as Record<string, unknown>) : {},\n children: parseBlocks(entry.children),\n };\n out.push(block);\n }\n return out;\n}\n\n/**\n * Blocks back to BlockNote JSON. The model IS the wire shape, so this is a\n * structural copy: `parseBlocks(serialiseBlocks(b))` deep-equals `b`.\n */\nexport function serialiseBlocks(blocks: readonly DocBlock[]): DocBlock[] {\n return JSON.parse(JSON.stringify(blocks)) as DocBlock[];\n}\n\n// ── constructors ───────────────────────────────────────────────────────\n\n/** BlockNote's default props per type, so a block made here reads the same on web. */\nexport function defaultProps(type: string, extra: Record<string, unknown> = {}): Record<string, unknown> {\n const base: Record<string, unknown> = { textColor: 'default', backgroundColor: 'default', textAlignment: 'left' };\n switch (type) {\n case 'heading':\n return { ...base, level: 1, isToggleable: false, ...extra };\n case 'checkListItem':\n return { ...base, checked: false, ...extra };\n case 'codeBlock':\n return { language: 'text', ...extra };\n case 'image':\n return {\n backgroundColor: 'default',\n textAlignment: 'center',\n name: '',\n url: '',\n caption: '',\n showPreview: true,\n ...extra,\n };\n case 'table':\n return { textColor: 'default', ...extra };\n default:\n return { ...base, ...extra };\n }\n}\n\nexport function newBlock(type: string, extra: Record<string, unknown> = {}, content?: InlineContent[]): DocBlock {\n if (type === 'image') return { id: newBlockId(), type, props: defaultProps(type, extra), children: [] };\n if (type === 'table') {\n const cell = (): TableCell => ({ type: 'tableCell', content: [], props: {} });\n return {\n id: newBlockId(),\n type,\n props: defaultProps(type, extra),\n content: {\n type: 'tableContent',\n columnWidths: [undefined, undefined, undefined],\n rows: [0, 1, 2].map(() => ({ cells: [cell(), cell(), cell()] })),\n } as TableContent,\n children: [],\n };\n }\n return { id: newBlockId(), type, props: defaultProps(type, extra), content: content ?? [], children: [] };\n}\n\n/** A new document: one empty paragraph, as BlockNote starts. */\nexport function emptyDocument(): DocBlock[] {\n return [newBlock('paragraph')];\n}\n\n// ── runs ───────────────────────────────────────────────────────────────\n\n/** One stretch of text with one look. */\nexport interface Run {\n text: string;\n styles: InlineStyles;\n href?: string;\n}\n\nconst STYLE_KEYS: ReadonlyArray<keyof InlineStyles> = [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'textColor',\n 'backgroundColor',\n];\n\nfunction cleanStyles(styles: unknown): InlineStyles {\n if (!isObject(styles)) return {};\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(styles)) {\n const v = styles[key];\n if (v === undefined || v === false || v === null || v === '' || v === 'default') continue;\n out[key] = v;\n }\n return out as InlineStyles;\n}\n\nfunction sameStyles(a: InlineStyles, b: InlineStyles): boolean {\n const ka = Object.keys(a).filter((k) => (a as Record<string, unknown>)[k] !== undefined);\n const kb = Object.keys(b).filter((k) => (b as Record<string, unknown>)[k] !== undefined);\n if (ka.length !== kb.length) return false;\n return ka.every((k) => (a as Record<string, unknown>)[k] === (b as Record<string, unknown>)[k]);\n}\n\nconst sameRunLook = (a: Run, b: Run) => (a.href ?? '') === (b.href ?? '') && sameStyles(a.styles, b.styles);\n\n/** Inline content (or a plain string, which BlockNote also accepts) to runs. */\nexport function inlineToRuns(content: unknown): Run[] {\n if (typeof content === 'string') return content ? [{ text: content, styles: {} }] : [];\n if (!Array.isArray(content)) return [];\n const runs: Run[] = [];\n for (const node of content) {\n if (typeof node === 'string') {\n if (node) runs.push({ text: node, styles: {} });\n continue;\n }\n if (!isObject(node)) continue;\n if (node.type === 'link' && typeof node.href === 'string') {\n for (const inner of inlineToRuns(node.content)) runs.push({ ...inner, href: node.href });\n continue;\n }\n if (typeof node.text === 'string' && node.text)\n runs.push({ text: node.text, styles: cleanStyles(node.styles) });\n }\n return normaliseRuns(runs);\n}\n\n/** Merge neighbours that look alike and drop empty runs. */\nexport function normaliseRuns(runs: readonly Run[]): Run[] {\n const out: Run[] = [];\n for (const run of runs) {\n if (!run.text) continue;\n const last = out[out.length - 1];\n if (last && sameRunLook(last, run)) out[out.length - 1] = { ...last, text: last.text + run.text };\n else out.push({ text: run.text, styles: { ...run.styles }, ...(run.href ? { href: run.href } : {}) });\n }\n return out;\n}\n\n/** Runs back to BlockNote inline content: neighbouring runs of one link become one link node. */\nexport function runsToInline(runs: readonly Run[]): InlineContent[] {\n const out: InlineContent[] = [];\n for (const run of normaliseRuns(runs)) {\n const text: StyledText = { type: 'text', text: run.text, styles: { ...run.styles } };\n if (run.href) {\n const last = out[out.length - 1];\n if (last && last.type === 'link' && last.href === run.href) last.content.push(text);\n else out.push({ type: 'link', href: run.href, content: [text] });\n } else {\n out.push(text);\n }\n }\n return out;\n}\n\nexport const runsText = (runs: readonly Run[]): string => runs.map((r) => r.text).join('');\n\n/** Plain text of any inline content. */\nexport function inlineText(content: unknown): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n return content\n .map((node) => {\n if (typeof node === 'string') return node;\n if (!isObject(node)) return '';\n return typeof node.text === 'string' ? node.text : inlineText(node.content);\n })\n .join('');\n}\n\n/** Split runs at a character offset: [before, after]. */\nexport function splitRuns(runs: readonly Run[], at: number): [Run[], Run[]] {\n const before: Run[] = [];\n const after: Run[] = [];\n let pos = 0;\n for (const run of runs) {\n const end = pos + run.text.length;\n if (end <= at) before.push(run);\n else if (pos >= at) after.push(run);\n else {\n before.push({ ...run, text: run.text.slice(0, at - pos) });\n after.push({ ...run, text: run.text.slice(at - pos) });\n }\n pos = end;\n }\n return [normaliseRuns(before), normaliseRuns(after)];\n}\n\n/** The look a character typed at `at` takes: the run before it (links do not extend). */\nfunction lookAt(runs: readonly Run[], at: number, pending?: InlineStyles | null): Pick<Run, 'styles' | 'href'> {\n if (pending) return { styles: { ...pending } };\n let pos = 0;\n let prev: Run | undefined;\n for (const run of runs) {\n if (at > pos && at <= pos + run.text.length) {\n prev = run;\n break;\n }\n pos += run.text.length;\n }\n if (!prev) prev = at === 0 ? runs[0] : undefined;\n if (!prev) return { styles: {} };\n // Typing at a link's end does not grow the link, as in BlockNote.\n const atLinkEnd = prev.href && at === pos + prev.text.length;\n return { styles: { ...prev.styles }, ...(prev.href && !atLinkEnd ? { href: prev.href } : {}) };\n}\n\n/**\n * Apply a TextInput edit (old text -> new text) to the runs. The change is\n * the span between the common prefix and suffix; inserted characters take the\n * look of the character before them (or `pending`, the toolbar's armed styles).\n * `cursor` (the selection end after the edit) settles ambiguous repeats.\n */\nexport function applyTextChange(\n runs: readonly Run[],\n nextText: string,\n cursor?: number,\n pending?: InlineStyles | null,\n): Run[] {\n const prevText = runsText(runs);\n if (prevText === nextText) return [...runs];\n let start = 0;\n const max = Math.min(prevText.length, nextText.length);\n while (start < max && prevText[start] === nextText[start]) start += 1;\n let endPrev = prevText.length;\n let endNext = nextText.length;\n while (endPrev > start && endNext > start && prevText[endPrev - 1] === nextText[endNext - 1]) {\n endPrev -= 1;\n endNext -= 1;\n }\n // A repeated character (\"aa\" -> \"aaa\") matches at either end; the cursor\n // (where the edit ended) says which: the text after it is the unchanged tail.\n if (typeof cursor === 'number' && cursor !== endNext) {\n const cEndNext = cursor;\n const cEndPrev = cursor - (nextText.length - prevText.length);\n if (\n cEndNext >= 0 &&\n cEndNext <= nextText.length &&\n cEndPrev >= 0 &&\n cEndPrev <= prevText.length &&\n prevText.slice(cEndPrev) === nextText.slice(cEndNext)\n ) {\n let cStart = 0;\n const cMax = Math.min(cEndPrev, cEndNext);\n while (cStart < cMax && prevText[cStart] === nextText[cStart]) cStart += 1;\n start = cStart;\n endPrev = cEndPrev;\n endNext = cEndNext;\n }\n }\n const inserted = nextText.slice(start, endNext);\n const look = lookAt(runs, start, pending);\n const [before] = splitRuns(runs, start);\n const [, after] = splitRuns(runs, endPrev);\n return normaliseRuns([...before, ...(inserted ? [{ text: inserted, ...look }] : []), ...after]);\n}\n\n/** Every character in [start, end) has this style on. */\nexport function rangeHasStyle(runs: readonly Run[], start: number, end: number, style: ToggleStyle): boolean {\n if (end <= start) return false;\n let pos = 0;\n let any = false;\n for (const run of runs) {\n const rEnd = pos + run.text.length;\n if (rEnd > start && pos < end) {\n any = true;\n if (!run.styles[style]) return false;\n }\n pos = rEnd;\n }\n return any;\n}\n\n/** Map the runs covering [start, end) through `fn`, splitting at the edges. */\nfunction mapRange(runs: readonly Run[], start: number, end: number, fn: (run: Run) => Run): Run[] {\n const [before, rest] = splitRuns(runs, start);\n const [middle, after] = splitRuns(rest, end - start);\n return normaliseRuns([...before, ...middle.map(fn), ...after]);\n}\n\n/** Bold/italic/underline/strike/code over a range: off when it is on everywhere, else on. */\nexport function toggleStyle(runs: readonly Run[], start: number, end: number, style: ToggleStyle): Run[] {\n if (end <= start) return [...runs];\n const on = !rangeHasStyle(runs, start, end, style);\n return mapRange(runs, start, end, (run) => {\n const styles = { ...run.styles };\n if (on) styles[style] = true;\n else delete styles[style];\n return { ...run, styles };\n });\n}\n\n/** Text or highlight color over a range; 'default' (or empty) clears it. */\nexport function setColor(\n runs: readonly Run[],\n start: number,\n end: number,\n key: 'textColor' | 'backgroundColor',\n color: string,\n): Run[] {\n if (end <= start) return [...runs];\n return mapRange(runs, start, end, (run) => {\n const styles = { ...run.styles };\n if (!color || color === 'default') delete styles[key];\n else styles[key] = color;\n return { ...run, styles };\n });\n}\n\n/** Link (or unlink, with an empty href) a range. */\nexport function setLink(runs: readonly Run[], start: number, end: number, href: string | null): Run[] {\n if (end <= start) return [...runs];\n return mapRange(runs, start, end, (run) => {\n const { href: _old, ...rest } = run;\n return href ? { ...rest, href } : rest;\n });\n}\n\n/** The link under a range's start, for the link sheet to prefill. */\nexport function linkAt(runs: readonly Run[], at: number): string | null {\n let pos = 0;\n for (const run of runs) {\n if (at >= pos && at < pos + run.text.length) return run.href ?? null;\n pos += run.text.length;\n }\n return null;\n}\n\n/** Styles active at a cursor / over a selection, for the toolbar's pressed state. */\nexport function activeStyles(runs: readonly Run[], start: number, end: number): Set<ToggleStyle> {\n const out = new Set<ToggleStyle>();\n const all: ToggleStyle[] = ['bold', 'italic', 'underline', 'strike', 'code'];\n if (end > start) {\n for (const s of all) if (rangeHasStyle(runs, start, end, s)) out.add(s);\n return out;\n }\n const look = lookAt(runs, start).styles;\n for (const s of all) if (look[s]) out.add(s);\n return out;\n}\n\n// ── tree ops (by id) ───────────────────────────────────────────────────\n\nexport function findBlock(blocks: readonly DocBlock[], id: string): DocBlock | null {\n for (const block of blocks) {\n if (block.id === id) return block;\n const inner = findBlock(block.children ?? [], id);\n if (inner) return inner;\n }\n return null;\n}\n\nexport function updateBlock(blocks: readonly DocBlock[], id: string, fn: (b: DocBlock) => DocBlock): DocBlock[] {\n let changed = false;\n const next = blocks.map((block) => {\n if (block.id === id) {\n changed = true;\n return fn(block);\n }\n if (block.children?.length) {\n const children = updateBlock(block.children, id, fn);\n if (children !== block.children) {\n changed = true;\n return { ...block, children };\n }\n }\n return block;\n });\n return changed ? next : (blocks as DocBlock[]);\n}\n\n/** Apply `fn` to the sibling list holding `id`. */\nfunction withSiblings(\n blocks: readonly DocBlock[],\n id: string,\n fn: (siblings: DocBlock[], index: number) => DocBlock[],\n): DocBlock[] {\n const index = blocks.findIndex((b) => b.id === id);\n if (index >= 0) return fn([...blocks], index);\n let changed = false;\n const next = blocks.map((block) => {\n if (changed || !block.children?.length) return block;\n const children = withSiblings(block.children, id, fn);\n if (children !== block.children) {\n changed = true;\n return { ...block, children };\n }\n return block;\n });\n return changed ? next : (blocks as DocBlock[]);\n}\n\nexport function insertAfter(blocks: readonly DocBlock[], id: string, added: DocBlock[]): DocBlock[] {\n return withSiblings(blocks, id, (list, i) => {\n list.splice(i + 1, 0, ...added);\n return list;\n });\n}\n\n/** Remove a block; its children take its place so nested lists do not vanish with it. */\nexport function removeBlock(blocks: readonly DocBlock[], id: string): DocBlock[] {\n return withSiblings(blocks, id, (list, i) => {\n list.splice(i, 1, ...(list[i].children ?? []));\n return list;\n });\n}\n\n/** Swap a block with its previous (-1) or next (+1) sibling. */\nexport function moveBlock(blocks: readonly DocBlock[], id: string, dir: -1 | 1): DocBlock[] {\n return withSiblings(blocks, id, (list, i) => {\n const j = i + dir;\n if (j < 0 || j >= list.length) return list;\n [list[i], list[j]] = [list[j], list[i]];\n return list;\n });\n}\n\n/** Nest a block under its previous sibling (list indent). */\nexport function indentBlock(blocks: readonly DocBlock[], id: string): DocBlock[] {\n return withSiblings(blocks, id, (list, i) => {\n if (i === 0) return list;\n const [block] = list.splice(i, 1);\n const parent = list[i - 1];\n list[i - 1] = { ...parent, children: [...(parent.children ?? []), block] };\n return list;\n });\n}\n\n/** Lift a nested block out to follow its parent. */\nexport function outdentBlock(blocks: readonly DocBlock[], id: string): DocBlock[] {\n const lift = (list: readonly DocBlock[]): DocBlock[] | null => {\n for (let i = 0; i < list.length; i += 1) {\n const parent = list[i];\n const kids = parent.children ?? [];\n const k = kids.findIndex((c) => c.id === id);\n if (k >= 0) {\n // Later siblings become the lifted block's children, as in BlockNote.\n const block = kids[k];\n const lifted = { ...block, children: [...(block.children ?? []), ...kids.slice(k + 1)] };\n const next = [...list];\n next.splice(i, 1, { ...parent, children: kids.slice(0, k) }, lifted);\n return next;\n }\n const inner = lift(kids);\n if (inner) {\n const next = [...list];\n next[i] = { ...parent, children: inner };\n return next;\n }\n }\n return null;\n };\n return lift(blocks) ?? (blocks as DocBlock[]);\n}\n\nexport interface FlatBlock {\n block: DocBlock;\n depth: number;\n /** 1-based number for a numbered list item, counted among its siblings. */\n number?: number;\n}\n\n/** The tree in reading order, with depth and list numbers (what the editor's list renders). */\nexport function flattenBlocks(blocks: readonly DocBlock[], depth = 0): FlatBlock[] {\n const out: FlatBlock[] = [];\n let n = 0;\n for (const block of blocks) {\n let number: number | undefined;\n if (block.type === 'numberedListItem') {\n const start = Number(block.props?.start);\n n = n === 0 && Number.isFinite(start) && start > 0 ? start : n + 1;\n number = n;\n } else {\n n = 0;\n }\n out.push({ block, depth, ...(number !== undefined ? { number } : {}) });\n if (block.children?.length) out.push(...flattenBlocks(block.children, depth + 1));\n }\n return out;\n}\n\n// ── outline + preview ──────────────────────────────────────────────────\n\nexport interface OutlineEntry {\n id: string;\n level: 1 | 2 | 3;\n text: string;\n}\n\n/** The headings, in order (web OutlinePanel). Empty headings are skipped. */\nexport function outlineOf(blocks: readonly DocBlock[]): OutlineEntry[] {\n return flattenBlocks(blocks)\n .filter(({ block }) => block.type === 'heading')\n .map(({ block }) => {\n const raw = Number(block.props?.level);\n const level = (raw === 2 || raw === 3 ? raw : 1) as 1 | 2 | 3;\n return { id: block.id, level, text: inlineText(block.content).replace(/\\s+/g, ' ').trim() };\n })\n .filter((entry) => entry.text);\n}\n\n/**\n * A doc's opening lines as plain text, for the tile's little page (web\n * `homeWork.docPreviewLines`): one line per block, headings flagged, empty\n * blocks skipped. Reads the block JSON defensively - a row is untrusted.\n */\nexport function docPreviewLines(blocks: unknown, max = 6): { text: string; heading: boolean }[] {\n const out: { text: string; heading: boolean }[] = [];\n const walk = (list: unknown) => {\n if (!Array.isArray(list)) return;\n for (const block of list as Array<{ type?: string; content?: unknown; children?: unknown }>) {\n if (out.length >= max) return;\n const text = inlineText(block?.content).replace(/\\s+/g, ' ').trim();\n if (text) out.push({ text, heading: block?.type === 'heading' });\n walk(block?.children);\n }\n };\n walk(blocks);\n return out;\n}\n\n/** Table cells as runs, whichever cell shape the row uses. */\nexport function tableCellRuns(cell: InlineContent[] | TableCell | unknown): Run[] {\n if (isObject(cell) && cell.type === 'tableCell') return inlineToRuns(cell.content);\n return inlineToRuns(cell);\n}\n\n/** Write a cell back in the shape it came in. */\nexport function withTableCellRuns(\n cell: InlineContent[] | TableCell | unknown,\n runs: Run[],\n): InlineContent[] | TableCell {\n const content = runsToInline(runs);\n if (isObject(cell) && cell.type === 'tableCell') return { ...(cell as unknown as TableCell), content };\n return content;\n}\n\nexport { STYLE_KEYS };\n"],"names":["_a"],"mappings":"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"}
|