@bendyline/squisq-editor-react 2.1.0 → 2.3.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/chunk-54UGTQBO.js +862 -0
- package/dist/chunk-5JMHFAVW.js +2408 -0
- package/dist/chunk-5Q4JN4I5.js +132 -0
- package/dist/chunk-6VDYKI3L.js +49 -0
- package/dist/chunk-GS7QWYFT.js +9 -0
- package/dist/chunk-MJJK7YQB.js +949 -0
- package/dist/chunk-NITZVAXL.js +986 -0
- package/dist/chunk-TRCKHRBS.js +35234 -0
- package/dist/chunk-V44VP242.js +3256 -0
- package/dist/image-editor/index.d.ts +223 -0
- package/dist/image-editor/index.js +15 -0
- package/dist/index.d.ts +2060 -4040
- package/dist/index.js +496 -40014
- package/dist/json-editor/index.d.ts +27 -0
- package/dist/json-editor/index.js +7 -0
- package/dist/monaco.d.ts +1 -1
- package/dist/monaco.js +1 -2
- package/dist/recorder/index.d.ts +407 -0
- package/dist/recorder/index.js +43 -0
- package/dist/shell/index.d.ts +9 -0
- package/dist/shell/index.js +22 -0
- package/dist/shell-BxSCBm4H.d.ts +1064 -0
- package/dist/styles/index.css +598 -161
- package/dist/teleprompter/index.d.ts +497 -0
- package/dist/teleprompter/index.js +57 -0
- package/package.json +34 -8
- 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
package/src/blockTagActivity.ts
DELETED
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { Extension } from '@tiptap/core';
|
|
2
|
-
import { Plugin, PluginKey, type Transaction } from '@tiptap/pm/state';
|
|
3
|
-
import { Decoration, DecorationSet, type EditorView as ProseMirrorView } from '@tiptap/pm/view';
|
|
4
|
-
import type { Node as ProseMirrorNode } from '@tiptap/pm/model';
|
|
5
|
-
|
|
6
|
-
export const BLOCK_TAG_SELECTED_CLASS = 'squisq-block-tags--selected';
|
|
7
|
-
export const BLOCK_TAG_HOVERED_CLASS = 'squisq-block-tags--hovered';
|
|
8
|
-
|
|
9
|
-
export interface BlockTagActivityPluginState {
|
|
10
|
-
selectedPosition: number | null;
|
|
11
|
-
hoveredPosition: number | null;
|
|
12
|
-
decorations: DecorationSet;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface BlockTagHoverMeta {
|
|
16
|
-
hoveredPosition: number | null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export const BLOCK_TAG_ACTIVITY_KEY = new PluginKey<BlockTagActivityPluginState>(
|
|
20
|
-
'squisq-block-tag-activity',
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
function isHeadingElement(element: Element): element is HTMLElement {
|
|
24
|
-
return /^H[1-6]$/.test(element.tagName);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Returns the heading position for the block owning a document position.
|
|
29
|
-
* A block begins at a top-level heading and continues until the next heading.
|
|
30
|
-
*/
|
|
31
|
-
export function findOwningHeadingPosition(doc: ProseMirrorNode, position: number): number | null {
|
|
32
|
-
let offset = 0;
|
|
33
|
-
let owningPosition: number | null = null;
|
|
34
|
-
|
|
35
|
-
for (let index = 0; index < doc.childCount && offset <= position; index += 1) {
|
|
36
|
-
const node = doc.child(index);
|
|
37
|
-
if (node.type.name === 'heading') owningPosition = offset;
|
|
38
|
-
offset += node.nodeSize;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return owningPosition;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** Find the preceding top-level heading for a DOM node under ProseMirror. */
|
|
45
|
-
export function findOwningHeadingElement(
|
|
46
|
-
editorDom: HTMLElement,
|
|
47
|
-
target: EventTarget | null,
|
|
48
|
-
): HTMLElement | null {
|
|
49
|
-
if (!(target instanceof Node)) return null;
|
|
50
|
-
|
|
51
|
-
let element =
|
|
52
|
-
target.nodeType === Node.ELEMENT_NODE
|
|
53
|
-
? (target as HTMLElement)
|
|
54
|
-
: (target.parentElement as HTMLElement | null);
|
|
55
|
-
if (!element || element === editorDom || !editorDom.contains(element)) return null;
|
|
56
|
-
|
|
57
|
-
while (element.parentElement && element.parentElement !== editorDom) {
|
|
58
|
-
element = element.parentElement;
|
|
59
|
-
}
|
|
60
|
-
if (element.parentElement !== editorDom) return null;
|
|
61
|
-
|
|
62
|
-
let candidate: Element | null = element;
|
|
63
|
-
while (candidate && !isHeadingElement(candidate)) {
|
|
64
|
-
candidate = candidate.previousElementSibling;
|
|
65
|
-
}
|
|
66
|
-
return candidate && isHeadingElement(candidate) ? candidate : null;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Resolve blank canvas space to the heading-defined block at that vertical
|
|
71
|
-
* position. Margins between top-level nodes are not owned by either node in
|
|
72
|
-
* the DOM, so pointer events there target the ProseMirror root. Treating the
|
|
73
|
-
* root as "no block" makes active-only tags disappear while the pointer
|
|
74
|
-
* crosses ordinary paragraph/list spacing.
|
|
75
|
-
*/
|
|
76
|
-
export function findOwningHeadingElementAtPoint(
|
|
77
|
-
editorDom: HTMLElement,
|
|
78
|
-
target: EventTarget | null,
|
|
79
|
-
clientY: number,
|
|
80
|
-
): HTMLElement | null {
|
|
81
|
-
const direct = findOwningHeadingElement(editorDom, target);
|
|
82
|
-
if (direct) return direct;
|
|
83
|
-
if (!(target instanceof Node) || !editorDom.contains(target) || !Number.isFinite(clientY)) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const children = Array.from(editorDom.children);
|
|
88
|
-
const lastChild = children[children.length - 1];
|
|
89
|
-
if (!lastChild || clientY > lastChild.getBoundingClientRect().bottom) return null;
|
|
90
|
-
|
|
91
|
-
let owningHeading: HTMLElement | null = null;
|
|
92
|
-
for (const child of children) {
|
|
93
|
-
if (child.getBoundingClientRect().top > clientY) break;
|
|
94
|
-
if (isHeadingElement(child)) owningHeading = child;
|
|
95
|
-
}
|
|
96
|
-
return owningHeading;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function validHeadingPosition(doc: ProseMirrorNode, position: number | null): number | null {
|
|
100
|
-
if (position === null) return null;
|
|
101
|
-
return doc.nodeAt(position)?.type.name === 'heading' ? position : null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function buildDecorations(
|
|
105
|
-
doc: ProseMirrorNode,
|
|
106
|
-
selectedPosition: number | null,
|
|
107
|
-
hoveredPosition: number | null,
|
|
108
|
-
): DecorationSet {
|
|
109
|
-
const classesByPosition = new Map<number, string[]>();
|
|
110
|
-
|
|
111
|
-
if (selectedPosition !== null) {
|
|
112
|
-
classesByPosition.set(selectedPosition, [BLOCK_TAG_SELECTED_CLASS]);
|
|
113
|
-
}
|
|
114
|
-
if (hoveredPosition !== null) {
|
|
115
|
-
const classes = classesByPosition.get(hoveredPosition) ?? [];
|
|
116
|
-
classes.push(BLOCK_TAG_HOVERED_CLASS);
|
|
117
|
-
classesByPosition.set(hoveredPosition, classes);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const decorations: Decoration[] = [];
|
|
121
|
-
for (const [position, classes] of classesByPosition) {
|
|
122
|
-
const node = doc.nodeAt(position);
|
|
123
|
-
if (!node || node.type.name !== 'heading') continue;
|
|
124
|
-
decorations.push(
|
|
125
|
-
Decoration.node(position, position + node.nodeSize, { class: classes.join(' ') }),
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return decorations.length > 0 ? DecorationSet.create(doc, decorations) : DecorationSet.empty;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function createPluginState(
|
|
133
|
-
doc: ProseMirrorNode,
|
|
134
|
-
selectionFrom: number,
|
|
135
|
-
hoveredPosition: number | null,
|
|
136
|
-
): BlockTagActivityPluginState {
|
|
137
|
-
const selectedPosition = findOwningHeadingPosition(doc, selectionFrom);
|
|
138
|
-
const validHoveredPosition = validHeadingPosition(doc, hoveredPosition);
|
|
139
|
-
return {
|
|
140
|
-
selectedPosition,
|
|
141
|
-
hoveredPosition: validHoveredPosition,
|
|
142
|
-
decorations: buildDecorations(doc, selectedPosition, validHoveredPosition),
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function nextHoveredPosition(
|
|
147
|
-
transaction: Transaction,
|
|
148
|
-
previousPosition: number | null,
|
|
149
|
-
doc: ProseMirrorNode,
|
|
150
|
-
): number | null {
|
|
151
|
-
const meta = transaction.getMeta(BLOCK_TAG_ACTIVITY_KEY) as BlockTagHoverMeta | undefined;
|
|
152
|
-
if (meta !== undefined) return validHeadingPosition(doc, meta.hoveredPosition);
|
|
153
|
-
if (!transaction.docChanged || previousPosition === null) return previousPosition;
|
|
154
|
-
|
|
155
|
-
const mapped = transaction.mapping.mapResult(previousPosition, 1);
|
|
156
|
-
return mapped.deleted ? null : validHeadingPosition(doc, mapped.pos);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
function headingPositionForTarget(
|
|
160
|
-
view: ProseMirrorView,
|
|
161
|
-
target: EventTarget | null,
|
|
162
|
-
clientY: number,
|
|
163
|
-
): number | null {
|
|
164
|
-
const heading = findOwningHeadingElementAtPoint(view.dom, target, clientY);
|
|
165
|
-
if (!heading) return null;
|
|
166
|
-
|
|
167
|
-
try {
|
|
168
|
-
const positionInsideHeading = view.posAtDOM(heading, 0);
|
|
169
|
-
return findOwningHeadingPosition(view.state.doc, positionInsideHeading);
|
|
170
|
-
} catch {
|
|
171
|
-
return null;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
function setHoveredPosition(view: ProseMirrorView, hoveredPosition: number | null): void {
|
|
176
|
-
const current = BLOCK_TAG_ACTIVITY_KEY.getState(view.state)?.hoveredPosition ?? null;
|
|
177
|
-
if (current === hoveredPosition) return;
|
|
178
|
-
view.dispatch(
|
|
179
|
-
view.state.tr
|
|
180
|
-
.setMeta(BLOCK_TAG_ACTIVITY_KEY, { hoveredPosition } satisfies BlockTagHoverMeta)
|
|
181
|
-
.setMeta('addToHistory', false),
|
|
182
|
-
);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* ProseMirror-owned block activity decorations. Using node decorations keeps
|
|
187
|
-
* the classes stable when ProseMirror reconciles its managed heading DOM.
|
|
188
|
-
*/
|
|
189
|
-
export const BlockTagActivityExtension = Extension.create({
|
|
190
|
-
name: 'squisqBlockTagActivity',
|
|
191
|
-
|
|
192
|
-
addProseMirrorPlugins() {
|
|
193
|
-
return [
|
|
194
|
-
new Plugin<BlockTagActivityPluginState>({
|
|
195
|
-
key: BLOCK_TAG_ACTIVITY_KEY,
|
|
196
|
-
state: {
|
|
197
|
-
init: (_config, state) => createPluginState(state.doc, state.selection.from, null),
|
|
198
|
-
apply: (transaction, previous, _oldState, newState) =>
|
|
199
|
-
createPluginState(
|
|
200
|
-
newState.doc,
|
|
201
|
-
newState.selection.from,
|
|
202
|
-
nextHoveredPosition(transaction, previous.hoveredPosition, newState.doc),
|
|
203
|
-
),
|
|
204
|
-
},
|
|
205
|
-
props: {
|
|
206
|
-
decorations(state) {
|
|
207
|
-
return this.getState(state)?.decorations ?? DecorationSet.empty;
|
|
208
|
-
},
|
|
209
|
-
handleDOMEvents: {
|
|
210
|
-
mouseover(view, event) {
|
|
211
|
-
setHoveredPosition(view, headingPositionForTarget(view, event.target, event.clientY));
|
|
212
|
-
return false;
|
|
213
|
-
},
|
|
214
|
-
mousemove(view, event) {
|
|
215
|
-
// `mouseover` covers real document nodes. Only track continuous
|
|
216
|
-
// movement while the root itself owns the pointer (the blank
|
|
217
|
-
// margin/gutter case), avoiding geometry reads over text.
|
|
218
|
-
if (event.target !== view.dom) return false;
|
|
219
|
-
setHoveredPosition(view, headingPositionForTarget(view, event.target, event.clientY));
|
|
220
|
-
return false;
|
|
221
|
-
},
|
|
222
|
-
mouseleave(view) {
|
|
223
|
-
setHoveredPosition(view, null);
|
|
224
|
-
return false;
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
}),
|
|
229
|
-
];
|
|
230
|
-
},
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
export default BlockTagActivityExtension;
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Build the text-first Document-mode projection for a transformed Doc.
|
|
3
|
-
*
|
|
4
|
-
* Transform-generated blocks are programmatic template inputs: unlike blocks
|
|
5
|
-
* parsed from Markdown, they do not carry `sourceHeading` / `contents` nodes.
|
|
6
|
-
* `docToMarkdown()` intentionally omits such blocks because its primary job is
|
|
7
|
-
* lossless authoring round-trips. For a summarized preview we instead give the
|
|
8
|
-
* generated blocks a temporary, readable authoring shape before serializing.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { docToMarkdown } from '@bendyline/squisq/doc';
|
|
12
|
-
import { stringifyMarkdown } from '@bendyline/squisq/markdown';
|
|
13
|
-
import type { MarkdownHeading, MarkdownParagraph } from '@bendyline/squisq/markdown';
|
|
14
|
-
import type { Block, Doc } from '@bendyline/squisq/schemas';
|
|
15
|
-
|
|
16
|
-
function textParagraph(value: string): MarkdownParagraph {
|
|
17
|
-
return { type: 'paragraph', children: [{ type: 'text', value }] };
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function textHeading(value: string, depth: 1 | 2 = 2): MarkdownHeading {
|
|
21
|
-
return { type: 'heading', depth, children: [{ type: 'text', value }] };
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function stringValue(record: Record<string, unknown>, key: string): string | undefined {
|
|
25
|
-
const value = record[key];
|
|
26
|
-
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function stringList(record: Record<string, unknown>, key: string): string[] {
|
|
30
|
-
const value = record[key];
|
|
31
|
-
if (!Array.isArray(value)) return [];
|
|
32
|
-
return value.filter((item): item is string => typeof item === 'string' && !!item.trim());
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
interface ReadableBlockContent {
|
|
36
|
-
title?: string;
|
|
37
|
-
body: string[];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Extract the reader-facing copy carried by a programmatic template block. */
|
|
41
|
-
function readableTemplateContent(block: Block): ReadableBlockContent {
|
|
42
|
-
const value = block as unknown as Record<string, unknown>;
|
|
43
|
-
const template = stringValue(value, 'template');
|
|
44
|
-
const explicitTitle = stringValue(value, 'title');
|
|
45
|
-
|
|
46
|
-
switch (template) {
|
|
47
|
-
case 'statHighlight':
|
|
48
|
-
return {
|
|
49
|
-
title: stringValue(value, 'stat') ?? explicitTitle,
|
|
50
|
-
body: [stringValue(value, 'description')].filter(Boolean) as string[],
|
|
51
|
-
};
|
|
52
|
-
case 'factCard':
|
|
53
|
-
return {
|
|
54
|
-
title: stringValue(value, 'fact') ?? explicitTitle,
|
|
55
|
-
body: [stringValue(value, 'explanation')].filter(Boolean) as string[],
|
|
56
|
-
};
|
|
57
|
-
case 'quote':
|
|
58
|
-
return {
|
|
59
|
-
title: stringValue(value, 'quote') ?? explicitTitle,
|
|
60
|
-
body: [stringValue(value, 'attribution')].filter(Boolean) as string[],
|
|
61
|
-
};
|
|
62
|
-
case 'fullBleedQuote':
|
|
63
|
-
case 'pullQuote':
|
|
64
|
-
return {
|
|
65
|
-
title: stringValue(value, 'text') ?? stringValue(value, 'quote') ?? explicitTitle,
|
|
66
|
-
body: [stringValue(value, 'attribution')].filter(Boolean) as string[],
|
|
67
|
-
};
|
|
68
|
-
case 'dateEvent':
|
|
69
|
-
return {
|
|
70
|
-
title: stringValue(value, 'date') ?? explicitTitle,
|
|
71
|
-
body: [stringValue(value, 'description')].filter(Boolean) as string[],
|
|
72
|
-
};
|
|
73
|
-
case 'definitionCard':
|
|
74
|
-
return {
|
|
75
|
-
title: stringValue(value, 'term') ?? explicitTitle,
|
|
76
|
-
body: [stringValue(value, 'definition'), stringValue(value, 'origin')].filter(
|
|
77
|
-
Boolean,
|
|
78
|
-
) as string[],
|
|
79
|
-
};
|
|
80
|
-
case 'twoColumn':
|
|
81
|
-
return {
|
|
82
|
-
title: stringValue(value, 'header') ?? explicitTitle ?? 'Comparison',
|
|
83
|
-
body: [stringValue(value, 'left'), stringValue(value, 'right')].filter(Boolean) as string[],
|
|
84
|
-
};
|
|
85
|
-
case 'list':
|
|
86
|
-
return {
|
|
87
|
-
title: explicitTitle ?? 'Highlights',
|
|
88
|
-
body: stringList(value, 'items'),
|
|
89
|
-
};
|
|
90
|
-
case 'imageWithCaption':
|
|
91
|
-
return {
|
|
92
|
-
title: stringValue(value, 'caption') ?? stringValue(value, 'imageAlt') ?? explicitTitle,
|
|
93
|
-
body: [],
|
|
94
|
-
};
|
|
95
|
-
default:
|
|
96
|
-
return {
|
|
97
|
-
title: explicitTitle,
|
|
98
|
-
body: [
|
|
99
|
-
stringValue(value, 'body'),
|
|
100
|
-
stringValue(value, 'description'),
|
|
101
|
-
stringValue(value, 'text'),
|
|
102
|
-
].filter(Boolean) as string[],
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function hasAuthoredShape(block: Block): boolean {
|
|
108
|
-
return !!(
|
|
109
|
-
block.sourceHeading ||
|
|
110
|
-
block.standaloneAnnotation ||
|
|
111
|
-
(block.contents && block.contents.length > 0)
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function makeReadableBlock(block: Block): Block {
|
|
116
|
-
const children = block.children?.map(makeReadableBlock);
|
|
117
|
-
if (hasAuthoredShape(block)) {
|
|
118
|
-
return children === block.children ? block : { ...block, children };
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const readable = readableTemplateContent(block);
|
|
122
|
-
return {
|
|
123
|
-
...block,
|
|
124
|
-
// Document mode is intentionally text-first. Removing the template from
|
|
125
|
-
// this temporary projection prevents docToMarkdown from re-adding a
|
|
126
|
-
// presentation annotation to the synthesized heading.
|
|
127
|
-
template: undefined,
|
|
128
|
-
sourceHeading: readable.title ? textHeading(readable.title) : undefined,
|
|
129
|
-
contents: readable.body.map(textParagraph),
|
|
130
|
-
children,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function documentTitle(doc: Doc): string | undefined {
|
|
135
|
-
if (doc.startBlock?.title?.trim()) return doc.startBlock.title.trim();
|
|
136
|
-
const title = doc.frontmatter?.title;
|
|
137
|
-
return typeof title === 'string' && title.trim() ? title.trim() : undefined;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function hasLevelOneHeading(blocks: Block[]): boolean {
|
|
141
|
-
return blocks.some(
|
|
142
|
-
(block) =>
|
|
143
|
-
block.sourceHeading?.depth === 1 ||
|
|
144
|
-
(block.children ? hasLevelOneHeading(block.children) : false),
|
|
145
|
-
);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/** Serialize a transformed Doc into readable Markdown for Document mode. */
|
|
149
|
-
export function buildDocumentPreviewMarkdown(doc: Doc): string {
|
|
150
|
-
const blocks = doc.blocks.map(makeReadableBlock);
|
|
151
|
-
const title = documentTitle(doc);
|
|
152
|
-
const titledBlocks =
|
|
153
|
-
title && !hasLevelOneHeading(blocks)
|
|
154
|
-
? [
|
|
155
|
-
{
|
|
156
|
-
id: 'transform-document-title',
|
|
157
|
-
startTime: 0,
|
|
158
|
-
duration: 0,
|
|
159
|
-
audioSegment: 0,
|
|
160
|
-
sourceHeading: textHeading(title, 1),
|
|
161
|
-
contents: [],
|
|
162
|
-
} satisfies Block,
|
|
163
|
-
...blocks,
|
|
164
|
-
]
|
|
165
|
-
: blocks;
|
|
166
|
-
|
|
167
|
-
return stringifyMarkdown(docToMarkdown({ ...doc, blocks: titledBlocks }));
|
|
168
|
-
}
|