@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,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standalone Tiptap-backed rich text field for use inside `<JsonEditor>`.
|
|
3
|
-
* Doesn't share `EditorContext` with the document editor — value is a
|
|
4
|
-
* controlled markdown string. Reuses `markdownToTiptap` /
|
|
5
|
-
* `tiptapToMarkdown` so fidelity matches the WysiwygEditor.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { useEffect, useRef } from 'react';
|
|
9
|
-
import { useEditor, EditorContent } from '@tiptap/react';
|
|
10
|
-
import StarterKit from '@tiptap/starter-kit';
|
|
11
|
-
import Table from '@tiptap/extension-table';
|
|
12
|
-
import TableRow from '@tiptap/extension-table-row';
|
|
13
|
-
import TableCell from '@tiptap/extension-table-cell';
|
|
14
|
-
import TableHeader from '@tiptap/extension-table-header';
|
|
15
|
-
import TaskList from '@tiptap/extension-task-list';
|
|
16
|
-
import TaskItem from '@tiptap/extension-task-item';
|
|
17
|
-
import Placeholder from '@tiptap/extension-placeholder';
|
|
18
|
-
import { markdownToTiptap, tiptapToMarkdown } from '../tiptapBridge';
|
|
19
|
-
|
|
20
|
-
export interface EmbeddedRichTextFieldProps {
|
|
21
|
-
value: string;
|
|
22
|
-
onChange: (next: string) => void;
|
|
23
|
-
readOnly?: boolean;
|
|
24
|
-
placeholder?: string;
|
|
25
|
-
className?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function EmbeddedRichTextField(props: EmbeddedRichTextFieldProps) {
|
|
29
|
-
const { value, onChange, readOnly = false, placeholder, className } = props;
|
|
30
|
-
const isExternalUpdate = useRef(false);
|
|
31
|
-
const lastValueRef = useRef(value);
|
|
32
|
-
|
|
33
|
-
const editor = useEditor({
|
|
34
|
-
editable: !readOnly,
|
|
35
|
-
extensions: [
|
|
36
|
-
StarterKit.configure({
|
|
37
|
-
codeBlock: { HTMLAttributes: { class: 'squisq-code-block' } },
|
|
38
|
-
}),
|
|
39
|
-
Table.configure({ resizable: false }),
|
|
40
|
-
TableRow,
|
|
41
|
-
TableCell,
|
|
42
|
-
TableHeader,
|
|
43
|
-
TaskList,
|
|
44
|
-
TaskItem.configure({ nested: true }),
|
|
45
|
-
Placeholder.configure({ placeholder: placeholder ?? '' }),
|
|
46
|
-
],
|
|
47
|
-
content: markdownToTiptap(value),
|
|
48
|
-
onUpdate: ({ editor: ed }) => {
|
|
49
|
-
if (isExternalUpdate.current) return;
|
|
50
|
-
const html = ed.getHTML();
|
|
51
|
-
const md = tiptapToMarkdown(html);
|
|
52
|
-
lastValueRef.current = md;
|
|
53
|
-
onChange(md);
|
|
54
|
-
},
|
|
55
|
-
editorProps: {
|
|
56
|
-
attributes: {
|
|
57
|
-
class: 'squisq-jf-richtext-prose',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// Sync external value changes back into the editor (e.g., undo at the host level).
|
|
63
|
-
useEffect(() => {
|
|
64
|
-
if (!editor) return;
|
|
65
|
-
if (value === lastValueRef.current) return;
|
|
66
|
-
isExternalUpdate.current = true;
|
|
67
|
-
try {
|
|
68
|
-
editor.commands.setContent(markdownToTiptap(value), false);
|
|
69
|
-
lastValueRef.current = value;
|
|
70
|
-
} finally {
|
|
71
|
-
isExternalUpdate.current = false;
|
|
72
|
-
}
|
|
73
|
-
}, [editor, value]);
|
|
74
|
-
|
|
75
|
-
useEffect(() => {
|
|
76
|
-
if (editor) editor.setEditable(!readOnly);
|
|
77
|
-
}, [editor, readOnly]);
|
|
78
|
-
|
|
79
|
-
const cls = 'squisq-jf-richtext' + (className ? ` ${className}` : '');
|
|
80
|
-
return <EditorContent editor={editor} className={cls} />;
|
|
81
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* <JsonEditor>
|
|
3
|
-
*
|
|
4
|
-
* Friendly, theme-aware editor for any JSON value bound to a Squisq-
|
|
5
|
-
* annotated JSON Schema. Hides JSON syntax behind delightful controls:
|
|
6
|
-
* arrays of objects become card stacks, arrays of primitives become
|
|
7
|
-
* chip bins, color fields become swatches, and so on.
|
|
8
|
-
*
|
|
9
|
-
* Companion to `<JsonView>` from `@bendyline/squisq-react` — both share
|
|
10
|
-
* the same `chooseControl()` dispatcher in core, so view and edit modes
|
|
11
|
-
* always agree on what each field _is_.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import type {
|
|
15
|
-
JsonFormValidationError,
|
|
16
|
-
JsonFormValidator,
|
|
17
|
-
SquisqAnnotatedSchema,
|
|
18
|
-
} from '@bendyline/squisq/jsonForm';
|
|
19
|
-
import type { SurfaceScheme, Theme } from '@bendyline/squisq/schemas';
|
|
20
|
-
import { JsonEditorProvider } from './JsonEditorContext';
|
|
21
|
-
import { RenderNode } from './RenderNode';
|
|
22
|
-
import { useJsonEditorTokens } from './useJsonEditorTokens';
|
|
23
|
-
|
|
24
|
-
export interface JsonEditorProps {
|
|
25
|
-
/** Schema describing the value's shape (with optional `squisq` hints). */
|
|
26
|
-
schema: SquisqAnnotatedSchema;
|
|
27
|
-
/** Controlled value. */
|
|
28
|
-
value: unknown;
|
|
29
|
-
/** Called with the new root after each edit. Omit for read-only behavior. */
|
|
30
|
-
onChange?: (next: unknown) => void;
|
|
31
|
-
/** Optional theme. Defaults to `DEFAULT_THEME`. */
|
|
32
|
-
theme?: Theme;
|
|
33
|
-
/** Light/dark surface override; `'auto'` uses `prefers-color-scheme`. */
|
|
34
|
-
surface?: SurfaceScheme | 'auto';
|
|
35
|
-
/** Padding/gap density. Default: 'comfortable'. */
|
|
36
|
-
density?: 'comfortable' | 'compact';
|
|
37
|
-
/** Optional consumer-supplied validator (e.g. ajv-backed). */
|
|
38
|
-
validate?: JsonFormValidator;
|
|
39
|
-
/** Notified after validation runs. */
|
|
40
|
-
onValidate?: (errors: readonly JsonFormValidationError[]) => void;
|
|
41
|
-
/** Optional CSS class for the outer container. */
|
|
42
|
-
className?: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function JsonEditor(props: JsonEditorProps) {
|
|
46
|
-
const {
|
|
47
|
-
schema,
|
|
48
|
-
value,
|
|
49
|
-
onChange,
|
|
50
|
-
theme,
|
|
51
|
-
surface,
|
|
52
|
-
density = 'comfortable',
|
|
53
|
-
validate,
|
|
54
|
-
onValidate,
|
|
55
|
-
className,
|
|
56
|
-
} = props;
|
|
57
|
-
const { style } = useJsonEditorTokens(theme, surface);
|
|
58
|
-
|
|
59
|
-
// No onChange → fully inert (still validates if a validator is supplied).
|
|
60
|
-
const handleChange = onChange ?? (() => {});
|
|
61
|
-
|
|
62
|
-
const cls =
|
|
63
|
-
'squisq-jsonform' +
|
|
64
|
-
(density === 'compact' ? ' squisq-jsonform--compact' : '') +
|
|
65
|
-
(className ? ` ${className}` : '');
|
|
66
|
-
|
|
67
|
-
return (
|
|
68
|
-
<div className={cls} style={style}>
|
|
69
|
-
<JsonEditorProvider
|
|
70
|
-
rootSchema={schema}
|
|
71
|
-
rootData={value}
|
|
72
|
-
onRootChange={handleChange}
|
|
73
|
-
density={density}
|
|
74
|
-
validate={validate}
|
|
75
|
-
onValidate={onValidate}
|
|
76
|
-
>
|
|
77
|
-
<RenderNode value={value} schema={schema} pointer="" parentDisabled={!onChange} />
|
|
78
|
-
</JsonEditorProvider>
|
|
79
|
-
</div>
|
|
80
|
-
);
|
|
81
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared state for `<JsonEditor>`. Each editor renderer reads its
|
|
3
|
-
* slice via JSON Pointer and calls `setAtPath` to commit edits — the
|
|
4
|
-
* top-level component owns the canonical value and propagates changes
|
|
5
|
-
* to the host's `onChange`.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { createContext, useContext, useEffect, useMemo, type ReactNode } from 'react';
|
|
9
|
-
import type {
|
|
10
|
-
JsonFormValidationError,
|
|
11
|
-
JsonFormValidator,
|
|
12
|
-
SquisqAnnotatedSchema,
|
|
13
|
-
} from '@bendyline/squisq/jsonForm';
|
|
14
|
-
import { setByPointer } from '@bendyline/squisq/jsonForm';
|
|
15
|
-
|
|
16
|
-
export interface JsonEditorContextValue {
|
|
17
|
-
rootSchema: SquisqAnnotatedSchema;
|
|
18
|
-
rootData: unknown;
|
|
19
|
-
/** Commit a new value at `pointer`, computing & emitting a new root. */
|
|
20
|
-
setAtPath: (pointer: string, value: unknown) => void;
|
|
21
|
-
density: 'comfortable' | 'compact';
|
|
22
|
-
errors: ReadonlyMap<string, JsonFormValidationError[]>;
|
|
23
|
-
/** Optional richtext editor component, supplied internally. */
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const JsonEditorContext = createContext<JsonEditorContextValue | null>(null);
|
|
27
|
-
|
|
28
|
-
export interface JsonEditorProviderProps {
|
|
29
|
-
rootSchema: SquisqAnnotatedSchema;
|
|
30
|
-
rootData: unknown;
|
|
31
|
-
onRootChange: (next: unknown) => void;
|
|
32
|
-
density: 'comfortable' | 'compact';
|
|
33
|
-
validate?: JsonFormValidator;
|
|
34
|
-
onValidate?: (errors: readonly JsonFormValidationError[]) => void;
|
|
35
|
-
children: ReactNode;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function JsonEditorProvider(props: JsonEditorProviderProps) {
|
|
39
|
-
const { rootSchema, rootData, onRootChange, density, validate, onValidate, children } = props;
|
|
40
|
-
|
|
41
|
-
const validationErrors = useMemo(
|
|
42
|
-
() => (validate ? validate(rootData, rootSchema) : []),
|
|
43
|
-
[validate, rootData, rootSchema],
|
|
44
|
-
);
|
|
45
|
-
const errors = useMemo(() => {
|
|
46
|
-
const grouped = new Map<string, JsonFormValidationError[]>();
|
|
47
|
-
for (const e of validationErrors) {
|
|
48
|
-
const arr = grouped.get(e.path) ?? [];
|
|
49
|
-
arr.push(e);
|
|
50
|
-
grouped.set(e.path, arr);
|
|
51
|
-
}
|
|
52
|
-
return grouped;
|
|
53
|
-
}, [validationErrors]);
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
if (!onValidate) return;
|
|
57
|
-
onValidate(validationErrors);
|
|
58
|
-
}, [validationErrors, onValidate]);
|
|
59
|
-
|
|
60
|
-
const setAtPath = useMemo(
|
|
61
|
-
() => (pointer: string, value: unknown) => {
|
|
62
|
-
const next = setByPointer(rootData, pointer, value);
|
|
63
|
-
onRootChange(next);
|
|
64
|
-
},
|
|
65
|
-
[rootData, onRootChange],
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const value: JsonEditorContextValue = useMemo(
|
|
69
|
-
() => ({ rootSchema, rootData, setAtPath, density, errors }),
|
|
70
|
-
[rootSchema, rootData, setAtPath, density, errors],
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
return <JsonEditorContext.Provider value={value}>{children}</JsonEditorContext.Provider>;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// eslint-disable-next-line react-refresh/only-export-components
|
|
77
|
-
export function useJsonEditor(): JsonEditorContextValue {
|
|
78
|
-
const ctx = useContext(JsonEditorContext);
|
|
79
|
-
if (!ctx) throw new Error('useJsonEditor must be used inside <JsonEditor>');
|
|
80
|
-
return ctx;
|
|
81
|
-
}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Recursive editor dispatcher: looks at a schema slice, evaluates
|
|
3
|
-
* `hidden`/`disabled` rules, picks an editor component, and wraps it
|
|
4
|
-
* with label + help + error chrome unless the editor is composite
|
|
5
|
-
* (group / card-stack / tabs / richtext, which present their own).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
chooseControl,
|
|
10
|
-
resolveFlag,
|
|
11
|
-
resolveRef,
|
|
12
|
-
type SquisqAnnotatedSchema,
|
|
13
|
-
} from '@bendyline/squisq/jsonForm';
|
|
14
|
-
import { useId } from 'react';
|
|
15
|
-
import { useJsonEditor } from './JsonEditorContext';
|
|
16
|
-
import { EDITORS, isCompositeControl } from './editors';
|
|
17
|
-
|
|
18
|
-
export interface RenderNodeProps {
|
|
19
|
-
value: unknown;
|
|
20
|
-
schema: SquisqAnnotatedSchema;
|
|
21
|
-
pointer: string;
|
|
22
|
-
parentDisabled?: boolean;
|
|
23
|
-
suppressTopGroupTitle?: boolean;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function RenderNode(props: RenderNodeProps): React.ReactElement | null {
|
|
27
|
-
const generatedId = useId().replace(/:/g, '');
|
|
28
|
-
const { rootSchema, rootData, errors } = useJsonEditor();
|
|
29
|
-
const resolved = resolveRef(props.schema, rootSchema) ?? props.schema;
|
|
30
|
-
|
|
31
|
-
if (resolveFlag(resolved.squisq?.hidden, rootData)) return null;
|
|
32
|
-
|
|
33
|
-
const disabled =
|
|
34
|
-
(props.parentDisabled ?? false) || resolveFlag(resolved.squisq?.disabled, rootData);
|
|
35
|
-
const kind = chooseControl(resolved);
|
|
36
|
-
const Editor = EDITORS[kind];
|
|
37
|
-
const label = resolved.squisq?.label ?? resolved.title;
|
|
38
|
-
const help = resolved.squisq?.help ?? resolved.description;
|
|
39
|
-
const fieldErrors = errors.get(props.pointer) ?? [];
|
|
40
|
-
const controlId = `squisq-json-control-${generatedId}`;
|
|
41
|
-
const labelId = label ? `${controlId}-label` : undefined;
|
|
42
|
-
const helpId = help ? `${controlId}-help` : undefined;
|
|
43
|
-
const errorId = fieldErrors.length > 0 ? `${controlId}-error` : undefined;
|
|
44
|
-
const describedBy = [helpId, errorId].filter(Boolean).join(' ') || undefined;
|
|
45
|
-
|
|
46
|
-
const editorEl = (
|
|
47
|
-
<Editor
|
|
48
|
-
value={props.value}
|
|
49
|
-
schema={resolved}
|
|
50
|
-
pointer={props.pointer}
|
|
51
|
-
disabled={disabled}
|
|
52
|
-
controlId={controlId}
|
|
53
|
-
labelledBy={labelId}
|
|
54
|
-
describedBy={describedBy}
|
|
55
|
-
invalid={fieldErrors.length > 0}
|
|
56
|
-
// GroupEditor honors this — other editors ignore the extra prop.
|
|
57
|
-
// @ts-expect-error optional renderer-specific prop
|
|
58
|
-
suppressTitle={props.suppressTopGroupTitle}
|
|
59
|
-
/>
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
if (isCompositeControl(kind, resolved)) {
|
|
63
|
-
// Composite editors handle their own labeling.
|
|
64
|
-
return editorEl;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return (
|
|
68
|
-
<div className={`squisq-jf-field${disabled ? ' squisq-jf-field--disabled' : ''}`}>
|
|
69
|
-
{label ? (
|
|
70
|
-
<label id={labelId} htmlFor={controlId} className="squisq-jf-field__label">
|
|
71
|
-
{label}
|
|
72
|
-
</label>
|
|
73
|
-
) : null}
|
|
74
|
-
{editorEl}
|
|
75
|
-
{help ? (
|
|
76
|
-
<p id={helpId} className="squisq-jf-field__help">
|
|
77
|
-
{help}
|
|
78
|
-
</p>
|
|
79
|
-
) : null}
|
|
80
|
-
{fieldErrors.length > 0 ? (
|
|
81
|
-
<p id={errorId} className="squisq-jf-field__error" role="alert">
|
|
82
|
-
{fieldErrors[0].message}
|
|
83
|
-
</p>
|
|
84
|
-
) : null}
|
|
85
|
-
</div>
|
|
86
|
-
);
|
|
87
|
-
}
|