@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/PlainHtmlPreview.tsx
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PlainHtmlPreview
|
|
3
|
-
*
|
|
4
|
-
* Live WYSIWYG preview of the plain-HTML export. Renders the result of
|
|
5
|
-
* `markdownDocToPlainHtml` inside a sandboxed `<iframe srcDoc>` so the
|
|
6
|
-
* exported document's inline `<style>` block can't leak into the host
|
|
7
|
-
* page — and so the preview looks identical to what users get when they
|
|
8
|
-
* open the downloaded `.html`.
|
|
9
|
-
*
|
|
10
|
-
* Image handling: relative `<img src>` references in the markdown can't
|
|
11
|
-
* load directly from inside the iframe (there's no real document
|
|
12
|
-
* origin). When a `mediaProvider` is supplied, this component walks the
|
|
13
|
-
* parsed markdown for image refs, resolves each through
|
|
14
|
-
* `mediaProvider.resolveUrl()` (which returns a cached blob URL), and
|
|
15
|
-
* passes the resolved map to the renderer so the iframe gets blob URLs
|
|
16
|
-
* it can fetch.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
20
|
-
import type { CSSProperties } from 'react';
|
|
21
|
-
import { parseMarkdown } from '@bendyline/squisq/markdown';
|
|
22
|
-
import type { MarkdownDocument, HtmlNode } from '@bendyline/squisq/markdown';
|
|
23
|
-
import type { MediaProvider, Theme } from '@bendyline/squisq/schemas';
|
|
24
|
-
import { normalizeMalformedAssetUrl } from './utils/normalizeMalformedAssetUrl';
|
|
25
|
-
import { collectInlineFontAwesomeCss } from './utils/collectInlineFontAwesomeCss';
|
|
26
|
-
|
|
27
|
-
// formats/html is ~50 KB and only needed for the plain-HTML preview pane.
|
|
28
|
-
// Lazy-load on first render so it doesn't sit in the editor's main chunk.
|
|
29
|
-
type RenderFn = typeof import('@bendyline/squisq-formats/html').markdownDocToPlainHtml;
|
|
30
|
-
let cachedRender: RenderFn | null = null;
|
|
31
|
-
let cachedRenderPromise: Promise<RenderFn> | null = null;
|
|
32
|
-
function loadRenderFn(): Promise<RenderFn> {
|
|
33
|
-
if (cachedRender) return Promise.resolve(cachedRender);
|
|
34
|
-
if (!cachedRenderPromise) {
|
|
35
|
-
cachedRenderPromise = import('@bendyline/squisq-formats/html').then((m) => {
|
|
36
|
-
cachedRender = m.markdownDocToPlainHtml;
|
|
37
|
-
return cachedRender;
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
return cachedRenderPromise;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface PlainHtmlPreviewProps {
|
|
44
|
-
/** Raw markdown source. */
|
|
45
|
-
markdown: string;
|
|
46
|
-
/** Document title — populates the iframe's `<title>`. */
|
|
47
|
-
title?: string;
|
|
48
|
-
/**
|
|
49
|
-
* Pre-resolved image substitutions (export-time use). Takes precedence
|
|
50
|
-
* over live `mediaProvider` resolution for any URL it contains.
|
|
51
|
-
*/
|
|
52
|
-
images?: Map<string, string>;
|
|
53
|
-
/**
|
|
54
|
-
* When passed, relative image URLs in the markdown are resolved live
|
|
55
|
-
* via this provider. Skip for static previews where `images` already
|
|
56
|
-
* contains everything.
|
|
57
|
-
*/
|
|
58
|
-
mediaProvider?: MediaProvider | null;
|
|
59
|
-
/** Token that, when changed, forces re-resolution of media URLs.
|
|
60
|
-
* Mirrors the `mediaRevision` bump the editor uses after an image
|
|
61
|
-
* edit so saves show up in the preview without remount. */
|
|
62
|
-
mediaRevision?: number;
|
|
63
|
-
/**
|
|
64
|
-
* Squisq theme to apply. When set, the iframe loads any Google-
|
|
65
|
-
* hosted fonts the theme uses and the rendered HTML adopts the
|
|
66
|
-
* theme's colors and typography.
|
|
67
|
-
*/
|
|
68
|
-
theme?: Theme;
|
|
69
|
-
className?: string;
|
|
70
|
-
style?: CSSProperties;
|
|
71
|
-
/** Let unmodified Up/Down arrows scroll the preview without requiring iframe focus. */
|
|
72
|
-
globalKeyboardShortcuts?: boolean;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const IFRAME_STYLE: CSSProperties = {
|
|
76
|
-
width: '100%',
|
|
77
|
-
height: '100%',
|
|
78
|
-
border: 'none',
|
|
79
|
-
background: '#fff',
|
|
80
|
-
display: 'block',
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
export function PlainHtmlPreview({
|
|
84
|
-
markdown,
|
|
85
|
-
title,
|
|
86
|
-
images,
|
|
87
|
-
mediaProvider,
|
|
88
|
-
mediaRevision,
|
|
89
|
-
theme,
|
|
90
|
-
className,
|
|
91
|
-
style,
|
|
92
|
-
globalKeyboardShortcuts = false,
|
|
93
|
-
}: PlainHtmlPreviewProps) {
|
|
94
|
-
const iframeRef = useRef<HTMLIFrameElement>(null);
|
|
95
|
-
const mdDoc = useMemo<MarkdownDocument>(() => parseMarkdown(markdown), [markdown]);
|
|
96
|
-
|
|
97
|
-
// Resolve any relative image URLs the doc references. Blob URLs are
|
|
98
|
-
// cheap once cached, so re-resolving on every keystroke is fine —
|
|
99
|
-
// `resolveUrl` is memoized inside the provider.
|
|
100
|
-
const [resolvedImages, setResolvedImages] = useState<Map<string, string> | null>(null);
|
|
101
|
-
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
if (!mediaProvider) {
|
|
104
|
-
setResolvedImages(null);
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
let cancelled = false;
|
|
108
|
-
const refs = Array.from(collectImageRefs(mdDoc));
|
|
109
|
-
Promise.all(
|
|
110
|
-
refs.map(async (ref) => {
|
|
111
|
-
// Word-style imports may have `http://<doc>_files/foo.png` —
|
|
112
|
-
// recover the relative path so the workspace provider resolves
|
|
113
|
-
// it, otherwise the iframe tries to fetch a nonsense hostname.
|
|
114
|
-
const recovered = normalizeMalformedAssetUrl(ref);
|
|
115
|
-
if (!recovered && isExternal(ref)) return [ref, ref] as const;
|
|
116
|
-
const lookup = recovered ?? ref;
|
|
117
|
-
try {
|
|
118
|
-
const url = await mediaProvider.resolveUrl(lookup);
|
|
119
|
-
return [ref, url] as const;
|
|
120
|
-
} catch {
|
|
121
|
-
return [ref, ref] as const;
|
|
122
|
-
}
|
|
123
|
-
}),
|
|
124
|
-
).then((pairs) => {
|
|
125
|
-
if (cancelled) return;
|
|
126
|
-
const next = new Map<string, string>(pairs);
|
|
127
|
-
setResolvedImages(next);
|
|
128
|
-
});
|
|
129
|
-
return () => {
|
|
130
|
-
cancelled = true;
|
|
131
|
-
};
|
|
132
|
-
}, [mdDoc, mediaProvider, mediaRevision]);
|
|
133
|
-
|
|
134
|
-
const mergedImages = useMemo(() => {
|
|
135
|
-
if (!resolvedImages && !images) return undefined;
|
|
136
|
-
const merged = new Map<string, string>();
|
|
137
|
-
if (resolvedImages) for (const [k, v] of resolvedImages) merged.set(k, v);
|
|
138
|
-
if (images) for (const [k, v] of images) merged.set(k, v);
|
|
139
|
-
return merged;
|
|
140
|
-
}, [resolvedImages, images]);
|
|
141
|
-
|
|
142
|
-
// Gather FontAwesome @font-face + utility rules from the host page's
|
|
143
|
-
// own stylesheets so the iframe doesn't have to depend on a cross-
|
|
144
|
-
// origin CDN fetch (which sandbox / tracking-prevention can silently
|
|
145
|
-
// drop, leaving the icons invisible). The host (editor-react) already
|
|
146
|
-
// bundles FA, so the rules are guaranteed to be present and the font
|
|
147
|
-
// URLs inside them resolve to same-origin assets the iframe can
|
|
148
|
-
// fetch under `allow-same-origin`.
|
|
149
|
-
const iconsCss = useMemo(() => collectInlineFontAwesomeCss(), []);
|
|
150
|
-
|
|
151
|
-
const [renderFn, setRenderFn] = useState<RenderFn | null>(() => cachedRender);
|
|
152
|
-
useEffect(() => {
|
|
153
|
-
if (renderFn) return;
|
|
154
|
-
let cancelled = false;
|
|
155
|
-
loadRenderFn().then((fn) => {
|
|
156
|
-
if (!cancelled) setRenderFn(() => fn);
|
|
157
|
-
});
|
|
158
|
-
return () => {
|
|
159
|
-
cancelled = true;
|
|
160
|
-
};
|
|
161
|
-
}, [renderFn]);
|
|
162
|
-
|
|
163
|
-
const html = useMemo(
|
|
164
|
-
() => (renderFn ? renderFn(mdDoc, { title, images: mergedImages, theme, iconsCss }) : ''),
|
|
165
|
-
[renderFn, mdDoc, title, mergedImages, theme, iconsCss],
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
useEffect(() => {
|
|
169
|
-
if (!globalKeyboardShortcuts) return;
|
|
170
|
-
const handleKeyDown = (event: KeyboardEvent) => {
|
|
171
|
-
if (
|
|
172
|
-
event.defaultPrevented ||
|
|
173
|
-
event.altKey ||
|
|
174
|
-
event.ctrlKey ||
|
|
175
|
-
event.metaKey ||
|
|
176
|
-
event.shiftKey ||
|
|
177
|
-
(event.key !== 'ArrowDown' && event.key !== 'ArrowUp')
|
|
178
|
-
) {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
const target = event.target instanceof Element ? event.target : null;
|
|
182
|
-
if (
|
|
183
|
-
target?.closest(
|
|
184
|
-
'input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="textbox"], [role="combobox"], [role="listbox"], [role="menu"], [role="dialog"], [aria-modal="true"], .monaco-editor',
|
|
185
|
-
)
|
|
186
|
-
) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const frameWindow = iframeRef.current?.contentWindow;
|
|
190
|
-
if (!frameWindow) return;
|
|
191
|
-
event.preventDefault();
|
|
192
|
-
const distance = Math.max(64, Math.round(iframeRef.current?.clientHeight ?? 0) * 0.12);
|
|
193
|
-
frameWindow.scrollBy({
|
|
194
|
-
top: event.key === 'ArrowDown' ? distance : -distance,
|
|
195
|
-
behavior: 'smooth',
|
|
196
|
-
});
|
|
197
|
-
};
|
|
198
|
-
document.addEventListener('keydown', handleKeyDown);
|
|
199
|
-
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
200
|
-
}, [globalKeyboardShortcuts]);
|
|
201
|
-
|
|
202
|
-
return (
|
|
203
|
-
<iframe
|
|
204
|
-
ref={iframeRef}
|
|
205
|
-
className={className}
|
|
206
|
-
data-testid="plain-html-preview"
|
|
207
|
-
title={title ?? 'HTML preview'}
|
|
208
|
-
srcDoc={html}
|
|
209
|
-
// `allow-same-origin` is required so the iframe can fetch blob:
|
|
210
|
-
// URLs created by the host's media provider. We intentionally do
|
|
211
|
-
// NOT include `allow-scripts` — the rendered HTML is plain-output
|
|
212
|
-
// markup with no JS, and refusing scripts hardens against
|
|
213
|
-
// accidental `<script>` content in user markdown.
|
|
214
|
-
sandbox="allow-same-origin"
|
|
215
|
-
style={{ ...IFRAME_STYLE, ...style }}
|
|
216
|
-
/>
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// ── Image collection ───────────────────────────────────────────────
|
|
221
|
-
|
|
222
|
-
function isExternal(url: string): boolean {
|
|
223
|
-
return (
|
|
224
|
-
!url ||
|
|
225
|
-
url.startsWith('data:') ||
|
|
226
|
-
url.startsWith('blob:') ||
|
|
227
|
-
url.startsWith('http://') ||
|
|
228
|
-
url.startsWith('https://') ||
|
|
229
|
-
url.startsWith('//')
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Collect every image URL referenced anywhere in the doc — markdown
|
|
235
|
-
* `image` nodes plus any `<img src>` inside raw HTML blocks/inlines
|
|
236
|
-
* (the WYSIWYG editor emits the HTML form for resized images).
|
|
237
|
-
*/
|
|
238
|
-
function collectImageRefs(doc: MarkdownDocument): Set<string> {
|
|
239
|
-
const refs = new Set<string>();
|
|
240
|
-
|
|
241
|
-
function visitHtml(nodes: HtmlNode[]): void {
|
|
242
|
-
for (const n of nodes) {
|
|
243
|
-
if (n.type !== 'htmlElement') continue;
|
|
244
|
-
const tag = n.tagName.toLowerCase();
|
|
245
|
-
// <img>, <video>, and <audio> all reference media via `src`.
|
|
246
|
-
// The export pipeline rewrites whichever map entries exist, so
|
|
247
|
-
// collecting them under the same set is enough — `ctx.images`
|
|
248
|
-
// is generic media despite the historical name.
|
|
249
|
-
if (tag === 'img' || tag === 'video' || tag === 'audio' || tag === 'source') {
|
|
250
|
-
const src = n.attributes.src;
|
|
251
|
-
if (typeof src === 'string' && src) refs.add(src);
|
|
252
|
-
}
|
|
253
|
-
if (tag === 'video' || tag === 'audio') {
|
|
254
|
-
const poster = n.attributes.poster;
|
|
255
|
-
if (typeof poster === 'string' && poster) refs.add(poster);
|
|
256
|
-
}
|
|
257
|
-
visitHtml(n.children);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
function visit(node: unknown): void {
|
|
262
|
-
if (!node || typeof node !== 'object') return;
|
|
263
|
-
const n = node as Record<string, unknown>;
|
|
264
|
-
if (n.type === 'image' && typeof n.url === 'string' && n.url) {
|
|
265
|
-
refs.add(n.url);
|
|
266
|
-
}
|
|
267
|
-
if ((n.type === 'htmlBlock' || n.type === 'htmlInline') && Array.isArray(n.htmlChildren)) {
|
|
268
|
-
visitHtml(n.htmlChildren as HtmlNode[]);
|
|
269
|
-
}
|
|
270
|
-
if (Array.isArray(n.children)) {
|
|
271
|
-
for (const child of n.children) visit(child);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
for (const child of doc.children) visit(child);
|
|
276
|
-
return refs;
|
|
277
|
-
}
|