@bendyline/squisq-editor-react 2.1.0 → 2.2.0
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/LICENSE +21 -0
- package/NOTICE.md +40 -0
- package/dist/index.d.ts +188 -55
- package/dist/index.js +5094 -2948
- package/dist/monaco.js +0 -1
- package/dist/styles/index.css +234 -145
- package/package.json +9 -6
- package/dist/index.js.map +0 -1
- package/dist/monaco.js.map +0 -1
- package/src/BlockCardView.tsx +0 -121
- package/src/BlockPreviewPanel.tsx +0 -69
- package/src/BlockPropertiesPopover.tsx +0 -222
- package/src/DocumentSettingsDialog.tsx +0 -272
- package/src/DropZoneOverlay.tsx +0 -137
- package/src/EditorContext.tsx +0 -1274
- package/src/EditorShell.tsx +0 -1358
- package/src/EmojiPicker.tsx +0 -332
- package/src/FolderView.tsx +0 -131
- package/src/Icon.tsx +0 -26
- package/src/ImageEditor.tsx +0 -395
- package/src/ImageNodeView.tsx +0 -284
- package/src/ImageViewer.tsx +0 -221
- package/src/InlineIcon.ts +0 -84
- package/src/InlinePreviewGutter.tsx +0 -590
- package/src/LinkDialog.tsx +0 -276
- package/src/MediaBin.tsx +0 -500
- package/src/MentionExtension.tsx +0 -261
- package/src/OutlinePanel.tsx +0 -547
- package/src/PlainHtmlPreview.tsx +0 -277
- package/src/PreviewControls.tsx +0 -1265
- package/src/PreviewPanel.tsx +0 -426
- package/src/RawEditor.tsx +0 -743
- package/src/RecorderEntry.tsx +0 -162
- package/src/StatusBar.tsx +0 -51
- package/src/TemplateAnnotation.ts +0 -167
- package/src/TemplateContentPreview.tsx +0 -56
- package/src/TemplatePicker.tsx +0 -1314
- package/src/ThemeCustomizerPanel.tsx +0 -304
- package/src/ThemePicker.tsx +0 -433
- package/src/TimelineBlockPreview.tsx +0 -37
- package/src/TimelineTrack.tsx +0 -671
- package/src/Toolbar.tsx +0 -2885
- package/src/Tooltip.tsx +0 -142
- package/src/TransitionPicker.tsx +0 -390
- package/src/VersionHistoryPanel.tsx +0 -359
- package/src/ViewMenuPanel.tsx +0 -189
- package/src/ViewSwitcher.tsx +0 -56
- package/src/WysiwygEditor.tsx +0 -806
- package/src/__tests__/blockProperties.test.ts +0 -92
- package/src/__tests__/blockPropertiesPopoverTheme.test.tsx +0 -33
- package/src/__tests__/blockRange.test.ts +0 -105
- package/src/__tests__/blockTagActivity.test.ts +0 -183
- package/src/__tests__/buildDocumentPreviewMarkdown.test.ts +0 -75
- package/src/__tests__/buildPreviewDocContent.test.ts +0 -65
- package/src/__tests__/buildPreviewDocTransition.test.ts +0 -92
- package/src/__tests__/canvasSurfaceTextEditing.test.tsx +0 -60
- package/src/__tests__/codeContextSectionView.test.tsx +0 -97
- package/src/__tests__/codeContextZoneManager.test.ts +0 -127
- package/src/__tests__/createShapeLayer.test.ts +0 -46
- package/src/__tests__/customLayoutManagerTheme.test.tsx +0 -34
- package/src/__tests__/detectMarkdown.test.ts +0 -73
- package/src/__tests__/diffContextSections.test.ts +0 -39
- package/src/__tests__/documentSettingsDialog.test.tsx +0 -197
- package/src/__tests__/drawingShapeRoundTrip.test.ts +0 -49
- package/src/__tests__/editorScrollHandoff.test.tsx +0 -102
- package/src/__tests__/editorScrollSync.test.ts +0 -65
- package/src/__tests__/editorShellCodeContext.test.tsx +0 -86
- package/src/__tests__/editorShellProps.test.tsx +0 -550
- package/src/__tests__/embeddedMedia.test.ts +0 -48
- package/src/__tests__/emojiPicker.test.tsx +0 -93
- package/src/__tests__/fileKind.test.ts +0 -112
- package/src/__tests__/findMode.test.tsx +0 -104
- package/src/__tests__/findModel.test.ts +0 -55
- package/src/__tests__/headingTransition.test.ts +0 -176
- package/src/__tests__/imageEditAffordance.test.tsx +0 -272
- package/src/__tests__/imageEditModalContract.test.tsx +0 -119
- package/src/__tests__/imageEditorShell.test.tsx +0 -94
- package/src/__tests__/imageEditorState.test.ts +0 -171
- package/src/__tests__/inlinePreviewGutter.test.tsx +0 -62
- package/src/__tests__/inlinePreviewGutterAllBlocks.test.tsx +0 -103
- package/src/__tests__/jsonEditor.test.tsx +0 -223
- package/src/__tests__/layersPanel.test.tsx +0 -167
- package/src/__tests__/layoutChildRoundTrip.test.ts +0 -71
- package/src/__tests__/linkDialogDocPicker.test.tsx +0 -137
- package/src/__tests__/majorApiTypes.test.ts +0 -26
- package/src/__tests__/markdownCodeFence.test.ts +0 -45
- package/src/__tests__/mediaAttachmentFlow.test.ts +0 -110
- package/src/__tests__/mediaBinDrop.test.tsx +0 -90
- package/src/__tests__/mediaReferences.test.ts +0 -97
- package/src/__tests__/narrationSave.test.ts +0 -148
- package/src/__tests__/outlinePanel.test.tsx +0 -169
- package/src/__tests__/outlineSource.test.ts +0 -217
- package/src/__tests__/plainHtmlPreview.test.tsx +0 -125
- package/src/__tests__/presentationMode.test.tsx +0 -290
- package/src/__tests__/previewControls.test.tsx +0 -571
- package/src/__tests__/previewPanelAudioFailure.test.tsx +0 -46
- package/src/__tests__/previewPanelPresentation.test.tsx +0 -126
- package/src/__tests__/previewPanelTransforms.test.tsx +0 -117
- package/src/__tests__/propertiesPanel.test.tsx +0 -69
- package/src/__tests__/rawEditorModelIsolation.test.ts +0 -19
- package/src/__tests__/recorderFormats.test.ts +0 -146
- package/src/__tests__/recorderMediaInsert.test.ts +0 -86
- package/src/__tests__/recorderTheme.test.tsx +0 -42
- package/src/__tests__/recorderTimingJson.test.ts +0 -41
- package/src/__tests__/resolveBlockVisual.test.ts +0 -43
- package/src/__tests__/selectionConversions.test.ts +0 -80
- package/src/__tests__/statusBar.test.tsx +0 -27
- package/src/__tests__/teleprompter.test.tsx +0 -190
- package/src/__tests__/templateAnnotationRoundTrip.test.ts +0 -99
- package/src/__tests__/templateContentPreview.test.ts +0 -101
- package/src/__tests__/templatePickerMetadata.test.ts +0 -32
- package/src/__tests__/templatePickerPortal.test.tsx +0 -62
- package/src/__tests__/timelineSource.test.ts +0 -134
- package/src/__tests__/tiptapBridge.test.ts +0 -575
- package/src/__tests__/tiptapBridgeConformance.test.ts +0 -47
- package/src/__tests__/tiptapCodeBlockRoundTrip.test.ts +0 -109
- package/src/__tests__/tiptapImageRoundTrip.test.ts +0 -73
- package/src/__tests__/toolbarSelectionConversion.test.tsx +0 -190
- package/src/__tests__/tooltip.test.tsx +0 -72
- package/src/__tests__/transformStyleId.test.ts +0 -13
- package/src/__tests__/transitionCatalog.test.ts +0 -64
- package/src/__tests__/useBlockNavigator.test.tsx +0 -67
- package/src/__tests__/useImageEditor.test.tsx +0 -226
- package/src/__tests__/useJsonEditorTokens.test.ts +0 -59
- package/src/__tests__/useMediaRecorder.test.ts +0 -302
- package/src/__tests__/useTimelineClock.test.ts +0 -21
- package/src/__tests__/versionHistory.test.tsx +0 -197
- package/src/__tests__/viewMenuPanel.test.tsx +0 -130
- package/src/__tests__/writeCanvasSettings.test.ts +0 -15
- package/src/__tests__/wysiwygImageUpload.test.ts +0 -69
- package/src/__tests__/wysiwygTemplateBadgeFocus.test.tsx +0 -56
- package/src/asciiDiagram/AsciiDiagramExtension.ts +0 -343
- package/src/asciiDiagram/AsciiDiagramWidget.tsx +0 -254
- package/src/asciiDiagram/RepairableDiagramExtension.ts +0 -200
- package/src/asciiDiagram/__tests__/AsciiDiagramExtension.test.ts +0 -164
- package/src/asciiDiagram/__tests__/RepairableDiagramExtension.test.ts +0 -159
- package/src/asciiDiagram/__tests__/asciiDiagramCommands.test.ts +0 -284
- package/src/asciiDiagram/__tests__/asciiDiagramOps.test.ts +0 -114
- package/src/asciiDiagram/__tests__/asciiPaste.test.ts +0 -43
- package/src/asciiDiagram/asciiDiagramCommands.ts +0 -174
- package/src/asciiDiagram/asciiDiagramData.ts +0 -149
- package/src/asciiDiagram/asciiDiagramOps.ts +0 -238
- package/src/asciiDiagram/asciiPaste.ts +0 -19
- package/src/blockProperties.ts +0 -88
- package/src/blockRange.ts +0 -132
- package/src/blockSlice.ts +0 -75
- package/src/blockTagActivity.ts +0 -233
- package/src/buildDocumentPreviewMarkdown.ts +0 -168
- package/src/buildPreviewDoc.ts +0 -407
- package/src/codeContext/CodeContextSectionView.tsx +0 -124
- package/src/codeContext/CodeContextZoneManager.ts +0 -149
- package/src/codeContext/CodeContextZones.tsx +0 -121
- package/src/codeContext/diffContextSections.ts +0 -38
- package/src/codeContext/types.ts +0 -75
- package/src/codeSnippet/CodeSnippetExtension.ts +0 -205
- package/src/codeSnippet/CodeSnippetWidget.tsx +0 -109
- package/src/codeSnippet/__tests__/CodeSnippetExtension.test.ts +0 -95
- package/src/codeSnippet/__tests__/codeSnippetLanguages.test.ts +0 -50
- package/src/codeSnippet/codeSnippetCommands.ts +0 -21
- package/src/codeSnippet/codeSnippetData.ts +0 -43
- package/src/codeSnippet/codeSnippetLanguages.ts +0 -216
- package/src/customTemplates/AddBin.tsx +0 -126
- package/src/customTemplates/CustomLayoutManager.tsx +0 -234
- package/src/customTemplates/CustomTemplateContext.tsx +0 -188
- package/src/customTemplates/LayerToolbar.tsx +0 -580
- package/src/customTemplates/ShapeGlyph.tsx +0 -47
- package/src/customTemplates/TemplateDesigner.tsx +0 -433
- package/src/customTemplates/__tests__/library.test.ts +0 -96
- package/src/customTemplates/__tests__/normalizePositions.test.ts +0 -109
- package/src/customTemplates/__tests__/shapeDefs.test.ts +0 -49
- package/src/customTemplates/__tests__/useMemoryLayerAdapter.test.ts +0 -108
- package/src/customTemplates/designer.css +0 -732
- package/src/customTemplates/index.ts +0 -31
- package/src/customTemplates/library.ts +0 -110
- package/src/customTemplates/normalizePositions.ts +0 -75
- package/src/customTemplates/shapeDefs.ts +0 -131
- package/src/customTemplates/thumbnail.tsx +0 -63
- package/src/customTemplates/tokenDefs.ts +0 -60
- package/src/customTemplates/useDocCustomTemplates.ts +0 -52
- package/src/customTemplates/useMemoryLayerAdapter.ts +0 -129
- package/src/customThemes/CustomThemeContext.tsx +0 -185
- package/src/customThemes/CustomThemeDialog.tsx +0 -316
- package/src/customThemes/ImportThemeSection.tsx +0 -178
- package/src/customThemes/__tests__/CustomThemeContext.test.tsx +0 -64
- package/src/customThemes/__tests__/CustomThemeDialog.test.tsx +0 -47
- package/src/customThemes/__tests__/customThemeLibrary.test.ts +0 -60
- package/src/customThemes/__tests__/importThemeSection.test.tsx +0 -192
- package/src/customThemes/customThemeLibrary.ts +0 -100
- package/src/customThemes/index.ts +0 -37
- package/src/customThemes/themeControls.tsx +0 -229
- package/src/customThemes/themeDraft.ts +0 -288
- package/src/customThemes/useDocCustomThemes.ts +0 -49
- package/src/detectMarkdown.ts +0 -62
- package/src/diagram/DiagramCanvas.tsx +0 -260
- package/src/diagram/DiagramMaximizedOverlay.tsx +0 -46
- package/src/diagram/diagramCommands.ts +0 -604
- package/src/diagram/diagramConstants.ts +0 -17
- package/src/diagram/types.ts +0 -35
- package/src/editorScrollSync.ts +0 -73
- package/src/embeddedMedia.ts +0 -78
- package/src/emojiData.ts +0 -1317
- package/src/fileKind.ts +0 -158
- package/src/find/FindHighlightExtension.ts +0 -81
- package/src/find/FindToolbar.tsx +0 -314
- package/src/find/findModel.ts +0 -77
- package/src/frontmatter.ts +0 -29
- package/src/frontmatterSettings.ts +0 -23
- package/src/headingTransition.ts +0 -291
- package/src/hooks/useFileDrop.ts +0 -266
- package/src/imageEditor/CanvasSurface.tsx +0 -703
- package/src/imageEditor/ImageVersionHistoryDropdown.tsx +0 -396
- package/src/imageEditor/LayersPanel.tsx +0 -218
- package/src/imageEditor/PropertiesPanel.tsx +0 -474
- package/src/imageEditor/Toolbar.tsx +0 -459
- package/src/imageEditor/createShapeLayer.ts +0 -280
- package/src/imageEditor/icons.tsx +0 -68
- package/src/imageEditor/image-editor.css +0 -574
- package/src/imageEditor/layers/EditorImageLayer.tsx +0 -45
- package/src/imageEditor/layers/EditorShapeLayer.tsx +0 -62
- package/src/imageEditor/layers/EditorTextLayer.tsx +0 -45
- package/src/imageEditor/layers/SelectionHandles.tsx +0 -86
- package/src/imageEditor/state.ts +0 -173
- package/src/imageEditor/useImageEditor.ts +0 -385
- package/src/imageEditor/useImageEditorTokens.ts +0 -70
- package/src/index.ts +0 -559
- package/src/jsonEditor/EmbeddedRichTextField.tsx +0 -81
- package/src/jsonEditor/JsonEditor.tsx +0 -81
- package/src/jsonEditor/JsonEditorContext.tsx +0 -81
- package/src/jsonEditor/RenderNode.tsx +0 -87
- package/src/jsonEditor/editors.tsx +0 -745
- package/src/jsonEditor/index.ts +0 -2
- package/src/jsonEditor/json-editor.css +0 -463
- package/src/jsonEditor/useJsonEditorTokens.ts +0 -33
- package/src/markdownCodeFence.ts +0 -72
- package/src/mediaDragMime.ts +0 -32
- package/src/mediaEntries.ts +0 -12
- package/src/mediaReferences.ts +0 -301
- package/src/mermaid/MermaidDiagramCanvas.tsx +0 -693
- package/src/mermaid/MermaidDiagramExtension.ts +0 -243
- package/src/mermaid/MermaidDiagramTypeThumbnail.tsx +0 -184
- package/src/mermaid/MermaidDiagramWidget.tsx +0 -653
- package/src/mermaid/MermaidShapePalette.tsx +0 -245
- package/src/mermaid/__tests__/MermaidDiagramExtension.test.ts +0 -361
- package/src/mermaid/__tests__/mermaidDiagramTypes.test.ts +0 -35
- package/src/mermaid/__tests__/mermaidRenderer.test.ts +0 -49
- package/src/mermaid/__tests__/mermaidSourceOps.test.ts +0 -213
- package/src/mermaid/__tests__/mermaidSyntax.test.ts +0 -71
- package/src/mermaid/mermaidCommands.ts +0 -34
- package/src/mermaid/mermaidData.ts +0 -31
- package/src/mermaid/mermaidDiagramTypes.ts +0 -325
- package/src/mermaid/mermaidModel.ts +0 -31
- package/src/mermaid/mermaidRenderer.ts +0 -181
- package/src/mermaid/mermaidShapes.ts +0 -113
- package/src/mermaid/mermaidSourceOps.ts +0 -454
- package/src/monaco.ts +0 -35
- package/src/monacoWorkers.ts +0 -89
- package/src/outlineSource.ts +0 -171
- package/src/presentation/PresentationMode.tsx +0 -596
- package/src/rawEditorIsolation.ts +0 -18
- package/src/recorder/RecorderButton.tsx +0 -80
- package/src/recorder/RecorderModal.tsx +0 -706
- package/src/recorder/RecorderPanel.tsx +0 -77
- package/src/recorder/formats.ts +0 -159
- package/src/recorder/hooks/useMediaRecorder.ts +0 -436
- package/src/recorder/hooks/useStreamPreview.ts +0 -47
- package/src/recorder/insertMediaBlock.ts +0 -30
- package/src/recorder/sources/cameraStream.ts +0 -32
- package/src/recorder/sources/micStream.ts +0 -25
- package/src/recorder/sources/screenStream.ts +0 -162
- package/src/recorder/timingJson.ts +0 -66
- package/src/resolveBlockVisual.ts +0 -39
- package/src/scene/Scene.tsx +0 -647
- package/src/scene/SceneBlockExtension.ts +0 -205
- package/src/scene/SceneBlockToolbar.tsx +0 -216
- package/src/scene/SceneBlockWidget.tsx +0 -441
- package/src/scene/ScenePropsBar.tsx +0 -85
- package/src/scene/SceneSelection.tsx +0 -111
- package/src/scene/SceneSideToolbar.tsx +0 -89
- package/src/scene/SceneViewControls.tsx +0 -43
- package/src/scene/SceneViewport.tsx +0 -106
- package/src/scene/ShapePalette.tsx +0 -196
- package/src/scene/__tests__/DiagramAdapter.test.ts +0 -142
- package/src/scene/__tests__/SceneBlockExtension.test.ts +0 -33
- package/src/scene/__tests__/bezierEdit.test.ts +0 -85
- package/src/scene/__tests__/blockLayers.test.ts +0 -57
- package/src/scene/__tests__/fitScale.test.ts +0 -19
- package/src/scene/__tests__/sceneIsolation.test.tsx +0 -119
- package/src/scene/__tests__/shapeLayers.test.ts +0 -106
- package/src/scene/__tests__/useSceneHitTest.test.ts +0 -90
- package/src/scene/__tests__/useScenePanZoom.test.ts +0 -130
- package/src/scene/adapters/DiagramAdapter.ts +0 -79
- package/src/scene/adapters/DrawingAdapter.ts +0 -420
- package/src/scene/adapters/LayoutAdapter.ts +0 -313
- package/src/scene/adapters/blockLayers.ts +0 -159
- package/src/scene/commands/SceneCommand.ts +0 -84
- package/src/scene/commands/drawingCommands.ts +0 -318
- package/src/scene/commands/layoutCommands.ts +0 -301
- package/src/scene/fitScale.ts +0 -17
- package/src/scene/hooks/useSceneHitTest.ts +0 -105
- package/src/scene/hooks/useScenePanZoom.ts +0 -154
- package/src/scene/hooks/useSceneSelection.ts +0 -62
- package/src/scene/index.ts +0 -90
- package/src/scene/layers/DiagramEdges.tsx +0 -142
- package/src/scene/layers/edgeGeometry.ts +0 -104
- package/src/scene/layers/nodeCard.tsx +0 -164
- package/src/scene/layers/renderLayer.tsx +0 -70
- package/src/scene/layers/shapeLayers.ts +0 -201
- package/src/scene/paths/bezierEdit.ts +0 -208
- package/src/scene/scene.css +0 -874
- package/src/scene/text/SceneTextOverlay.tsx +0 -161
- package/src/scene/text/sceneTextChannel.ts +0 -46
- package/src/scene/text/sceneTextConfig.ts +0 -31
- package/src/scene/text/sceneTiptap.ts +0 -36
- package/src/scene/text/useSceneTextEditing.ts +0 -39
- package/src/scene/tools/ConnectTool.ts +0 -209
- package/src/scene/tools/DrawingConnectTool.ts +0 -231
- package/src/scene/tools/PathTool.ts +0 -158
- package/src/scene/tools/PlaceTool.ts +0 -47
- package/src/scene/tools/SceneTool.ts +0 -85
- package/src/scene/tools/SelectTool.ts +0 -300
- package/src/scene/tools/ShapeTool.ts +0 -143
- package/src/scene/tools/TextTool.ts +0 -72
- package/src/scene/tools/TokenTool.ts +0 -95
- package/src/scene/tools/createDrawShapeTool.ts +0 -82
- package/src/selectionConversions.ts +0 -155
- package/src/styles/ascii-diagram.css +0 -79
- package/src/styles/ascii-timeline.css +0 -596
- package/src/styles/code-context.css +0 -155
- package/src/styles/code-snippet.css +0 -76
- package/src/styles/diagram.css +0 -183
- package/src/styles/editor.css +0 -7131
- package/src/styles/folder-view.css +0 -210
- package/src/styles/image-edit-affordance.css +0 -201
- package/src/styles/index.css +0 -20
- package/src/styles/mermaid-diagram.css +0 -487
- package/src/styles/tree-view.css +0 -189
- package/src/teleprompter/TeleprompterControls.tsx +0 -218
- package/src/teleprompter/TeleprompterSelfView.tsx +0 -22
- package/src/teleprompter/TeleprompterSurface.tsx +0 -267
- package/src/teleprompter/TeleprompterView.tsx +0 -338
- package/src/teleprompter/canvasRenderer.ts +0 -161
- package/src/teleprompter/floatingWindow.ts +0 -352
- package/src/teleprompter/index.ts +0 -61
- package/src/teleprompter/pcmWorklet.ts +0 -62
- package/src/teleprompter/recording/insertPreamble.ts +0 -80
- package/src/teleprompter/recording/narrationSave.ts +0 -134
- package/src/teleprompter/recording/useNarrationRecorder.ts +0 -367
- package/src/teleprompter/scrollModel.ts +0 -85
- package/src/teleprompter/teleprompterTheme.ts +0 -303
- package/src/teleprompter/types.ts +0 -38
- package/src/teleprompter/useFloatingWindow.ts +0 -74
- package/src/teleprompter/useMicAnalysis.ts +0 -211
- package/src/teleprompter/useTeleprompter.ts +0 -421
- package/src/templateContentPreviewResolver.ts +0 -360
- package/src/timeline/TimelineEditorWidget.tsx +0 -861
- package/src/timeline/TimelineViewExtension.ts +0 -252
- package/src/timeline/__tests__/TimelineEditorWidget.test.tsx +0 -414
- package/src/timeline/__tests__/TimelineViewExtension.test.ts +0 -163
- package/src/timeline/__tests__/timelineCommands.test.ts +0 -359
- package/src/timeline/__tests__/timelineOps.test.ts +0 -277
- package/src/timeline/__tests__/timelinePaste.test.ts +0 -34
- package/src/timeline/timelineCommands.ts +0 -421
- package/src/timeline/timelineData.ts +0 -54
- package/src/timeline/timelineOps.ts +0 -381
- package/src/timeline/timelinePaste.ts +0 -8
- package/src/timelineSource.ts +0 -244
- package/src/tiptap/TiptapAudio.tsx +0 -86
- package/src/tiptap/TiptapVideo.tsx +0 -119
- package/src/tiptap/useResolvedMediaSrc.ts +0 -47
- package/src/tiptapBridge.ts +0 -986
- package/src/tooltipPlacement.ts +0 -13
- package/src/transformStyleId.ts +0 -17
- package/src/transitionCatalog.ts +0 -159
- package/src/treeview/TreeOutlineWidget.tsx +0 -390
- package/src/treeview/TreeViewExtension.ts +0 -250
- package/src/treeview/__tests__/TreeOutlineWidget.test.tsx +0 -156
- package/src/treeview/__tests__/TreeViewExtension.test.ts +0 -122
- package/src/treeview/__tests__/treeOps.test.ts +0 -177
- package/src/treeview/__tests__/treePaste.test.ts +0 -40
- package/src/treeview/__tests__/treeViewCommands.test.ts +0 -179
- package/src/treeview/treeOps.ts +0 -231
- package/src/treeview/treePaste.ts +0 -13
- package/src/treeview/treeViewCommands.ts +0 -99
- package/src/treeview/treeViewData.ts +0 -41
- package/src/types/monaco-shims.d.ts +0 -10
- package/src/useBlockNavigator.ts +0 -153
- package/src/useHeadingLayout.ts +0 -294
- package/src/useMonacoLoader.ts +0 -82
- package/src/useTimelineClock.ts +0 -76
- package/src/utils/collectInlineFontAwesomeCss.ts +0 -69
- package/src/utils/dropUtils.ts +0 -136
- package/src/utils/normalizeMalformedAssetUrl.ts +0 -22
- package/src/writeCanvasSettings.ts +0 -30
- package/src/wysiwygImageUpload.ts +0 -113
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DiagramCanvas — thin wrapper around the Squisq Scene engine.
|
|
3
|
-
*
|
|
4
|
-
* Translates between the diagram's command vocabulary (which the host
|
|
5
|
-
* `DiagramWidget` translates into Tiptap mutations) and the Scene's
|
|
6
|
-
* generic SceneCommand vocabulary. The Scene itself owns viewport
|
|
7
|
-
* pan/zoom, selection, hit-testing, and tool dispatch.
|
|
8
|
-
*
|
|
9
|
-
* Diagram nodes are rendered as synthetic card+label Layer pairs
|
|
10
|
-
* (`nodeCard.tsx`) so what you see in the editor is the same Layer
|
|
11
|
-
* schema the SSR `diagramBlock.ts` template emits. Edges are drawn by
|
|
12
|
-
* `<DiagramEdges>` as a separate background layer.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
16
|
-
import {
|
|
17
|
-
Scene,
|
|
18
|
-
buildDiagramScene,
|
|
19
|
-
nodeIdFromCardLayerId,
|
|
20
|
-
diagramLayerFollows,
|
|
21
|
-
DiagramEdges,
|
|
22
|
-
type SceneCommand,
|
|
23
|
-
} from '../scene';
|
|
24
|
-
import type { SceneTextEditConfig } from '../scene/text/sceneTextConfig';
|
|
25
|
-
import type { SceneTextChannel } from '../scene/text/sceneTextChannel';
|
|
26
|
-
import { markdownToTiptap } from '../tiptapBridge';
|
|
27
|
-
import type { DiagramNode, DiagramEdge } from './types';
|
|
28
|
-
import { DIAGRAM_VIEWPORT, DIAGRAM_TOOLS } from './diagramConstants';
|
|
29
|
-
|
|
30
|
-
export type DiagramCommand =
|
|
31
|
-
| { kind: 'moveNode'; nodeId: string; x: number; y: number }
|
|
32
|
-
| {
|
|
33
|
-
kind: 'resizeNode';
|
|
34
|
-
nodeId: string;
|
|
35
|
-
width: number;
|
|
36
|
-
height: number;
|
|
37
|
-
x?: number;
|
|
38
|
-
y?: number;
|
|
39
|
-
}
|
|
40
|
-
| { kind: 'addConnection'; source: string; target: string; type?: string }
|
|
41
|
-
| { kind: 'removeConnection'; source: string; target: string; type?: string }
|
|
42
|
-
| { kind: 'renameNode'; nodeId: string; newLabel: string }
|
|
43
|
-
| { kind: 'addNode'; x: number; y: number }
|
|
44
|
-
| { kind: 'removeNode'; nodeId: string };
|
|
45
|
-
|
|
46
|
-
interface DiagramCanvasProps {
|
|
47
|
-
nodes: DiagramNode[];
|
|
48
|
-
edges: DiagramEdge[];
|
|
49
|
-
onCommand: (cmd: DiagramCommand) => void;
|
|
50
|
-
/** When true, render the maximize button. Click toggles `onToggleMaximize`. */
|
|
51
|
-
showMaximize?: boolean;
|
|
52
|
-
/** Whether the canvas is currently maximized (affects button icon). */
|
|
53
|
-
maximized?: boolean;
|
|
54
|
-
/** Callback when the maximize button is clicked. */
|
|
55
|
-
onToggleMaximize?: () => void;
|
|
56
|
-
/**
|
|
57
|
-
* Active tool id, controlled by the host (DiagramWidget) so the tool
|
|
58
|
-
* buttons can live in the shared toolbar above the canvas. Falls back
|
|
59
|
-
* to internal state when omitted.
|
|
60
|
-
*/
|
|
61
|
-
activeToolId?: string;
|
|
62
|
-
onActiveToolIdChange?: (id: string) => void;
|
|
63
|
-
/** Forwarded to the Scene so the host can drive a Delete action. */
|
|
64
|
-
onSelectionChange?: (ids: ReadonlySet<string>) => void;
|
|
65
|
-
/** Per-editor toolbar bridge for detached scene roots. */
|
|
66
|
-
textChannel?: SceneTextChannel;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const TOOLS = DIAGRAM_TOOLS;
|
|
70
|
-
|
|
71
|
-
export function DiagramCanvas({
|
|
72
|
-
nodes: incomingNodes,
|
|
73
|
-
edges: incomingEdges,
|
|
74
|
-
onCommand,
|
|
75
|
-
showMaximize = true,
|
|
76
|
-
maximized = false,
|
|
77
|
-
onToggleMaximize,
|
|
78
|
-
activeToolId: controlledToolId,
|
|
79
|
-
onActiveToolIdChange,
|
|
80
|
-
onSelectionChange,
|
|
81
|
-
textChannel,
|
|
82
|
-
}: DiagramCanvasProps) {
|
|
83
|
-
const scene = useMemo(
|
|
84
|
-
() => buildDiagramScene(incomingNodes, incomingEdges),
|
|
85
|
-
[incomingNodes, incomingEdges],
|
|
86
|
-
);
|
|
87
|
-
// Track the active tool so we can keep selection when the user toggles
|
|
88
|
-
// back to Select after using Connect. Controlled by the host when it
|
|
89
|
-
// owns the shared toolbar; falls back to internal state otherwise.
|
|
90
|
-
const [internalToolId, setInternalToolId] = useState<string>('select');
|
|
91
|
-
const activeToolId = controlledToolId ?? internalToolId;
|
|
92
|
-
const setActiveToolId = onActiveToolIdChange ?? setInternalToolId;
|
|
93
|
-
|
|
94
|
-
// Translate generic SceneCommand → diagram-specific DiagramCommand,
|
|
95
|
-
// then hand off to the host (DiagramWidget) which writes to Tiptap.
|
|
96
|
-
const handleSceneCommand = useCallback(
|
|
97
|
-
(cmd: SceneCommand) => {
|
|
98
|
-
switch (cmd.kind) {
|
|
99
|
-
case 'moveLayer': {
|
|
100
|
-
// Only the node-card layer carries the position; ignore drag
|
|
101
|
-
// commits on the label layer (it'd duplicate the write).
|
|
102
|
-
if (!cmd.id.startsWith('node-card-')) return;
|
|
103
|
-
const nodeId = nodeIdFromCardLayerId(cmd.id);
|
|
104
|
-
if (!nodeId) return;
|
|
105
|
-
onCommand({ kind: 'moveNode', nodeId, x: cmd.x, y: cmd.y });
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
case 'addEdge':
|
|
109
|
-
onCommand({
|
|
110
|
-
kind: 'addConnection',
|
|
111
|
-
source: cmd.source,
|
|
112
|
-
target: cmd.target,
|
|
113
|
-
type: cmd.type,
|
|
114
|
-
});
|
|
115
|
-
return;
|
|
116
|
-
case 'removeEdge':
|
|
117
|
-
onCommand({
|
|
118
|
-
kind: 'removeConnection',
|
|
119
|
-
source: cmd.source,
|
|
120
|
-
target: cmd.target,
|
|
121
|
-
type: cmd.type,
|
|
122
|
-
});
|
|
123
|
-
return;
|
|
124
|
-
case 'removeLayer': {
|
|
125
|
-
const nodeId = nodeIdFromCardLayerId(cmd.id);
|
|
126
|
-
if (nodeId) onCommand({ kind: 'removeNode', nodeId });
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
case 'renameLayer': {
|
|
130
|
-
const nodeId = nodeIdFromCardLayerId(cmd.id);
|
|
131
|
-
if (nodeId) onCommand({ kind: 'renameNode', nodeId, newLabel: cmd.label });
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
case 'setLayerText': {
|
|
135
|
-
// Diagram node labels persist as heading text (markdown inline
|
|
136
|
-
// marks); the rich `html` is not stored separately.
|
|
137
|
-
const nodeId = nodeIdFromCardLayerId(cmd.id);
|
|
138
|
-
if (nodeId) onCommand({ kind: 'renameNode', nodeId, newLabel: cmd.text });
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
case 'addLayer': {
|
|
142
|
-
// Diagram mode interprets addLayer as "add a node at the layer's
|
|
143
|
-
// position". The Scene's empty-state "add" button and any future
|
|
144
|
-
// double-click handler dispatch this.
|
|
145
|
-
const pos = cmd.layer.position;
|
|
146
|
-
const x = typeof pos.x === 'number' ? pos.x : 0;
|
|
147
|
-
const y = typeof pos.y === 'number' ? pos.y : 0;
|
|
148
|
-
onCommand({ kind: 'addNode', x, y });
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
case 'resizeLayer': {
|
|
152
|
-
if (!cmd.id.startsWith('node-card-')) return;
|
|
153
|
-
const nodeId = nodeIdFromCardLayerId(cmd.id);
|
|
154
|
-
if (!nodeId) return;
|
|
155
|
-
onCommand({
|
|
156
|
-
kind: 'resizeNode',
|
|
157
|
-
nodeId,
|
|
158
|
-
width: cmd.width,
|
|
159
|
-
height: cmd.height,
|
|
160
|
-
...(cmd.x !== undefined ? { x: cmd.x } : {}),
|
|
161
|
-
...(cmd.y !== undefined ? { y: cmd.y } : {}),
|
|
162
|
-
});
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
case 'setLayerAttr':
|
|
166
|
-
// Diagram nodes don't expose generic attr writes; renames go
|
|
167
|
-
// through `renameLayer` and positions through move/resize.
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
const _exhaustive: never = cmd;
|
|
171
|
-
void _exhaustive;
|
|
172
|
-
},
|
|
173
|
-
[onCommand],
|
|
174
|
-
);
|
|
175
|
-
|
|
176
|
-
// Edges render in the renderExtras callback so they sit behind the
|
|
177
|
-
// node cards (which the Scene renders itself).
|
|
178
|
-
const nodesForExtras = scene.nodes;
|
|
179
|
-
const edgesForExtras = scene.edges;
|
|
180
|
-
const renderExtras = useCallback(
|
|
181
|
-
() => <DiagramEdges nodes={nodesForExtras} edges={edgesForExtras} />,
|
|
182
|
-
[nodesForExtras, edgesForExtras],
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
// Inline label editing: double-click a node card to edit its label.
|
|
186
|
-
// Labels persist as the node's heading text (inline markdown marks), so
|
|
187
|
-
// the editor is `inline` level. Refs keep the config stable.
|
|
188
|
-
const incomingNodesRef = useRef(incomingNodes);
|
|
189
|
-
incomingNodesRef.current = incomingNodes;
|
|
190
|
-
const textConfig = useMemo<SceneTextEditConfig>(
|
|
191
|
-
() => ({
|
|
192
|
-
channel: textChannel,
|
|
193
|
-
resolveEditableId: (id) => (nodeIdFromCardLayerId(id) ? id : null),
|
|
194
|
-
getHtml: (id) => {
|
|
195
|
-
const nodeId = nodeIdFromCardLayerId(id);
|
|
196
|
-
const node = incomingNodesRef.current.find((n) => n.id === nodeId);
|
|
197
|
-
return markdownToTiptap(node?.data.label ?? '');
|
|
198
|
-
},
|
|
199
|
-
commit: (id, { text }) => {
|
|
200
|
-
// Node labels persist as plain heading text for now (rich marks on
|
|
201
|
-
// labels are a follow-up — the rendering foundation is in place).
|
|
202
|
-
handleSceneCommand({ kind: 'renameLayer', id, label: text });
|
|
203
|
-
},
|
|
204
|
-
level: 'inline',
|
|
205
|
-
}),
|
|
206
|
-
[handleSceneCommand, textChannel],
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
return (
|
|
210
|
-
<div className="squisq-diagram-canvas">
|
|
211
|
-
<Scene
|
|
212
|
-
viewport={DIAGRAM_VIEWPORT}
|
|
213
|
-
layers={scene.layers}
|
|
214
|
-
edges={scene.edges}
|
|
215
|
-
tools={TOOLS}
|
|
216
|
-
activeToolId={activeToolId}
|
|
217
|
-
onActiveToolIdChange={setActiveToolId}
|
|
218
|
-
onSelectionChange={onSelectionChange}
|
|
219
|
-
onCommand={handleSceneCommand}
|
|
220
|
-
renderExtras={renderExtras}
|
|
221
|
-
layerFollows={diagramLayerFollows}
|
|
222
|
-
showMaximize={showMaximize}
|
|
223
|
-
maximized={maximized}
|
|
224
|
-
onToggleMaximize={onToggleMaximize}
|
|
225
|
-
showViewControls
|
|
226
|
-
showToolbar={false}
|
|
227
|
-
textEditing={textConfig}
|
|
228
|
-
/>
|
|
229
|
-
{scene.nodes.length === 0 && (
|
|
230
|
-
<DiagramEmptyState
|
|
231
|
-
onAdd={() => {
|
|
232
|
-
// Place the first node at the center of the viewport's
|
|
233
|
-
// logical surface; the Scene's fit-on-mount keeps it visible.
|
|
234
|
-
onCommand({
|
|
235
|
-
kind: 'addNode',
|
|
236
|
-
x: DIAGRAM_VIEWPORT.width / 2 - 90,
|
|
237
|
-
y: DIAGRAM_VIEWPORT.height / 2 - 32,
|
|
238
|
-
});
|
|
239
|
-
}}
|
|
240
|
-
/>
|
|
241
|
-
)}
|
|
242
|
-
</div>
|
|
243
|
-
);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
function DiagramEmptyState({ onAdd }: { onAdd: () => void }) {
|
|
247
|
-
return (
|
|
248
|
-
<div className="squisq-diagram-empty">
|
|
249
|
-
<div className="squisq-diagram-empty-title">No diagram nodes yet</div>
|
|
250
|
-
<div className="squisq-diagram-empty-hint">
|
|
251
|
-
Click "+ Add first node" below, or add sub-headings under this block.
|
|
252
|
-
</div>
|
|
253
|
-
<button type="button" className="squisq-diagram-empty-btn" onClick={onAdd}>
|
|
254
|
-
+ Add first node
|
|
255
|
-
</button>
|
|
256
|
-
</div>
|
|
257
|
-
);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
export default DiagramCanvas;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DiagramMaximizedOverlay — full-editor overlay that hosts the diagram
|
|
3
|
-
* canvas when the user clicks the maximize button.
|
|
4
|
-
*
|
|
5
|
-
* Positions over the closest `position: relative` / `position: absolute`
|
|
6
|
-
* ancestor (in practice, the editor shell's root). `Esc` and an overlay
|
|
7
|
-
* close button both call `onClose`.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { useEffect } from 'react';
|
|
11
|
-
import { createPortal } from 'react-dom';
|
|
12
|
-
|
|
13
|
-
interface DiagramMaximizedOverlayProps {
|
|
14
|
-
/** DOM node to portal into. Falls back to document.body. */
|
|
15
|
-
host?: HTMLElement | null;
|
|
16
|
-
/** Closes the overlay (e.g., returns to inline view). */
|
|
17
|
-
onClose: () => void;
|
|
18
|
-
children: React.ReactNode;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function DiagramMaximizedOverlay({ host, onClose, children }: DiagramMaximizedOverlayProps) {
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
const onKey = (e: KeyboardEvent) => {
|
|
24
|
-
if (e.key === 'Escape') {
|
|
25
|
-
e.preventDefault();
|
|
26
|
-
onClose();
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
document.addEventListener('keydown', onKey);
|
|
30
|
-
return () => {
|
|
31
|
-
document.removeEventListener('keydown', onKey);
|
|
32
|
-
};
|
|
33
|
-
}, [onClose]);
|
|
34
|
-
|
|
35
|
-
const target = host ?? (typeof document !== 'undefined' ? document.body : null);
|
|
36
|
-
if (!target) return null;
|
|
37
|
-
|
|
38
|
-
return createPortal(
|
|
39
|
-
<div className="squisq-diagram-maximized-overlay">
|
|
40
|
-
<div className="squisq-diagram-maximized-content">{children}</div>
|
|
41
|
-
</div>,
|
|
42
|
-
target,
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export default DiagramMaximizedOverlay;
|