@bendyline/squisq-editor-react 1.5.1 → 1.5.3
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/dist/index.d.ts +1991 -90
- package/dist/index.js +17162 -82
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/RawEditor.tsx +49 -18
- package/src/VersionHistoryPanel.tsx +59 -17
- package/src/recorder/hooks/useMediaRecorder.ts +9 -1
- package/src/useMonacoLoader.ts +83 -0
- package/dist/DocumentSettingsDialog.d.ts +0 -26
- package/dist/DocumentSettingsDialog.d.ts.map +0 -1
- package/dist/DocumentSettingsDialog.js +0 -115
- package/dist/DocumentSettingsDialog.js.map +0 -1
- package/dist/DropZoneOverlay.d.ts +0 -24
- package/dist/DropZoneOverlay.d.ts.map +0 -1
- package/dist/DropZoneOverlay.js +0 -53
- package/dist/DropZoneOverlay.js.map +0 -1
- package/dist/EditorContext.d.ts +0 -391
- package/dist/EditorContext.d.ts.map +0 -1
- package/dist/EditorContext.js +0 -471
- package/dist/EditorContext.js.map +0 -1
- package/dist/EditorShell.d.ts +0 -328
- package/dist/EditorShell.d.ts.map +0 -1
- package/dist/EditorShell.js +0 -290
- package/dist/EditorShell.js.map +0 -1
- package/dist/EmojiPicker.d.ts +0 -50
- package/dist/EmojiPicker.d.ts.map +0 -1
- package/dist/EmojiPicker.js +0 -182
- package/dist/EmojiPicker.js.map +0 -1
- package/dist/ImageEditor.d.ts +0 -68
- package/dist/ImageEditor.d.ts.map +0 -1
- package/dist/ImageEditor.js +0 -166
- package/dist/ImageEditor.js.map +0 -1
- package/dist/ImageNodeView.d.ts +0 -27
- package/dist/ImageNodeView.d.ts.map +0 -1
- package/dist/ImageNodeView.js +0 -215
- package/dist/ImageNodeView.js.map +0 -1
- package/dist/ImageViewer.d.ts +0 -26
- package/dist/ImageViewer.d.ts.map +0 -1
- package/dist/ImageViewer.js +0 -119
- package/dist/ImageViewer.js.map +0 -1
- package/dist/InlineIcon.d.ts +0 -17
- package/dist/InlineIcon.d.ts.map +0 -1
- package/dist/InlineIcon.js +0 -72
- package/dist/InlineIcon.js.map +0 -1
- package/dist/InlinePreviewGutter.d.ts +0 -52
- package/dist/InlinePreviewGutter.d.ts.map +0 -1
- package/dist/InlinePreviewGutter.js +0 -397
- package/dist/InlinePreviewGutter.js.map +0 -1
- package/dist/LinkDialog.d.ts +0 -43
- package/dist/LinkDialog.d.ts.map +0 -1
- package/dist/LinkDialog.js +0 -102
- package/dist/LinkDialog.js.map +0 -1
- package/dist/MediaBin.d.ts +0 -29
- package/dist/MediaBin.d.ts.map +0 -1
- package/dist/MediaBin.js +0 -166
- package/dist/MediaBin.js.map +0 -1
- package/dist/MentionExtension.d.ts +0 -22
- package/dist/MentionExtension.d.ts.map +0 -1
- package/dist/MentionExtension.js +0 -245
- package/dist/MentionExtension.js.map +0 -1
- package/dist/OutlinePanel.d.ts +0 -17
- package/dist/OutlinePanel.d.ts.map +0 -1
- package/dist/OutlinePanel.js +0 -167
- package/dist/OutlinePanel.js.map +0 -1
- package/dist/PlainHtmlPreview.d.ts +0 -50
- package/dist/PlainHtmlPreview.d.ts.map +0 -1
- package/dist/PlainHtmlPreview.js +0 -155
- package/dist/PlainHtmlPreview.js.map +0 -1
- package/dist/PreviewControls.d.ts +0 -55
- package/dist/PreviewControls.d.ts.map +0 -1
- package/dist/PreviewControls.js +0 -277
- package/dist/PreviewControls.js.map +0 -1
- package/dist/PreviewPanel.d.ts +0 -29
- package/dist/PreviewPanel.d.ts.map +0 -1
- package/dist/PreviewPanel.js +0 -94
- package/dist/PreviewPanel.js.map +0 -1
- package/dist/RawEditor.d.ts +0 -32
- package/dist/RawEditor.d.ts.map +0 -1
- package/dist/RawEditor.js +0 -440
- package/dist/RawEditor.js.map +0 -1
- package/dist/RecorderEntry.d.ts +0 -24
- package/dist/RecorderEntry.d.ts.map +0 -1
- package/dist/RecorderEntry.js +0 -139
- package/dist/RecorderEntry.js.map +0 -1
- package/dist/StatusBar.d.ts +0 -15
- package/dist/StatusBar.d.ts.map +0 -1
- package/dist/StatusBar.js +0 -24
- package/dist/StatusBar.js.map +0 -1
- package/dist/TemplateAnnotation.d.ts +0 -20
- package/dist/TemplateAnnotation.d.ts.map +0 -1
- package/dist/TemplateAnnotation.js +0 -97
- package/dist/TemplateAnnotation.js.map +0 -1
- package/dist/TemplatePicker.d.ts +0 -53
- package/dist/TemplatePicker.d.ts.map +0 -1
- package/dist/TemplatePicker.js +0 -388
- package/dist/TemplatePicker.js.map +0 -1
- package/dist/ThemeCustomizerPanel.d.ts +0 -32
- package/dist/ThemeCustomizerPanel.d.ts.map +0 -1
- package/dist/ThemeCustomizerPanel.js +0 -256
- package/dist/ThemeCustomizerPanel.js.map +0 -1
- package/dist/ThemePicker.d.ts +0 -33
- package/dist/ThemePicker.d.ts.map +0 -1
- package/dist/ThemePicker.js +0 -148
- package/dist/ThemePicker.js.map +0 -1
- package/dist/Toolbar.d.ts +0 -36
- package/dist/Toolbar.d.ts.map +0 -1
- package/dist/Toolbar.js +0 -1001
- package/dist/Toolbar.js.map +0 -1
- package/dist/Tooltip.d.ts +0 -10
- package/dist/Tooltip.d.ts.map +0 -1
- package/dist/Tooltip.js +0 -104
- package/dist/Tooltip.js.map +0 -1
- package/dist/VersionHistoryPanel.d.ts +0 -14
- package/dist/VersionHistoryPanel.d.ts.map +0 -1
- package/dist/VersionHistoryPanel.js +0 -147
- package/dist/VersionHistoryPanel.js.map +0 -1
- package/dist/ViewMenuPanel.d.ts +0 -13
- package/dist/ViewMenuPanel.d.ts.map +0 -1
- package/dist/ViewMenuPanel.js +0 -58
- package/dist/ViewMenuPanel.js.map +0 -1
- package/dist/ViewSwitcher.d.ts +0 -14
- package/dist/ViewSwitcher.d.ts.map +0 -1
- package/dist/ViewSwitcher.js +0 -26
- package/dist/ViewSwitcher.js.map +0 -1
- package/dist/WysiwygEditor.d.ts +0 -39
- package/dist/WysiwygEditor.d.ts.map +0 -1
- package/dist/WysiwygEditor.js +0 -537
- package/dist/WysiwygEditor.js.map +0 -1
- package/dist/__tests__/detectMarkdown.test.d.ts +0 -2
- package/dist/__tests__/detectMarkdown.test.d.ts.map +0 -1
- package/dist/__tests__/detectMarkdown.test.js +0 -55
- package/dist/__tests__/detectMarkdown.test.js.map +0 -1
- package/dist/__tests__/documentSettingsDialog.test.d.ts +0 -2
- package/dist/__tests__/documentSettingsDialog.test.d.ts.map +0 -1
- package/dist/__tests__/documentSettingsDialog.test.js +0 -132
- package/dist/__tests__/documentSettingsDialog.test.js.map +0 -1
- package/dist/__tests__/emojiPicker.test.d.ts +0 -2
- package/dist/__tests__/emojiPicker.test.d.ts.map +0 -1
- package/dist/__tests__/emojiPicker.test.js +0 -111
- package/dist/__tests__/emojiPicker.test.js.map +0 -1
- package/dist/__tests__/fileKind.test.d.ts +0 -2
- package/dist/__tests__/fileKind.test.d.ts.map +0 -1
- package/dist/__tests__/fileKind.test.js +0 -94
- package/dist/__tests__/fileKind.test.js.map +0 -1
- package/dist/__tests__/imageEditAffordance.test.d.ts +0 -2
- package/dist/__tests__/imageEditAffordance.test.d.ts.map +0 -1
- package/dist/__tests__/imageEditAffordance.test.js +0 -188
- package/dist/__tests__/imageEditAffordance.test.js.map +0 -1
- package/dist/__tests__/imageEditorShell.test.d.ts +0 -2
- package/dist/__tests__/imageEditorShell.test.d.ts.map +0 -1
- package/dist/__tests__/imageEditorShell.test.js +0 -52
- package/dist/__tests__/imageEditorShell.test.js.map +0 -1
- package/dist/__tests__/imageEditorState.test.d.ts +0 -3
- package/dist/__tests__/imageEditorState.test.d.ts.map +0 -1
- package/dist/__tests__/imageEditorState.test.js +0 -148
- package/dist/__tests__/imageEditorState.test.js.map +0 -1
- package/dist/__tests__/inlinePreviewGutter.test.d.ts +0 -2
- package/dist/__tests__/inlinePreviewGutter.test.d.ts.map +0 -1
- package/dist/__tests__/inlinePreviewGutter.test.js +0 -51
- package/dist/__tests__/inlinePreviewGutter.test.js.map +0 -1
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts +0 -2
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts.map +0 -1
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js +0 -63
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js.map +0 -1
- package/dist/__tests__/jsonEditor.test.d.ts +0 -2
- package/dist/__tests__/jsonEditor.test.d.ts.map +0 -1
- package/dist/__tests__/jsonEditor.test.js +0 -134
- package/dist/__tests__/jsonEditor.test.js.map +0 -1
- package/dist/__tests__/layersPanel.test.d.ts +0 -2
- package/dist/__tests__/layersPanel.test.d.ts.map +0 -1
- package/dist/__tests__/layersPanel.test.js +0 -84
- package/dist/__tests__/layersPanel.test.js.map +0 -1
- package/dist/__tests__/linkDialogDocPicker.test.d.ts +0 -7
- package/dist/__tests__/linkDialogDocPicker.test.d.ts.map +0 -1
- package/dist/__tests__/linkDialogDocPicker.test.js +0 -75
- package/dist/__tests__/linkDialogDocPicker.test.js.map +0 -1
- package/dist/__tests__/mediaAttachmentFlow.test.d.ts +0 -2
- package/dist/__tests__/mediaAttachmentFlow.test.d.ts.map +0 -1
- package/dist/__tests__/mediaAttachmentFlow.test.js +0 -99
- package/dist/__tests__/mediaAttachmentFlow.test.js.map +0 -1
- package/dist/__tests__/outlinePanel.test.d.ts +0 -2
- package/dist/__tests__/outlinePanel.test.d.ts.map +0 -1
- package/dist/__tests__/outlinePanel.test.js +0 -68
- package/dist/__tests__/outlinePanel.test.js.map +0 -1
- package/dist/__tests__/plainHtmlPreview.test.d.ts +0 -2
- package/dist/__tests__/plainHtmlPreview.test.d.ts.map +0 -1
- package/dist/__tests__/plainHtmlPreview.test.js +0 -87
- package/dist/__tests__/plainHtmlPreview.test.js.map +0 -1
- package/dist/__tests__/propertiesPanel.test.d.ts +0 -2
- package/dist/__tests__/propertiesPanel.test.d.ts.map +0 -1
- package/dist/__tests__/propertiesPanel.test.js +0 -64
- package/dist/__tests__/propertiesPanel.test.js.map +0 -1
- package/dist/__tests__/recorderFormats.test.d.ts +0 -2
- package/dist/__tests__/recorderFormats.test.d.ts.map +0 -1
- package/dist/__tests__/recorderFormats.test.js +0 -121
- package/dist/__tests__/recorderFormats.test.js.map +0 -1
- package/dist/__tests__/recorderTimingJson.test.d.ts +0 -2
- package/dist/__tests__/recorderTimingJson.test.d.ts.map +0 -1
- package/dist/__tests__/recorderTimingJson.test.js +0 -37
- package/dist/__tests__/recorderTimingJson.test.js.map +0 -1
- package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts +0 -2
- package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts.map +0 -1
- package/dist/__tests__/templateAnnotationRoundTrip.test.js +0 -31
- package/dist/__tests__/templateAnnotationRoundTrip.test.js.map +0 -1
- package/dist/__tests__/tiptapBridge.test.d.ts +0 -2
- package/dist/__tests__/tiptapBridge.test.d.ts.map +0 -1
- package/dist/__tests__/tiptapBridge.test.js +0 -303
- package/dist/__tests__/tiptapBridge.test.js.map +0 -1
- package/dist/__tests__/tiptapImageRoundTrip.test.d.ts +0 -2
- package/dist/__tests__/tiptapImageRoundTrip.test.d.ts.map +0 -1
- package/dist/__tests__/tiptapImageRoundTrip.test.js +0 -68
- package/dist/__tests__/tiptapImageRoundTrip.test.js.map +0 -1
- package/dist/__tests__/useImageEditor.test.d.ts +0 -2
- package/dist/__tests__/useImageEditor.test.d.ts.map +0 -1
- package/dist/__tests__/useImageEditor.test.js +0 -131
- package/dist/__tests__/useImageEditor.test.js.map +0 -1
- package/dist/__tests__/useMediaRecorder.test.d.ts +0 -2
- package/dist/__tests__/useMediaRecorder.test.d.ts.map +0 -1
- package/dist/__tests__/useMediaRecorder.test.js +0 -153
- package/dist/__tests__/useMediaRecorder.test.js.map +0 -1
- package/dist/__tests__/versionHistory.test.d.ts +0 -2
- package/dist/__tests__/versionHistory.test.d.ts.map +0 -1
- package/dist/__tests__/versionHistory.test.js +0 -124
- package/dist/__tests__/versionHistory.test.js.map +0 -1
- package/dist/blockSlice.d.ts +0 -24
- package/dist/blockSlice.d.ts.map +0 -1
- package/dist/blockSlice.js +0 -63
- package/dist/blockSlice.js.map +0 -1
- package/dist/buildPreviewDoc.d.ts +0 -22
- package/dist/buildPreviewDoc.d.ts.map +0 -1
- package/dist/buildPreviewDoc.js +0 -262
- package/dist/buildPreviewDoc.js.map +0 -1
- package/dist/detectMarkdown.d.ts +0 -20
- package/dist/detectMarkdown.d.ts.map +0 -1
- package/dist/detectMarkdown.js +0 -61
- package/dist/detectMarkdown.js.map +0 -1
- package/dist/emojiData.d.ts +0 -81
- package/dist/emojiData.d.ts.map +0 -1
- package/dist/emojiData.js +0 -1283
- package/dist/emojiData.js.map +0 -1
- package/dist/fileKind.d.ts +0 -34
- package/dist/fileKind.d.ts.map +0 -1
- package/dist/fileKind.js +0 -144
- package/dist/fileKind.js.map +0 -1
- package/dist/hooks/useFileDrop.d.ts +0 -41
- package/dist/hooks/useFileDrop.d.ts.map +0 -1
- package/dist/hooks/useFileDrop.js +0 -205
- package/dist/hooks/useFileDrop.js.map +0 -1
- package/dist/imageEditor/CanvasSurface.d.ts +0 -31
- package/dist/imageEditor/CanvasSurface.d.ts.map +0 -1
- package/dist/imageEditor/CanvasSurface.js +0 -264
- package/dist/imageEditor/CanvasSurface.js.map +0 -1
- package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts +0 -39
- package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts.map +0 -1
- package/dist/imageEditor/ImageVersionHistoryDropdown.js +0 -283
- package/dist/imageEditor/ImageVersionHistoryDropdown.js.map +0 -1
- package/dist/imageEditor/LayersPanel.d.ts +0 -14
- package/dist/imageEditor/LayersPanel.d.ts.map +0 -1
- package/dist/imageEditor/LayersPanel.js +0 -43
- package/dist/imageEditor/LayersPanel.js.map +0 -1
- package/dist/imageEditor/PropertiesPanel.d.ts +0 -14
- package/dist/imageEditor/PropertiesPanel.d.ts.map +0 -1
- package/dist/imageEditor/PropertiesPanel.js +0 -97
- package/dist/imageEditor/PropertiesPanel.js.map +0 -1
- package/dist/imageEditor/Toolbar.d.ts +0 -30
- package/dist/imageEditor/Toolbar.d.ts.map +0 -1
- package/dist/imageEditor/Toolbar.js +0 -108
- package/dist/imageEditor/Toolbar.js.map +0 -1
- package/dist/imageEditor/icons.d.ts +0 -24
- package/dist/imageEditor/icons.d.ts.map +0 -1
- package/dist/imageEditor/icons.js +0 -45
- package/dist/imageEditor/icons.js.map +0 -1
- package/dist/imageEditor/layers/EditorImageLayer.d.ts +0 -16
- package/dist/imageEditor/layers/EditorImageLayer.d.ts.map +0 -1
- package/dist/imageEditor/layers/EditorImageLayer.js +0 -37
- package/dist/imageEditor/layers/EditorImageLayer.js.map +0 -1
- package/dist/imageEditor/layers/EditorShapeLayer.d.ts +0 -15
- package/dist/imageEditor/layers/EditorShapeLayer.d.ts.map +0 -1
- package/dist/imageEditor/layers/EditorShapeLayer.js +0 -20
- package/dist/imageEditor/layers/EditorShapeLayer.js.map +0 -1
- package/dist/imageEditor/layers/EditorTextLayer.d.ts +0 -18
- package/dist/imageEditor/layers/EditorTextLayer.d.ts.map +0 -1
- package/dist/imageEditor/layers/EditorTextLayer.js +0 -13
- package/dist/imageEditor/layers/EditorTextLayer.js.map +0 -1
- package/dist/imageEditor/layers/SelectionHandles.d.ts +0 -17
- package/dist/imageEditor/layers/SelectionHandles.d.ts.map +0 -1
- package/dist/imageEditor/layers/SelectionHandles.js +0 -19
- package/dist/imageEditor/layers/SelectionHandles.js.map +0 -1
- package/dist/imageEditor/state.d.ts +0 -76
- package/dist/imageEditor/state.d.ts.map +0 -1
- package/dist/imageEditor/state.js +0 -87
- package/dist/imageEditor/state.js.map +0 -1
- package/dist/imageEditor/useImageEditor.d.ts +0 -53
- package/dist/imageEditor/useImageEditor.d.ts.map +0 -1
- package/dist/imageEditor/useImageEditor.js +0 -244
- package/dist/imageEditor/useImageEditor.js.map +0 -1
- package/dist/imageEditor/useImageEditorTokens.d.ts +0 -16
- package/dist/imageEditor/useImageEditorTokens.d.ts.map +0 -1
- package/dist/imageEditor/useImageEditorTokens.js +0 -45
- package/dist/imageEditor/useImageEditorTokens.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsonEditor/EmbeddedRichTextField.d.ts +0 -15
- package/dist/jsonEditor/EmbeddedRichTextField.d.ts.map +0 -1
- package/dist/jsonEditor/EmbeddedRichTextField.js +0 -74
- package/dist/jsonEditor/EmbeddedRichTextField.js.map +0 -1
- package/dist/jsonEditor/JsonEditor.d.ts +0 -36
- package/dist/jsonEditor/JsonEditor.d.ts.map +0 -1
- package/dist/jsonEditor/JsonEditor.js +0 -15
- package/dist/jsonEditor/JsonEditor.js.map +0 -1
- package/dist/jsonEditor/JsonEditorContext.d.ts +0 -28
- package/dist/jsonEditor/JsonEditorContext.d.ts.map +0 -1
- package/dist/jsonEditor/JsonEditorContext.js +0 -41
- package/dist/jsonEditor/JsonEditorContext.js.map +0 -1
- package/dist/jsonEditor/RenderNode.d.ts +0 -16
- package/dist/jsonEditor/RenderNode.d.ts.map +0 -1
- package/dist/jsonEditor/RenderNode.js +0 -32
- package/dist/jsonEditor/RenderNode.js.map +0 -1
- package/dist/jsonEditor/editors.d.ts +0 -36
- package/dist/jsonEditor/editors.d.ts.map +0 -1
- package/dist/jsonEditor/editors.js +0 -347
- package/dist/jsonEditor/editors.js.map +0 -1
- package/dist/jsonEditor/index.d.ts +0 -3
- package/dist/jsonEditor/index.d.ts.map +0 -1
- package/dist/jsonEditor/index.js +0 -2
- package/dist/jsonEditor/index.js.map +0 -1
- package/dist/jsonEditor/useJsonEditorTokens.d.ts +0 -13
- package/dist/jsonEditor/useJsonEditorTokens.d.ts.map +0 -1
- package/dist/jsonEditor/useJsonEditorTokens.js +0 -38
- package/dist/jsonEditor/useJsonEditorTokens.js.map +0 -1
- package/dist/mediaDragMime.d.ts +0 -17
- package/dist/mediaDragMime.d.ts.map +0 -1
- package/dist/mediaDragMime.js +0 -22
- package/dist/mediaDragMime.js.map +0 -1
- package/dist/recorder/RecorderButton.d.ts +0 -31
- package/dist/recorder/RecorderButton.d.ts.map +0 -1
- package/dist/recorder/RecorderButton.js +0 -24
- package/dist/recorder/RecorderButton.js.map +0 -1
- package/dist/recorder/RecorderModal.d.ts +0 -59
- package/dist/recorder/RecorderModal.d.ts.map +0 -1
- package/dist/recorder/RecorderModal.js +0 -333
- package/dist/recorder/RecorderModal.js.map +0 -1
- package/dist/recorder/RecorderPanel.d.ts +0 -25
- package/dist/recorder/RecorderPanel.d.ts.map +0 -1
- package/dist/recorder/RecorderPanel.js +0 -30
- package/dist/recorder/RecorderPanel.js.map +0 -1
- package/dist/recorder/formats.d.ts +0 -51
- package/dist/recorder/formats.d.ts.map +0 -1
- package/dist/recorder/formats.js +0 -144
- package/dist/recorder/formats.js.map +0 -1
- package/dist/recorder/hooks/useMediaRecorder.d.ts +0 -90
- package/dist/recorder/hooks/useMediaRecorder.d.ts.map +0 -1
- package/dist/recorder/hooks/useMediaRecorder.js +0 -277
- package/dist/recorder/hooks/useMediaRecorder.js.map +0 -1
- package/dist/recorder/hooks/useStreamPreview.d.ts +0 -22
- package/dist/recorder/hooks/useStreamPreview.d.ts.map +0 -1
- package/dist/recorder/hooks/useStreamPreview.js +0 -44
- package/dist/recorder/hooks/useStreamPreview.js.map +0 -1
- package/dist/recorder/sources/cameraStream.d.ts +0 -22
- package/dist/recorder/sources/cameraStream.d.ts.map +0 -1
- package/dist/recorder/sources/cameraStream.js +0 -24
- package/dist/recorder/sources/cameraStream.js.map +0 -1
- package/dist/recorder/sources/micStream.d.ts +0 -15
- package/dist/recorder/sources/micStream.d.ts.map +0 -1
- package/dist/recorder/sources/micStream.js +0 -24
- package/dist/recorder/sources/micStream.js.map +0 -1
- package/dist/recorder/sources/screenStream.d.ts +0 -53
- package/dist/recorder/sources/screenStream.d.ts.map +0 -1
- package/dist/recorder/sources/screenStream.js +0 -114
- package/dist/recorder/sources/screenStream.js.map +0 -1
- package/dist/recorder/timingJson.d.ts +0 -51
- package/dist/recorder/timingJson.d.ts.map +0 -1
- package/dist/recorder/timingJson.js +0 -42
- package/dist/recorder/timingJson.js.map +0 -1
- package/dist/tiptap/TiptapAudio.d.ts +0 -26
- package/dist/tiptap/TiptapAudio.d.ts.map +0 -1
- package/dist/tiptap/TiptapAudio.js +0 -58
- package/dist/tiptap/TiptapAudio.js.map +0 -1
- package/dist/tiptap/TiptapVideo.d.ts +0 -30
- package/dist/tiptap/TiptapVideo.d.ts.map +0 -1
- package/dist/tiptap/TiptapVideo.js +0 -66
- package/dist/tiptap/TiptapVideo.js.map +0 -1
- package/dist/tiptap/useResolvedMediaSrc.d.ts +0 -2
- package/dist/tiptap/useResolvedMediaSrc.d.ts.map +0 -1
- package/dist/tiptap/useResolvedMediaSrc.js +0 -42
- package/dist/tiptap/useResolvedMediaSrc.js.map +0 -1
- package/dist/tiptapBridge.d.ts +0 -24
- package/dist/tiptapBridge.d.ts.map +0 -1
- package/dist/tiptapBridge.js +0 -749
- package/dist/tiptapBridge.js.map +0 -1
- package/dist/useHeadingLayout.d.ts +0 -54
- package/dist/useHeadingLayout.d.ts.map +0 -1
- package/dist/useHeadingLayout.js +0 -260
- package/dist/useHeadingLayout.js.map +0 -1
- package/dist/utils/collectInlineFontAwesomeCss.d.ts +0 -21
- package/dist/utils/collectInlineFontAwesomeCss.d.ts.map +0 -1
- package/dist/utils/collectInlineFontAwesomeCss.js +0 -68
- package/dist/utils/collectInlineFontAwesomeCss.js.map +0 -1
- package/dist/utils/dropUtils.d.ts +0 -55
- package/dist/utils/dropUtils.d.ts.map +0 -1
- package/dist/utils/dropUtils.js +0 -110
- package/dist/utils/dropUtils.js.map +0 -1
- package/dist/utils/normalizeMalformedAssetUrl.d.ts +0 -15
- package/dist/utils/normalizeMalformedAssetUrl.d.ts.map +0 -1
- package/dist/utils/normalizeMalformedAssetUrl.js +0 -27
- package/dist/utils/normalizeMalformedAssetUrl.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bendyline/squisq-editor-react",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"description": "React editor shell with raw/WYSIWYG/preview modes for Squisq documents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bendyline",
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@bendyline/squisq": "1.4.
|
|
51
|
-
"@bendyline/squisq-formats": "1.3.
|
|
52
|
-
"@bendyline/squisq-react": "1.3.
|
|
50
|
+
"@bendyline/squisq": "1.4.1",
|
|
51
|
+
"@bendyline/squisq-formats": "1.3.1",
|
|
52
|
+
"@bendyline/squisq-react": "1.3.2",
|
|
53
53
|
"@fortawesome/fontawesome-free": "7.2.0",
|
|
54
54
|
"@monaco-editor/react": "4.7.0",
|
|
55
55
|
"@tiptap/extension-image": "2.27.2",
|
package/src/RawEditor.tsx
CHANGED
|
@@ -7,29 +7,30 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { useRef, useCallback, useEffect } from 'react';
|
|
10
|
-
import Editor, {
|
|
11
|
-
|
|
12
|
-
type OnMount,
|
|
13
|
-
type OnChange,
|
|
14
|
-
type BeforeMount,
|
|
15
|
-
} from '@monaco-editor/react';
|
|
16
|
-
import * as monaco from 'monaco-editor';
|
|
10
|
+
import Editor, { type OnMount, type OnChange, type BeforeMount } from '@monaco-editor/react';
|
|
11
|
+
import type * as monaco from 'monaco-editor';
|
|
17
12
|
import { useEditorContext } from './EditorContext';
|
|
18
13
|
import { getAvailableTemplates } from '@bendyline/squisq/doc';
|
|
19
14
|
import { suggestIcons, resolveIcon, iconGlyph } from '@bendyline/squisq/icons';
|
|
20
15
|
import { SQUISQ_MEDIA_MIME, parseSquisqMediaPayload } from './mediaDragMime';
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
import { useMonacoLoader } from './useMonacoLoader';
|
|
17
|
+
|
|
18
|
+
// Monaco is loaded lazily through `useMonacoLoader` (see the hook for the
|
|
19
|
+
// rationale). The type-only `import type * as monaco from 'monaco-editor'`
|
|
20
|
+
// above gives us `monaco.editor.IStandaloneCodeEditor`, `monaco.Range`,
|
|
21
|
+
// etc. for typing without pulling the package into the static module
|
|
22
|
+
// graph — which is the whole point: a consumer importing `JsonEditor` or
|
|
23
|
+
// a type from the package barrel no longer drags ~9MB of language
|
|
24
|
+
// services into the resolver.
|
|
23
25
|
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
26
|
+
// Consumers that *do* want the raw editor can still slim the bundle by
|
|
27
|
+
// aliasing `monaco-editor` to a custom entry in their bundler config.
|
|
28
|
+
// For example with Vite:
|
|
27
29
|
//
|
|
28
30
|
// resolve: { alias: [{ find: /^monaco-editor$/, replacement: './monaco-slim.ts' }] }
|
|
29
31
|
//
|
|
30
|
-
// Where monaco-slim.ts re-exports 'monaco-editor/esm/vs/editor/editor.api'
|
|
31
|
-
// only the language contributions needed (e.g. markdown, javascript
|
|
32
|
-
loader.config({ monaco });
|
|
32
|
+
// Where monaco-slim.ts re-exports 'monaco-editor/esm/vs/editor/editor.api'
|
|
33
|
+
// plus only the language contributions needed (e.g. markdown, javascript).
|
|
33
34
|
|
|
34
35
|
// Squisq Monaco themes: same syntax highlighting as vs / vs-dark, but with
|
|
35
36
|
// Monaco's internal gutter (line numbers + folding margin) and overview
|
|
@@ -83,6 +84,7 @@ export function RawEditor({
|
|
|
83
84
|
}: RawEditorProps) {
|
|
84
85
|
const { markdownSource, setMarkdownSource, setMonacoEditor, language, mentionProvider } =
|
|
85
86
|
useEditorContext();
|
|
87
|
+
const { monaco: monacoNs, ready: monacoReady } = useMonacoLoader();
|
|
86
88
|
const editorRef = useRef<monaco.editor.IStandaloneCodeEditor | null>(null);
|
|
87
89
|
const isExternalUpdate = useRef(false);
|
|
88
90
|
const completionDisposable = useRef<monaco.IDisposable | null>(null);
|
|
@@ -439,7 +441,10 @@ export function RawEditor({
|
|
|
439
441
|
// and weight; the codepoint character is the decoration's content.
|
|
440
442
|
useEffect(() => {
|
|
441
443
|
const editor = editorRef.current;
|
|
442
|
-
|
|
444
|
+
// `monacoNs` is read from the lazy loader's state rather than a
|
|
445
|
+
// top-level import. Re-run when it transitions from null → loaded
|
|
446
|
+
// so decorations show up the moment monaco is in hand.
|
|
447
|
+
if (!editor || !monacoNs) return;
|
|
443
448
|
if (language !== 'markdown') return;
|
|
444
449
|
const model = editor.getModel();
|
|
445
450
|
if (!model) return;
|
|
@@ -461,7 +466,7 @@ export function RawEditor({
|
|
|
461
466
|
// glyph as content prepended visually to that position.
|
|
462
467
|
const col = match.index + 1; // Monaco columns are 1-based
|
|
463
468
|
decorations.push({
|
|
464
|
-
range: new
|
|
469
|
+
range: new monacoNs.Range(line, col, line, col),
|
|
465
470
|
options: {
|
|
466
471
|
before: {
|
|
467
472
|
content: glyph,
|
|
@@ -477,10 +482,36 @@ export function RawEditor({
|
|
|
477
482
|
} else {
|
|
478
483
|
iconGlyphDecorations.current.set(decorations);
|
|
479
484
|
}
|
|
480
|
-
}, [markdownSource, language]);
|
|
485
|
+
}, [markdownSource, language, monacoNs]);
|
|
481
486
|
|
|
482
487
|
const effectiveTheme = SQUISQ_THEMES[theme] ?? theme;
|
|
483
488
|
|
|
489
|
+
// Wait for the lazy monaco namespace + `loader.config()` to settle
|
|
490
|
+
// before mounting `<Editor>`. Without this gate, the @monaco-editor/
|
|
491
|
+
// react singleton loader would fall back to its built-in CDN fetch
|
|
492
|
+
// for any consumer that hasn't aliased monaco-editor — which is the
|
|
493
|
+
// exact regression the lazy-loading move is meant to avoid.
|
|
494
|
+
if (!monacoReady) {
|
|
495
|
+
return (
|
|
496
|
+
<div
|
|
497
|
+
className={className}
|
|
498
|
+
style={{
|
|
499
|
+
width: '100%',
|
|
500
|
+
height: '100%',
|
|
501
|
+
display: 'flex',
|
|
502
|
+
alignItems: 'center',
|
|
503
|
+
justifyContent: 'center',
|
|
504
|
+
color: 'var(--squisq-editor-muted-foreground, #6a6258)',
|
|
505
|
+
fontSize: 13,
|
|
506
|
+
}}
|
|
507
|
+
data-testid="raw-editor"
|
|
508
|
+
data-monaco-loading
|
|
509
|
+
>
|
|
510
|
+
Loading editor…
|
|
511
|
+
</div>
|
|
512
|
+
);
|
|
513
|
+
}
|
|
514
|
+
|
|
484
515
|
return (
|
|
485
516
|
<div className={className} style={{ width: '100%', height: '100%' }} data-testid="raw-editor">
|
|
486
517
|
<Editor
|
|
@@ -11,10 +11,67 @@
|
|
|
11
11
|
* a provider that has `allowVersioning` and a `container`.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
14
|
+
import { useCallback, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react';
|
|
15
15
|
import { DiffEditor } from '@monaco-editor/react';
|
|
16
16
|
import type { Version } from '@bendyline/squisq/versions';
|
|
17
17
|
import { useEditorContext } from './EditorContext';
|
|
18
|
+
import { useMonacoLoader } from './useMonacoLoader';
|
|
19
|
+
|
|
20
|
+
interface LazyDiffEditorProps {
|
|
21
|
+
original: string;
|
|
22
|
+
modified: string;
|
|
23
|
+
theme: 'vs' | 'vs-dark';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const lazyLoadingStyle: CSSProperties = {
|
|
27
|
+
display: 'flex',
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
justifyContent: 'center',
|
|
30
|
+
width: '100%',
|
|
31
|
+
height: '100%',
|
|
32
|
+
color: 'var(--squisq-editor-muted-foreground, #6a6258)',
|
|
33
|
+
fontSize: 12,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Defers the `<DiffEditor>` mount until the lazy monaco namespace +
|
|
38
|
+
* `loader.config()` are in place. Without the gate, the
|
|
39
|
+
* `@monaco-editor/react` singleton loader would fall back to its CDN
|
|
40
|
+
* default for any consumer that hasn't already mounted `<RawEditor>`.
|
|
41
|
+
*
|
|
42
|
+
* This wrapper is what makes `useMonacoLoader` worth using here —
|
|
43
|
+
* VersionHistoryPanel itself is always present in the toolbar, so
|
|
44
|
+
* subscribing at its level would defeat the lazy-load. The hook only
|
|
45
|
+
* fires when a snapshot is actually selected.
|
|
46
|
+
*/
|
|
47
|
+
function LazyDiffEditor({ original, modified, theme }: LazyDiffEditorProps) {
|
|
48
|
+
const { ready } = useMonacoLoader();
|
|
49
|
+
if (!ready) {
|
|
50
|
+
return <div style={lazyLoadingStyle}>Loading diff…</div>;
|
|
51
|
+
}
|
|
52
|
+
return (
|
|
53
|
+
<DiffEditor
|
|
54
|
+
original={original}
|
|
55
|
+
modified={modified}
|
|
56
|
+
language="markdown"
|
|
57
|
+
theme={theme}
|
|
58
|
+
options={{
|
|
59
|
+
readOnly: true,
|
|
60
|
+
renderSideBySide: true,
|
|
61
|
+
minimap: { enabled: false },
|
|
62
|
+
scrollBeyondLastLine: false,
|
|
63
|
+
wordWrap: 'on',
|
|
64
|
+
automaticLayout: true,
|
|
65
|
+
fontSize: 12,
|
|
66
|
+
lineNumbers: 'off',
|
|
67
|
+
glyphMargin: false,
|
|
68
|
+
folding: false,
|
|
69
|
+
overviewRulerLanes: 0,
|
|
70
|
+
renderOverviewRuler: false,
|
|
71
|
+
}}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
18
75
|
|
|
19
76
|
interface PanelState {
|
|
20
77
|
loading: boolean;
|
|
@@ -206,25 +263,10 @@ export function VersionHistoryPanel() {
|
|
|
206
263
|
</span>
|
|
207
264
|
</div>
|
|
208
265
|
<div className="squisq-version-history-diff-body">
|
|
209
|
-
<
|
|
266
|
+
<LazyDiffEditor
|
|
210
267
|
original={state.selected.content}
|
|
211
268
|
modified={markdownSource}
|
|
212
|
-
language="markdown"
|
|
213
269
|
theme={diffTheme}
|
|
214
|
-
options={{
|
|
215
|
-
readOnly: true,
|
|
216
|
-
renderSideBySide: true,
|
|
217
|
-
minimap: { enabled: false },
|
|
218
|
-
scrollBeyondLastLine: false,
|
|
219
|
-
wordWrap: 'on',
|
|
220
|
-
automaticLayout: true,
|
|
221
|
-
fontSize: 12,
|
|
222
|
-
lineNumbers: 'off',
|
|
223
|
-
glyphMargin: false,
|
|
224
|
-
folding: false,
|
|
225
|
-
overviewRulerLanes: 0,
|
|
226
|
-
renderOverviewRuler: false,
|
|
227
|
-
}}
|
|
228
270
|
/>
|
|
229
271
|
</div>
|
|
230
272
|
</div>
|
|
@@ -344,7 +344,15 @@ export function useMediaRecorder(options: UseMediaRecorderOptions): UseMediaReco
|
|
|
344
344
|
|
|
345
345
|
// Final unmount cleanup — make sure we don't leak the camera light /
|
|
346
346
|
// screen-capture indicator if the component disappears mid-recording.
|
|
347
|
+
//
|
|
348
|
+
// `stopResolversRef.current` is captured at effect-run time into a
|
|
349
|
+
// local. That ref is initialized once at construction and never
|
|
350
|
+
// reassigned, so the local handle stays a live view onto the same
|
|
351
|
+
// mutable array — entries pushed by later `stop()` calls still
|
|
352
|
+
// appear here on cleanup. Capturing keeps `react-hooks/exhaustive-deps`
|
|
353
|
+
// satisfied without changing the runtime behavior.
|
|
347
354
|
useEffect(() => {
|
|
355
|
+
const pendingResolvers = stopResolversRef.current;
|
|
348
356
|
return () => {
|
|
349
357
|
const rec = recorderRef.current;
|
|
350
358
|
if (rec && rec.state !== 'inactive') {
|
|
@@ -356,7 +364,7 @@ export function useMediaRecorder(options: UseMediaRecorderOptions): UseMediaReco
|
|
|
356
364
|
}
|
|
357
365
|
releaseStream();
|
|
358
366
|
clearTicker();
|
|
359
|
-
|
|
367
|
+
pendingResolvers.splice(0).forEach((resolve) => resolve(null));
|
|
360
368
|
};
|
|
361
369
|
}, [releaseStream, clearTicker]);
|
|
362
370
|
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useMonacoLoader
|
|
3
|
+
*
|
|
4
|
+
* Idempotently dynamic-imports `monaco-editor` and points the
|
|
5
|
+
* `@monaco-editor/react` singleton loader at the bundled copy. Replaces
|
|
6
|
+
* the historical top-of-module `import * as monaco from 'monaco-editor';
|
|
7
|
+
* loader.config({ monaco })` pattern, which forced every consumer of
|
|
8
|
+
* `@bendyline/squisq-editor-react` — including ones that only import
|
|
9
|
+
* `JsonEditor` or a type — to drag in monaco's ~9MB worth of language
|
|
10
|
+
* services and workers at module evaluation time.
|
|
11
|
+
*
|
|
12
|
+
* Hosts that want the smallest possible bundle can keep aliasing
|
|
13
|
+
* `monaco-editor` to a slim entry as before; the behavior is identical
|
|
14
|
+
* once the dynamic import settles.
|
|
15
|
+
*
|
|
16
|
+
* The promise is cached at module scope so the first subscriber
|
|
17
|
+
* anywhere in the app pays the import cost and every later subscriber
|
|
18
|
+
* reuses the same settled value.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { useEffect, useState } from 'react';
|
|
22
|
+
import { loader } from '@monaco-editor/react';
|
|
23
|
+
|
|
24
|
+
/** In-flight (or settled) dynamic import shared across all callers. */
|
|
25
|
+
let monacoPromise: Promise<typeof import('monaco-editor')> | null = null;
|
|
26
|
+
|
|
27
|
+
/** Settled namespace once the promise resolves — read synchronously by mount-time consumers. */
|
|
28
|
+
let monacoNamespace: typeof import('monaco-editor') | null = null;
|
|
29
|
+
|
|
30
|
+
export interface UseMonacoLoaderResult {
|
|
31
|
+
/** The monaco namespace once loaded, or `null` while the import is in flight. */
|
|
32
|
+
monaco: typeof import('monaco-editor') | null;
|
|
33
|
+
/** Flips to `true` after the import settles. Gate `<Editor>` / `<DiffEditor>` renders on this. */
|
|
34
|
+
ready: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Subscribe to the lazy-loaded monaco namespace. The first caller
|
|
39
|
+
* triggers `import('monaco-editor')` and configures the
|
|
40
|
+
* `@monaco-editor/react` loader; subsequent callers receive the same
|
|
41
|
+
* cached value.
|
|
42
|
+
*/
|
|
43
|
+
export function useMonacoLoader(): UseMonacoLoaderResult {
|
|
44
|
+
const [state, setState] = useState<UseMonacoLoaderResult>(() => ({
|
|
45
|
+
monaco: monacoNamespace,
|
|
46
|
+
ready: monacoNamespace !== null,
|
|
47
|
+
}));
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (state.ready) return;
|
|
51
|
+
if (!monacoPromise) {
|
|
52
|
+
// Import the explicit ESM entry file rather than the bare
|
|
53
|
+
// package specifier `'monaco-editor'`. The package's
|
|
54
|
+
// `package.json` has no `main` / no `exports` (only `module`),
|
|
55
|
+
// which trips Vite's strict resolver on both static and
|
|
56
|
+
// dynamic imports of the bare name. Pointing at the file
|
|
57
|
+
// directly — the same path monaco's `module` field points at —
|
|
58
|
+
// turns this into a regular file-path resolve that doesn't
|
|
59
|
+
// care about the manifest's entry fields. Works identically
|
|
60
|
+
// in Vite dev / build, vitest's transform pipeline, and any
|
|
61
|
+
// bundler-using downstream consumer.
|
|
62
|
+
monacoPromise = (
|
|
63
|
+
import('monaco-editor/esm/vs/editor/editor.api.js') as unknown as Promise<
|
|
64
|
+
typeof import('monaco-editor')
|
|
65
|
+
>
|
|
66
|
+
).then((m) => {
|
|
67
|
+
loader.config({ monaco: m });
|
|
68
|
+
monacoNamespace = m;
|
|
69
|
+
return m;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
let cancelled = false;
|
|
73
|
+
void monacoPromise.then((m) => {
|
|
74
|
+
if (cancelled) return;
|
|
75
|
+
setState({ monaco: m, ready: true });
|
|
76
|
+
});
|
|
77
|
+
return () => {
|
|
78
|
+
cancelled = true;
|
|
79
|
+
};
|
|
80
|
+
}, [state.ready]);
|
|
81
|
+
|
|
82
|
+
return state;
|
|
83
|
+
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DocumentSettingsDialog
|
|
3
|
-
*
|
|
4
|
-
* Modal editor for the frontmatter values that Squisq currently
|
|
5
|
-
* understands: document title plus the persisted preview keys
|
|
6
|
-
* (`squisq-theme`, `squisq-transform`, `squisq-captions`). Writes back
|
|
7
|
-
* to the same `setFrontmatterValues` channel that `PreviewControls`
|
|
8
|
-
* uses, so any change made here is reflected in the play-mode controls
|
|
9
|
-
* (and vice versa).
|
|
10
|
-
*
|
|
11
|
-
* Title behavior: the placeholder shows the title that
|
|
12
|
-
* `inferDocumentTitle()` would derive from frontmatter or headings.
|
|
13
|
-
* When the user-entered title is empty or equal to the inferred title,
|
|
14
|
-
* the `title:` key is removed from frontmatter — there's no point
|
|
15
|
-
* storing a redundant value.
|
|
16
|
-
*/
|
|
17
|
-
export interface DocumentSettingsDialogProps {
|
|
18
|
-
/** Current markdown source string (frontmatter + body). */
|
|
19
|
-
markdownSource: string;
|
|
20
|
-
/** Called with the rewritten source after the user clicks Save. */
|
|
21
|
-
onSave: (nextSource: string) => void;
|
|
22
|
-
/** Called when the dialog is dismissed (Cancel, Escape, backdrop click). */
|
|
23
|
-
onClose: () => void;
|
|
24
|
-
}
|
|
25
|
-
export declare function DocumentSettingsDialog({ markdownSource, onSave, onClose, }: DocumentSettingsDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
-
//# sourceMappingURL=DocumentSettingsDialog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentSettingsDialog.d.ts","sourceRoot":"","sources":["../src/DocumentSettingsDialog.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuCH,MAAM,WAAW,2BAA2B;IAC1C,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAID,wBAAgB,sBAAsB,CAAC,EACrC,cAAc,EACd,MAAM,EACN,OAAO,GACR,EAAE,2BAA2B,2CAoM7B"}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* DocumentSettingsDialog
|
|
4
|
-
*
|
|
5
|
-
* Modal editor for the frontmatter values that Squisq currently
|
|
6
|
-
* understands: document title plus the persisted preview keys
|
|
7
|
-
* (`squisq-theme`, `squisq-transform`, `squisq-captions`). Writes back
|
|
8
|
-
* to the same `setFrontmatterValues` channel that `PreviewControls`
|
|
9
|
-
* uses, so any change made here is reflected in the play-mode controls
|
|
10
|
-
* (and vice versa).
|
|
11
|
-
*
|
|
12
|
-
* Title behavior: the placeholder shows the title that
|
|
13
|
-
* `inferDocumentTitle()` would derive from frontmatter or headings.
|
|
14
|
-
* When the user-entered title is empty or equal to the inferred title,
|
|
15
|
-
* the `title:` key is removed from frontmatter — there's no point
|
|
16
|
-
* storing a redundant value.
|
|
17
|
-
*/
|
|
18
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
19
|
-
import { inferDocumentTitle, parseMarkdown, setFrontmatterValues, } from '@bendyline/squisq/markdown';
|
|
20
|
-
import { getTransformStyleSummaries } from '@bendyline/squisq/transform';
|
|
21
|
-
import { ThemePicker } from './ThemePicker';
|
|
22
|
-
// ── Frontmatter key constants ─────────────────────────────────────
|
|
23
|
-
/** Mirror of `FM_KEYS` in PreviewControls.tsx. Canonical names are the
|
|
24
|
-
* ones we write; legacy aliases are still read so older docs work. */
|
|
25
|
-
const FM = {
|
|
26
|
-
theme: { canonical: 'squisq-theme', legacy: 'theme' },
|
|
27
|
-
transform: { canonical: 'squisq-transform', legacy: 'transform-style' },
|
|
28
|
-
captions: { canonical: 'squisq-captions', legacy: 'caption-style' },
|
|
29
|
-
};
|
|
30
|
-
function readFm(fm, canonical, legacy) {
|
|
31
|
-
if (!fm)
|
|
32
|
-
return '';
|
|
33
|
-
const v = Object.prototype.hasOwnProperty.call(fm, canonical) ? fm[canonical] : fm[legacy];
|
|
34
|
-
return typeof v === 'string' ? v : '';
|
|
35
|
-
}
|
|
36
|
-
const CAPTION_OPTIONS = [
|
|
37
|
-
{ key: '', label: 'Default (Standard)' },
|
|
38
|
-
{ key: 'standard', label: 'Standard' },
|
|
39
|
-
{ key: 'social', label: 'Social' },
|
|
40
|
-
];
|
|
41
|
-
// ── Component ─────────────────────────────────────────────────────
|
|
42
|
-
export function DocumentSettingsDialog({ markdownSource, onSave, onClose, }) {
|
|
43
|
-
// Parse once at open; further edits flow through local form state and
|
|
44
|
-
// are committed in a single `setFrontmatterValues` call on Save.
|
|
45
|
-
const parsed = useMemo(() => parseMarkdown(markdownSource), [markdownSource]);
|
|
46
|
-
const frontmatter = parsed.frontmatter;
|
|
47
|
-
const inferredTitle = useMemo(() => inferDocumentTitle(parsed), [parsed]);
|
|
48
|
-
const currentTitle = typeof frontmatter?.title === 'string' ? frontmatter.title : '';
|
|
49
|
-
const currentTheme = readFm(frontmatter, FM.theme.canonical, FM.theme.legacy);
|
|
50
|
-
const currentTransform = readFm(frontmatter, FM.transform.canonical, FM.transform.legacy);
|
|
51
|
-
const currentCaptions = readFm(frontmatter, FM.captions.canonical, FM.captions.legacy);
|
|
52
|
-
const [title, setTitle] = useState(currentTitle);
|
|
53
|
-
const [theme, setTheme] = useState(currentTheme);
|
|
54
|
-
const [transform, setTransform] = useState(currentTransform);
|
|
55
|
-
const [captions, setCaptions] = useState(currentCaptions);
|
|
56
|
-
const titleRef = useRef(null);
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
titleRef.current?.focus();
|
|
59
|
-
titleRef.current?.select();
|
|
60
|
-
}, []);
|
|
61
|
-
// Esc closes; click on backdrop closes (but not on dialog itself).
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
const onKey = (e) => {
|
|
64
|
-
if (e.key === 'Escape')
|
|
65
|
-
onClose();
|
|
66
|
-
};
|
|
67
|
-
document.addEventListener('keydown', onKey);
|
|
68
|
-
return () => document.removeEventListener('keydown', onKey);
|
|
69
|
-
}, [onClose]);
|
|
70
|
-
const handleBackdrop = useCallback((e) => {
|
|
71
|
-
if (e.target === e.currentTarget)
|
|
72
|
-
onClose();
|
|
73
|
-
}, [onClose]);
|
|
74
|
-
// Dropdown options — built once per render; cheap.
|
|
75
|
-
const transformOptions = useMemo(() => [
|
|
76
|
-
{ key: '', label: 'None' },
|
|
77
|
-
...getTransformStyleSummaries().map((s) => ({ key: s.id, label: s.name })),
|
|
78
|
-
], []);
|
|
79
|
-
const handleSave = useCallback((e) => {
|
|
80
|
-
e.preventDefault();
|
|
81
|
-
const trimmedTitle = title.trim();
|
|
82
|
-
const titleMatchesInferred = !!inferredTitle && trimmedTitle === inferredTitle;
|
|
83
|
-
// Empty input OR matches the value we'd infer otherwise → no
|
|
84
|
-
// explicit title needed in frontmatter.
|
|
85
|
-
const nextTitle = !trimmedTitle || titleMatchesInferred ? null : trimmedTitle;
|
|
86
|
-
const updates = {
|
|
87
|
-
title: nextTitle,
|
|
88
|
-
[FM.theme.canonical]: theme || null,
|
|
89
|
-
// Legacy `theme` key would shadow our canonical one — clear it
|
|
90
|
-
// when the user changes the theme so the canonical write wins.
|
|
91
|
-
...(currentTheme && theme !== currentTheme ? { [FM.theme.legacy]: null } : {}),
|
|
92
|
-
[FM.transform.canonical]: transform || null,
|
|
93
|
-
...(currentTransform && transform !== currentTransform
|
|
94
|
-
? { [FM.transform.legacy]: null }
|
|
95
|
-
: {}),
|
|
96
|
-
[FM.captions.canonical]: captions || null,
|
|
97
|
-
...(currentCaptions && captions !== currentCaptions ? { [FM.captions.legacy]: null } : {}),
|
|
98
|
-
};
|
|
99
|
-
const nextSource = setFrontmatterValues(markdownSource, updates);
|
|
100
|
-
onSave(nextSource);
|
|
101
|
-
}, [
|
|
102
|
-
title,
|
|
103
|
-
theme,
|
|
104
|
-
transform,
|
|
105
|
-
captions,
|
|
106
|
-
inferredTitle,
|
|
107
|
-
markdownSource,
|
|
108
|
-
currentTheme,
|
|
109
|
-
currentTransform,
|
|
110
|
-
currentCaptions,
|
|
111
|
-
onSave,
|
|
112
|
-
]);
|
|
113
|
-
return (_jsx("div", { className: "squisq-doc-settings-overlay", onMouseDown: handleBackdrop, children: _jsxs("form", { className: "squisq-doc-settings-dialog", onSubmit: handleSave, children: [_jsxs("div", { className: "squisq-doc-settings-header", children: [_jsx("h2", { className: "squisq-doc-settings-title", children: "Document settings" }), _jsx("button", { type: "button", className: "squisq-doc-settings-close", onClick: onClose, "aria-label": "Close", children: "\u00D7" })] }), _jsxs("div", { className: "squisq-doc-settings-body", children: [_jsxs("div", { className: "squisq-doc-settings-field", children: [_jsx("label", { className: "squisq-doc-settings-label", htmlFor: "squisq-doc-settings-title", children: "Title" }), _jsx("input", { ref: titleRef, id: "squisq-doc-settings-title", type: "text", className: "squisq-doc-settings-input", value: title, onChange: (e) => setTitle(e.target.value), placeholder: inferredTitle ?? 'Document title', spellCheck: true }), inferredTitle ? (_jsxs("span", { className: "squisq-doc-settings-hint", children: ["Defaults to ", _jsx("strong", { children: inferredTitle }), " \u2014 leave blank to use it."] })) : (_jsx("span", { className: "squisq-doc-settings-hint", children: "No title heading found \u2014 set one here or add an H1 to the document." }))] }), _jsxs("div", { className: "squisq-doc-settings-field", children: [_jsx("span", { className: "squisq-doc-settings-label", children: "Theme" }), _jsx(ThemePicker, { value: theme, onChange: setTheme, includeDefault: true, variant: "full", ariaLabel: "Theme" })] }), _jsxs("div", { className: "squisq-doc-settings-field", children: [_jsx("label", { className: "squisq-doc-settings-label", htmlFor: "squisq-doc-settings-transform", children: "Transform" }), _jsx("select", { id: "squisq-doc-settings-transform", className: "squisq-doc-settings-input", value: transform, onChange: (e) => setTransform(e.target.value), children: transformOptions.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) })] }), _jsxs("div", { className: "squisq-doc-settings-field", children: [_jsx("label", { className: "squisq-doc-settings-label", htmlFor: "squisq-doc-settings-captions", children: "Captions" }), _jsx("select", { id: "squisq-doc-settings-captions", className: "squisq-doc-settings-input", value: captions, onChange: (e) => setCaptions(e.target.value), children: CAPTION_OPTIONS.map((o) => (_jsx("option", { value: o.key, children: o.label }, o.key))) })] })] }), _jsxs("div", { className: "squisq-doc-settings-footer", children: [_jsx("button", { type: "button", className: "squisq-doc-settings-btn squisq-doc-settings-btn--secondary", onClick: onClose, children: "Cancel" }), _jsx("button", { type: "submit", className: "squisq-doc-settings-btn squisq-doc-settings-btn--primary", children: "Save" })] })] }) }));
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=DocumentSettingsDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentSettingsDialog.js","sourceRoot":"","sources":["../src/DocumentSettingsDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DropZoneOverlay
|
|
3
|
-
*
|
|
4
|
-
* Full-editor overlay that appears when files are dragged over the editor.
|
|
5
|
-
* Shows contextual drop zones depending on the type of files being dragged:
|
|
6
|
-
* - Media files → single "Media" drop zone
|
|
7
|
-
* - Text files → two zones: "Insert" (at cursor) and "Replace" (all content)
|
|
8
|
-
* - Mixed files → all three zones
|
|
9
|
-
*/
|
|
10
|
-
import type { DragContentType, UseFileDropResult } from './hooks/useFileDrop';
|
|
11
|
-
export interface DropZoneOverlayProps {
|
|
12
|
-
/** What kind of content is being dragged */
|
|
13
|
-
dragContentType: DragContentType;
|
|
14
|
-
/** Factory that creates event props for a specific drop target */
|
|
15
|
-
zoneProps: UseFileDropResult['zoneProps'];
|
|
16
|
-
/** Whether a MediaProvider is available (disables media zone when false) */
|
|
17
|
-
hasMediaProvider: boolean;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Full-size overlay with contextual drop targets for file uploads.
|
|
21
|
-
* Rendered conditionally by EditorShell when files are dragged over the editor.
|
|
22
|
-
*/
|
|
23
|
-
export declare function DropZoneOverlay({ dragContentType, zoneProps, hasMediaProvider, }: DropZoneOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
-
//# sourceMappingURL=DropZoneOverlay.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropZoneOverlay.d.ts","sourceRoot":"","sources":["../src/DropZoneOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAc,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE1F,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,eAAe,EAAE,eAAe,CAAC;IACjC,kEAAkE;IAClE,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC1C,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,eAAe,EACf,SAAS,EACT,gBAAgB,GACjB,EAAE,oBAAoB,2CAyCtB"}
|
package/dist/DropZoneOverlay.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* DropZoneOverlay
|
|
4
|
-
*
|
|
5
|
-
* Full-editor overlay that appears when files are dragged over the editor.
|
|
6
|
-
* Shows contextual drop zones depending on the type of files being dragged:
|
|
7
|
-
* - Media files → single "Media" drop zone
|
|
8
|
-
* - Text files → two zones: "Insert" (at cursor) and "Replace" (all content)
|
|
9
|
-
* - Mixed files → all three zones
|
|
10
|
-
*/
|
|
11
|
-
import { useState } from 'react';
|
|
12
|
-
/**
|
|
13
|
-
* Full-size overlay with contextual drop targets for file uploads.
|
|
14
|
-
* Rendered conditionally by EditorShell when files are dragged over the editor.
|
|
15
|
-
*/
|
|
16
|
-
export function DropZoneOverlay({ dragContentType, zoneProps, hasMediaProvider, }) {
|
|
17
|
-
const showMedia = dragContentType === 'media' || dragContentType === 'mixed';
|
|
18
|
-
const showText = dragContentType === 'text' || dragContentType === 'mixed';
|
|
19
|
-
return (_jsx("div", { className: "squisq-drop-overlay", children: _jsxs("div", { className: "squisq-drop-overlay-inner", children: [showMedia && (_jsx(DropZone, { target: "media", zoneProps: zoneProps, icon: "\uD83D\uDCF7", label: "Media", description: hasMediaProvider ? 'Add to file bin' : 'No file storage configured', disabled: !hasMediaProvider, variant: "media" })), showText && (_jsxs(_Fragment, { children: [_jsx(DropZone, { target: "insert", zoneProps: zoneProps, icon: "\uD83D\uDCCB", label: "Insert", description: "Insert content at cursor", variant: "insert" }), _jsx(DropZone, { target: "replace", zoneProps: zoneProps, icon: "\uD83D\uDD04", label: "Replace", description: "Replace all editor content", variant: "replace" })] }))] }) }));
|
|
20
|
-
}
|
|
21
|
-
function DropZone({ target, zoneProps, icon, label, description, disabled, variant, }) {
|
|
22
|
-
const [isHovering, setIsHovering] = useState(false);
|
|
23
|
-
const props = zoneProps(target);
|
|
24
|
-
return (_jsxs("div", { className: [
|
|
25
|
-
'squisq-drop-zone',
|
|
26
|
-
`squisq-drop-zone--${variant}`,
|
|
27
|
-
isHovering && !disabled ? 'squisq-drop-zone--active' : '',
|
|
28
|
-
disabled ? 'squisq-drop-zone--disabled' : '',
|
|
29
|
-
]
|
|
30
|
-
.filter(Boolean)
|
|
31
|
-
.join(' '), onDragOver: (e) => {
|
|
32
|
-
if (disabled) {
|
|
33
|
-
e.preventDefault();
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
props.onDragOver(e);
|
|
37
|
-
}, onDragEnter: (e) => {
|
|
38
|
-
e.preventDefault();
|
|
39
|
-
if (!disabled)
|
|
40
|
-
setIsHovering(true);
|
|
41
|
-
}, onDragLeave: (e) => {
|
|
42
|
-
e.preventDefault();
|
|
43
|
-
setIsHovering(false);
|
|
44
|
-
}, onDrop: (e) => {
|
|
45
|
-
setIsHovering(false);
|
|
46
|
-
if (disabled) {
|
|
47
|
-
e.preventDefault();
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
props.onDrop(e);
|
|
51
|
-
}, children: [_jsx("span", { className: "squisq-drop-zone-icon", children: icon }), _jsx("span", { className: "squisq-drop-zone-label", children: label }), _jsx("span", { className: "squisq-drop-zone-desc", children: description })] }));
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=DropZoneOverlay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropZoneOverlay.js","sourceRoot":"","sources":["../src/DropZoneOverlay.tsx"],"names":[],"mappings":"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"}
|