@bendyline/squisq-editor-react 1.3.0 → 1.5.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/dist/DocumentSettingsDialog.d.ts +26 -0
- package/dist/DocumentSettingsDialog.d.ts.map +1 -0
- package/dist/DocumentSettingsDialog.js +115 -0
- package/dist/DocumentSettingsDialog.js.map +1 -0
- package/dist/EditorContext.d.ts +248 -4
- package/dist/EditorContext.d.ts.map +1 -1
- package/dist/EditorContext.js +248 -10
- package/dist/EditorContext.js.map +1 -1
- package/dist/EditorShell.d.ts +184 -4
- package/dist/EditorShell.d.ts.map +1 -1
- package/dist/EditorShell.js +184 -12
- package/dist/EditorShell.js.map +1 -1
- package/dist/EmojiPicker.d.ts +50 -0
- package/dist/EmojiPicker.d.ts.map +1 -0
- package/dist/EmojiPicker.js +182 -0
- package/dist/EmojiPicker.js.map +1 -0
- package/dist/ImageEditor.d.ts +68 -0
- package/dist/ImageEditor.d.ts.map +1 -0
- package/dist/ImageEditor.js +166 -0
- package/dist/ImageEditor.js.map +1 -0
- package/dist/ImageNodeView.d.ts +13 -1
- package/dist/ImageNodeView.d.ts.map +1 -1
- package/dist/ImageNodeView.js +172 -19
- package/dist/ImageNodeView.js.map +1 -1
- package/dist/ImageViewer.d.ts +26 -0
- package/dist/ImageViewer.d.ts.map +1 -0
- package/dist/ImageViewer.js +119 -0
- package/dist/ImageViewer.js.map +1 -0
- package/dist/InlineIcon.d.ts +17 -0
- package/dist/InlineIcon.d.ts.map +1 -0
- package/dist/InlineIcon.js +72 -0
- package/dist/InlineIcon.js.map +1 -0
- package/dist/InlinePreviewGutter.d.ts +52 -0
- package/dist/InlinePreviewGutter.d.ts.map +1 -0
- package/dist/InlinePreviewGutter.js +397 -0
- package/dist/InlinePreviewGutter.js.map +1 -0
- package/dist/LinkDialog.d.ts +43 -0
- package/dist/LinkDialog.d.ts.map +1 -0
- package/dist/LinkDialog.js +102 -0
- package/dist/LinkDialog.js.map +1 -0
- package/dist/MediaBin.d.ts +12 -1
- package/dist/MediaBin.d.ts.map +1 -1
- package/dist/MediaBin.js +13 -3
- package/dist/MediaBin.js.map +1 -1
- package/dist/MentionExtension.js +10 -7
- package/dist/MentionExtension.js.map +1 -1
- package/dist/OutlinePanel.d.ts +17 -0
- package/dist/OutlinePanel.d.ts.map +1 -0
- package/dist/OutlinePanel.js +167 -0
- package/dist/OutlinePanel.js.map +1 -0
- package/dist/PlainHtmlPreview.d.ts +50 -0
- package/dist/PlainHtmlPreview.d.ts.map +1 -0
- package/dist/PlainHtmlPreview.js +155 -0
- package/dist/PlainHtmlPreview.js.map +1 -0
- package/dist/PreviewControls.d.ts +15 -1
- package/dist/PreviewControls.d.ts.map +1 -1
- package/dist/PreviewControls.js +75 -18
- package/dist/PreviewControls.js.map +1 -1
- package/dist/PreviewPanel.d.ts +11 -10
- package/dist/PreviewPanel.d.ts.map +1 -1
- package/dist/PreviewPanel.js +20 -17
- package/dist/PreviewPanel.js.map +1 -1
- package/dist/RawEditor.d.ts.map +1 -1
- package/dist/RawEditor.js +198 -4
- package/dist/RawEditor.js.map +1 -1
- package/dist/RecorderEntry.d.ts +24 -0
- package/dist/RecorderEntry.d.ts.map +1 -0
- package/dist/RecorderEntry.js +139 -0
- package/dist/RecorderEntry.js.map +1 -0
- package/dist/TemplateAnnotation.d.ts.map +1 -1
- package/dist/TemplateAnnotation.js +32 -6
- package/dist/TemplateAnnotation.js.map +1 -1
- package/dist/TemplatePicker.d.ts +53 -0
- package/dist/TemplatePicker.d.ts.map +1 -0
- package/dist/TemplatePicker.js +388 -0
- package/dist/TemplatePicker.js.map +1 -0
- package/dist/ThemeCustomizerPanel.d.ts +32 -0
- package/dist/ThemeCustomizerPanel.d.ts.map +1 -0
- package/dist/ThemeCustomizerPanel.js +256 -0
- package/dist/ThemeCustomizerPanel.js.map +1 -0
- package/dist/ThemePicker.d.ts +33 -0
- package/dist/ThemePicker.d.ts.map +1 -0
- package/dist/ThemePicker.js +148 -0
- package/dist/ThemePicker.js.map +1 -0
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +508 -33
- package/dist/Toolbar.js.map +1 -1
- package/dist/VersionHistoryPanel.d.ts +14 -0
- package/dist/VersionHistoryPanel.d.ts.map +1 -0
- package/dist/VersionHistoryPanel.js +147 -0
- package/dist/VersionHistoryPanel.js.map +1 -0
- package/dist/ViewMenuPanel.d.ts +13 -0
- package/dist/ViewMenuPanel.d.ts.map +1 -0
- package/dist/ViewMenuPanel.js +58 -0
- package/dist/ViewMenuPanel.js.map +1 -0
- package/dist/WysiwygEditor.d.ts.map +1 -1
- package/dist/WysiwygEditor.js +198 -9
- package/dist/WysiwygEditor.js.map +1 -1
- package/dist/__tests__/detectMarkdown.test.js +0 -14
- package/dist/__tests__/detectMarkdown.test.js.map +1 -1
- package/dist/__tests__/documentSettingsDialog.test.d.ts +2 -0
- package/dist/__tests__/documentSettingsDialog.test.d.ts.map +1 -0
- package/dist/__tests__/documentSettingsDialog.test.js +132 -0
- package/dist/__tests__/documentSettingsDialog.test.js.map +1 -0
- package/dist/__tests__/emojiPicker.test.d.ts +2 -0
- package/dist/__tests__/emojiPicker.test.d.ts.map +1 -0
- package/dist/__tests__/emojiPicker.test.js +111 -0
- package/dist/__tests__/emojiPicker.test.js.map +1 -0
- package/dist/__tests__/fileKind.test.js +13 -0
- package/dist/__tests__/fileKind.test.js.map +1 -1
- package/dist/__tests__/imageEditAffordance.test.d.ts +2 -0
- package/dist/__tests__/imageEditAffordance.test.d.ts.map +1 -0
- package/dist/__tests__/imageEditAffordance.test.js +188 -0
- package/dist/__tests__/imageEditAffordance.test.js.map +1 -0
- package/dist/__tests__/imageEditorShell.test.d.ts +2 -0
- package/dist/__tests__/imageEditorShell.test.d.ts.map +1 -0
- package/dist/__tests__/imageEditorShell.test.js +52 -0
- package/dist/__tests__/imageEditorShell.test.js.map +1 -0
- package/dist/__tests__/imageEditorState.test.d.ts +3 -0
- package/dist/__tests__/imageEditorState.test.d.ts.map +1 -0
- package/dist/__tests__/imageEditorState.test.js +148 -0
- package/dist/__tests__/imageEditorState.test.js.map +1 -0
- package/dist/__tests__/inlinePreviewGutter.test.d.ts +2 -0
- package/dist/__tests__/inlinePreviewGutter.test.d.ts.map +1 -0
- package/dist/__tests__/inlinePreviewGutter.test.js +51 -0
- package/dist/__tests__/inlinePreviewGutter.test.js.map +1 -0
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts +2 -0
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.d.ts.map +1 -0
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js +63 -0
- package/dist/__tests__/inlinePreviewGutterAllBlocks.test.js.map +1 -0
- package/dist/__tests__/jsonEditor.test.d.ts +2 -0
- package/dist/__tests__/jsonEditor.test.d.ts.map +1 -0
- package/dist/__tests__/jsonEditor.test.js +134 -0
- package/dist/__tests__/jsonEditor.test.js.map +1 -0
- package/dist/__tests__/layersPanel.test.d.ts +2 -0
- package/dist/__tests__/layersPanel.test.d.ts.map +1 -0
- package/dist/__tests__/layersPanel.test.js +84 -0
- package/dist/__tests__/layersPanel.test.js.map +1 -0
- package/dist/__tests__/linkDialogDocPicker.test.d.ts +7 -0
- package/dist/__tests__/linkDialogDocPicker.test.d.ts.map +1 -0
- package/dist/__tests__/linkDialogDocPicker.test.js +75 -0
- package/dist/__tests__/linkDialogDocPicker.test.js.map +1 -0
- package/dist/__tests__/mediaAttachmentFlow.test.d.ts +2 -0
- package/dist/__tests__/mediaAttachmentFlow.test.d.ts.map +1 -0
- package/dist/__tests__/mediaAttachmentFlow.test.js +99 -0
- package/dist/__tests__/mediaAttachmentFlow.test.js.map +1 -0
- package/dist/__tests__/outlinePanel.test.d.ts +2 -0
- package/dist/__tests__/outlinePanel.test.d.ts.map +1 -0
- package/dist/__tests__/outlinePanel.test.js +68 -0
- package/dist/__tests__/outlinePanel.test.js.map +1 -0
- package/dist/__tests__/plainHtmlPreview.test.d.ts +2 -0
- package/dist/__tests__/plainHtmlPreview.test.d.ts.map +1 -0
- package/dist/__tests__/plainHtmlPreview.test.js +87 -0
- package/dist/__tests__/plainHtmlPreview.test.js.map +1 -0
- package/dist/__tests__/propertiesPanel.test.d.ts +2 -0
- package/dist/__tests__/propertiesPanel.test.d.ts.map +1 -0
- package/dist/__tests__/propertiesPanel.test.js +64 -0
- package/dist/__tests__/propertiesPanel.test.js.map +1 -0
- package/dist/__tests__/recorderFormats.test.d.ts +2 -0
- package/dist/__tests__/recorderFormats.test.d.ts.map +1 -0
- package/dist/__tests__/recorderFormats.test.js +121 -0
- package/dist/__tests__/recorderFormats.test.js.map +1 -0
- package/dist/__tests__/recorderTimingJson.test.d.ts +2 -0
- package/dist/__tests__/recorderTimingJson.test.d.ts.map +1 -0
- package/dist/__tests__/recorderTimingJson.test.js +37 -0
- package/dist/__tests__/recorderTimingJson.test.js.map +1 -0
- package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts +2 -0
- package/dist/__tests__/templateAnnotationRoundTrip.test.d.ts.map +1 -0
- package/dist/__tests__/templateAnnotationRoundTrip.test.js +31 -0
- package/dist/__tests__/templateAnnotationRoundTrip.test.js.map +1 -0
- package/dist/__tests__/tiptapBridge.test.js +26 -0
- package/dist/__tests__/tiptapBridge.test.js.map +1 -1
- package/dist/__tests__/tiptapImageRoundTrip.test.d.ts +2 -0
- package/dist/__tests__/tiptapImageRoundTrip.test.d.ts.map +1 -0
- package/dist/__tests__/tiptapImageRoundTrip.test.js +68 -0
- package/dist/__tests__/tiptapImageRoundTrip.test.js.map +1 -0
- package/dist/__tests__/useImageEditor.test.d.ts +2 -0
- package/dist/__tests__/useImageEditor.test.d.ts.map +1 -0
- package/dist/__tests__/useImageEditor.test.js +131 -0
- package/dist/__tests__/useImageEditor.test.js.map +1 -0
- package/dist/__tests__/useMediaRecorder.test.d.ts +2 -0
- package/dist/__tests__/useMediaRecorder.test.d.ts.map +1 -0
- package/dist/__tests__/useMediaRecorder.test.js +153 -0
- package/dist/__tests__/useMediaRecorder.test.js.map +1 -0
- package/dist/__tests__/versionHistory.test.d.ts +2 -0
- package/dist/__tests__/versionHistory.test.d.ts.map +1 -0
- package/dist/__tests__/versionHistory.test.js +124 -0
- package/dist/__tests__/versionHistory.test.js.map +1 -0
- package/dist/blockSlice.d.ts +24 -0
- package/dist/blockSlice.d.ts.map +1 -0
- package/dist/blockSlice.js +63 -0
- package/dist/blockSlice.js.map +1 -0
- package/dist/buildPreviewDoc.d.ts.map +1 -1
- package/dist/buildPreviewDoc.js +52 -2
- package/dist/buildPreviewDoc.js.map +1 -1
- package/dist/emojiData.d.ts +81 -0
- package/dist/emojiData.d.ts.map +1 -0
- package/dist/emojiData.js +1283 -0
- package/dist/emojiData.js.map +1 -0
- package/dist/fileKind.d.ts +6 -2
- package/dist/fileKind.d.ts.map +1 -1
- package/dist/fileKind.js +25 -4
- package/dist/fileKind.js.map +1 -1
- package/dist/hooks/useFileDrop.d.ts.map +1 -1
- package/dist/hooks/useFileDrop.js +40 -4
- package/dist/hooks/useFileDrop.js.map +1 -1
- package/dist/imageEditor/CanvasSurface.d.ts +31 -0
- package/dist/imageEditor/CanvasSurface.d.ts.map +1 -0
- package/dist/imageEditor/CanvasSurface.js +264 -0
- package/dist/imageEditor/CanvasSurface.js.map +1 -0
- package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts +39 -0
- package/dist/imageEditor/ImageVersionHistoryDropdown.d.ts.map +1 -0
- package/dist/imageEditor/ImageVersionHistoryDropdown.js +283 -0
- package/dist/imageEditor/ImageVersionHistoryDropdown.js.map +1 -0
- package/dist/imageEditor/LayersPanel.d.ts +14 -0
- package/dist/imageEditor/LayersPanel.d.ts.map +1 -0
- package/dist/imageEditor/LayersPanel.js +43 -0
- package/dist/imageEditor/LayersPanel.js.map +1 -0
- package/dist/imageEditor/PropertiesPanel.d.ts +14 -0
- package/dist/imageEditor/PropertiesPanel.d.ts.map +1 -0
- package/dist/imageEditor/PropertiesPanel.js +97 -0
- package/dist/imageEditor/PropertiesPanel.js.map +1 -0
- package/dist/imageEditor/Toolbar.d.ts +30 -0
- package/dist/imageEditor/Toolbar.d.ts.map +1 -0
- package/dist/imageEditor/Toolbar.js +108 -0
- package/dist/imageEditor/Toolbar.js.map +1 -0
- package/dist/imageEditor/icons.d.ts +24 -0
- package/dist/imageEditor/icons.d.ts.map +1 -0
- package/dist/imageEditor/icons.js +45 -0
- package/dist/imageEditor/icons.js.map +1 -0
- package/dist/imageEditor/layers/EditorImageLayer.d.ts +16 -0
- package/dist/imageEditor/layers/EditorImageLayer.d.ts.map +1 -0
- package/dist/imageEditor/layers/EditorImageLayer.js +37 -0
- package/dist/imageEditor/layers/EditorImageLayer.js.map +1 -0
- package/dist/imageEditor/layers/EditorShapeLayer.d.ts +15 -0
- package/dist/imageEditor/layers/EditorShapeLayer.d.ts.map +1 -0
- package/dist/imageEditor/layers/EditorShapeLayer.js +20 -0
- package/dist/imageEditor/layers/EditorShapeLayer.js.map +1 -0
- package/dist/imageEditor/layers/EditorTextLayer.d.ts +18 -0
- package/dist/imageEditor/layers/EditorTextLayer.d.ts.map +1 -0
- package/dist/imageEditor/layers/EditorTextLayer.js +13 -0
- package/dist/imageEditor/layers/EditorTextLayer.js.map +1 -0
- package/dist/imageEditor/layers/SelectionHandles.d.ts +17 -0
- package/dist/imageEditor/layers/SelectionHandles.d.ts.map +1 -0
- package/dist/imageEditor/layers/SelectionHandles.js +19 -0
- package/dist/imageEditor/layers/SelectionHandles.js.map +1 -0
- package/dist/imageEditor/state.d.ts +76 -0
- package/dist/imageEditor/state.d.ts.map +1 -0
- package/dist/imageEditor/state.js +87 -0
- package/dist/imageEditor/state.js.map +1 -0
- package/dist/imageEditor/useImageEditor.d.ts +53 -0
- package/dist/imageEditor/useImageEditor.d.ts.map +1 -0
- package/dist/imageEditor/useImageEditor.js +244 -0
- package/dist/imageEditor/useImageEditor.js.map +1 -0
- package/dist/imageEditor/useImageEditorTokens.d.ts +16 -0
- package/dist/imageEditor/useImageEditorTokens.d.ts.map +1 -0
- package/dist/imageEditor/useImageEditorTokens.js +45 -0
- package/dist/imageEditor/useImageEditorTokens.js.map +1 -0
- package/dist/index.d.ts +48 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -1
- package/dist/jsonEditor/EmbeddedRichTextField.d.ts +15 -0
- package/dist/jsonEditor/EmbeddedRichTextField.d.ts.map +1 -0
- package/dist/jsonEditor/EmbeddedRichTextField.js +74 -0
- package/dist/jsonEditor/EmbeddedRichTextField.js.map +1 -0
- package/dist/jsonEditor/JsonEditor.d.ts +36 -0
- package/dist/jsonEditor/JsonEditor.d.ts.map +1 -0
- package/dist/jsonEditor/JsonEditor.js +15 -0
- package/dist/jsonEditor/JsonEditor.js.map +1 -0
- package/dist/jsonEditor/JsonEditorContext.d.ts +28 -0
- package/dist/jsonEditor/JsonEditorContext.d.ts.map +1 -0
- package/dist/jsonEditor/JsonEditorContext.js +41 -0
- package/dist/jsonEditor/JsonEditorContext.js.map +1 -0
- package/dist/jsonEditor/RenderNode.d.ts +16 -0
- package/dist/jsonEditor/RenderNode.d.ts.map +1 -0
- package/dist/jsonEditor/RenderNode.js +32 -0
- package/dist/jsonEditor/RenderNode.js.map +1 -0
- package/dist/jsonEditor/editors.d.ts +36 -0
- package/dist/jsonEditor/editors.d.ts.map +1 -0
- package/dist/jsonEditor/editors.js +347 -0
- package/dist/jsonEditor/editors.js.map +1 -0
- package/dist/jsonEditor/index.d.ts +3 -0
- package/dist/jsonEditor/index.d.ts.map +1 -0
- package/dist/jsonEditor/index.js +2 -0
- package/dist/jsonEditor/index.js.map +1 -0
- package/dist/jsonEditor/useJsonEditorTokens.d.ts +13 -0
- package/dist/jsonEditor/useJsonEditorTokens.d.ts.map +1 -0
- package/dist/jsonEditor/useJsonEditorTokens.js +38 -0
- package/dist/jsonEditor/useJsonEditorTokens.js.map +1 -0
- package/dist/recorder/RecorderButton.d.ts +31 -0
- package/dist/recorder/RecorderButton.d.ts.map +1 -0
- package/dist/recorder/RecorderButton.js +24 -0
- package/dist/recorder/RecorderButton.js.map +1 -0
- package/dist/recorder/RecorderModal.d.ts +59 -0
- package/dist/recorder/RecorderModal.d.ts.map +1 -0
- package/dist/recorder/RecorderModal.js +333 -0
- package/dist/recorder/RecorderModal.js.map +1 -0
- package/dist/recorder/RecorderPanel.d.ts +25 -0
- package/dist/recorder/RecorderPanel.d.ts.map +1 -0
- package/dist/recorder/RecorderPanel.js +30 -0
- package/dist/recorder/RecorderPanel.js.map +1 -0
- package/dist/recorder/formats.d.ts +51 -0
- package/dist/recorder/formats.d.ts.map +1 -0
- package/dist/recorder/formats.js +144 -0
- package/dist/recorder/formats.js.map +1 -0
- package/dist/recorder/hooks/useMediaRecorder.d.ts +90 -0
- package/dist/recorder/hooks/useMediaRecorder.d.ts.map +1 -0
- package/dist/recorder/hooks/useMediaRecorder.js +277 -0
- package/dist/recorder/hooks/useMediaRecorder.js.map +1 -0
- package/dist/recorder/hooks/useStreamPreview.d.ts +22 -0
- package/dist/recorder/hooks/useStreamPreview.d.ts.map +1 -0
- package/dist/recorder/hooks/useStreamPreview.js +44 -0
- package/dist/recorder/hooks/useStreamPreview.js.map +1 -0
- package/dist/recorder/sources/cameraStream.d.ts +22 -0
- package/dist/recorder/sources/cameraStream.d.ts.map +1 -0
- package/dist/recorder/sources/cameraStream.js +24 -0
- package/dist/recorder/sources/cameraStream.js.map +1 -0
- package/dist/recorder/sources/micStream.d.ts +15 -0
- package/dist/recorder/sources/micStream.d.ts.map +1 -0
- package/dist/recorder/sources/micStream.js +24 -0
- package/dist/recorder/sources/micStream.js.map +1 -0
- package/dist/recorder/sources/screenStream.d.ts +53 -0
- package/dist/recorder/sources/screenStream.d.ts.map +1 -0
- package/dist/recorder/sources/screenStream.js +114 -0
- package/dist/recorder/sources/screenStream.js.map +1 -0
- package/dist/recorder/timingJson.d.ts +51 -0
- package/dist/recorder/timingJson.d.ts.map +1 -0
- package/dist/recorder/timingJson.js +42 -0
- package/dist/recorder/timingJson.js.map +1 -0
- package/dist/tiptap/TiptapAudio.d.ts +26 -0
- package/dist/tiptap/TiptapAudio.d.ts.map +1 -0
- package/dist/tiptap/TiptapAudio.js +58 -0
- package/dist/tiptap/TiptapAudio.js.map +1 -0
- package/dist/tiptap/TiptapVideo.d.ts +30 -0
- package/dist/tiptap/TiptapVideo.d.ts.map +1 -0
- package/dist/tiptap/TiptapVideo.js +66 -0
- package/dist/tiptap/TiptapVideo.js.map +1 -0
- package/dist/tiptap/useResolvedMediaSrc.d.ts +2 -0
- package/dist/tiptap/useResolvedMediaSrc.d.ts.map +1 -0
- package/dist/tiptap/useResolvedMediaSrc.js +42 -0
- package/dist/tiptap/useResolvedMediaSrc.js.map +1 -0
- package/dist/tiptapBridge.d.ts.map +1 -1
- package/dist/tiptapBridge.js +210 -16
- package/dist/tiptapBridge.js.map +1 -1
- package/dist/useHeadingLayout.d.ts +54 -0
- package/dist/useHeadingLayout.d.ts.map +1 -0
- package/dist/useHeadingLayout.js +260 -0
- package/dist/useHeadingLayout.js.map +1 -0
- package/dist/utils/collectInlineFontAwesomeCss.d.ts +21 -0
- package/dist/utils/collectInlineFontAwesomeCss.d.ts.map +1 -0
- package/dist/utils/collectInlineFontAwesomeCss.js +68 -0
- package/dist/utils/collectInlineFontAwesomeCss.js.map +1 -0
- package/dist/utils/dropUtils.d.ts +21 -2
- package/dist/utils/dropUtils.d.ts.map +1 -1
- package/dist/utils/dropUtils.js +43 -4
- package/dist/utils/dropUtils.js.map +1 -1
- package/dist/utils/normalizeMalformedAssetUrl.d.ts +15 -0
- package/dist/utils/normalizeMalformedAssetUrl.d.ts.map +1 -0
- package/dist/utils/normalizeMalformedAssetUrl.js +27 -0
- package/dist/utils/normalizeMalformedAssetUrl.js.map +1 -0
- package/package.json +8 -5
- package/src/DocumentSettingsDialog.tsx +266 -0
- package/src/EditorContext.tsx +534 -10
- package/src/EditorShell.tsx +691 -63
- package/src/EmojiPicker.tsx +332 -0
- package/src/ImageEditor.tsx +327 -0
- package/src/ImageNodeView.tsx +222 -21
- package/src/ImageViewer.tsx +221 -0
- package/src/InlineIcon.ts +84 -0
- package/src/InlinePreviewGutter.tsx +582 -0
- package/src/LinkDialog.tsx +276 -0
- package/src/MediaBin.tsx +22 -3
- package/src/MentionExtension.tsx +10 -7
- package/src/OutlinePanel.tsx +295 -0
- package/src/PlainHtmlPreview.tsx +211 -0
- package/src/PreviewControls.tsx +130 -24
- package/src/PreviewPanel.tsx +38 -21
- package/src/RawEditor.tsx +215 -4
- package/src/RecorderEntry.tsx +164 -0
- package/src/TemplateAnnotation.ts +32 -6
- package/src/TemplatePicker.tsx +818 -0
- package/src/ThemeCustomizerPanel.tsx +595 -0
- package/src/ThemePicker.tsx +319 -0
- package/src/Toolbar.tsx +708 -111
- package/src/VersionHistoryPanel.tsx +329 -0
- package/src/ViewMenuPanel.tsx +188 -0
- package/src/WysiwygEditor.tsx +229 -9
- package/src/__tests__/detectMarkdown.test.ts +0 -15
- package/src/__tests__/documentSettingsDialog.test.tsx +147 -0
- package/src/__tests__/emojiPicker.test.tsx +133 -0
- package/src/__tests__/fileKind.test.ts +16 -0
- package/src/__tests__/imageEditAffordance.test.tsx +268 -0
- package/src/__tests__/imageEditorShell.test.tsx +57 -0
- package/src/__tests__/imageEditorState.test.ts +171 -0
- package/src/__tests__/inlinePreviewGutter.test.tsx +62 -0
- package/src/__tests__/inlinePreviewGutterAllBlocks.test.tsx +103 -0
- package/src/__tests__/jsonEditor.test.tsx +168 -0
- package/src/__tests__/layersPanel.test.tsx +97 -0
- package/src/__tests__/linkDialogDocPicker.test.tsx +137 -0
- package/src/__tests__/mediaAttachmentFlow.test.ts +110 -0
- package/src/__tests__/outlinePanel.test.tsx +79 -0
- package/src/__tests__/plainHtmlPreview.test.tsx +107 -0
- package/src/__tests__/propertiesPanel.test.tsx +69 -0
- package/src/__tests__/recorderFormats.test.ts +146 -0
- package/src/__tests__/recorderTimingJson.test.ts +41 -0
- package/src/__tests__/templateAnnotationRoundTrip.test.ts +34 -0
- package/src/__tests__/tiptapBridge.test.ts +29 -0
- package/src/__tests__/tiptapImageRoundTrip.test.ts +73 -0
- package/src/__tests__/useImageEditor.test.tsx +159 -0
- package/src/__tests__/useMediaRecorder.test.ts +186 -0
- package/src/__tests__/versionHistory.test.tsx +197 -0
- package/src/blockSlice.ts +75 -0
- package/src/buildPreviewDoc.ts +61 -6
- package/src/emojiData.ts +1337 -0
- package/src/fileKind.ts +30 -6
- package/src/hooks/useFileDrop.ts +40 -4
- package/src/imageEditor/CanvasSurface.tsx +402 -0
- package/src/imageEditor/ImageVersionHistoryDropdown.tsx +396 -0
- package/src/imageEditor/LayersPanel.tsx +143 -0
- package/src/imageEditor/PropertiesPanel.tsx +428 -0
- package/src/imageEditor/Toolbar.tsx +242 -0
- package/src/imageEditor/icons.tsx +144 -0
- package/src/imageEditor/image-editor.css +450 -0
- package/src/imageEditor/layers/EditorImageLayer.tsx +45 -0
- package/src/imageEditor/layers/EditorShapeLayer.tsx +62 -0
- package/src/imageEditor/layers/EditorTextLayer.tsx +45 -0
- package/src/imageEditor/layers/SelectionHandles.tsx +86 -0
- package/src/imageEditor/state.ts +153 -0
- package/src/imageEditor/useImageEditor.ts +328 -0
- package/src/imageEditor/useImageEditorTokens.ts +70 -0
- package/src/index.ts +82 -0
- package/src/jsonEditor/EmbeddedRichTextField.tsx +81 -0
- package/src/jsonEditor/JsonEditor.tsx +81 -0
- package/src/jsonEditor/JsonEditorContext.tsx +75 -0
- package/src/jsonEditor/RenderNode.tsx +66 -0
- package/src/jsonEditor/editors.tsx +678 -0
- package/src/jsonEditor/index.ts +2 -0
- package/src/jsonEditor/json-editor.css +463 -0
- package/src/jsonEditor/useJsonEditorTokens.ts +63 -0
- package/src/recorder/RecorderButton.tsx +72 -0
- package/src/recorder/RecorderModal.tsx +596 -0
- package/src/recorder/RecorderPanel.tsx +93 -0
- package/src/recorder/formats.ts +159 -0
- package/src/recorder/hooks/useMediaRecorder.ts +378 -0
- package/src/recorder/hooks/useStreamPreview.ts +47 -0
- package/src/recorder/sources/cameraStream.ts +32 -0
- package/src/recorder/sources/micStream.ts +25 -0
- package/src/recorder/sources/screenStream.ts +162 -0
- package/src/recorder/timingJson.ts +66 -0
- package/src/styles/editor.css +2490 -51
- package/src/styles/image-edit-affordance.css +201 -0
- package/src/styles/index.css +10 -0
- package/src/tiptap/TiptapAudio.tsx +86 -0
- package/src/tiptap/TiptapVideo.tsx +119 -0
- package/src/tiptap/useResolvedMediaSrc.ts +47 -0
- package/src/tiptapBridge.ts +227 -22
- package/src/useHeadingLayout.ts +294 -0
- package/src/utils/collectInlineFontAwesomeCss.ts +69 -0
- package/src/utils/dropUtils.ts +54 -6
- package/src/utils/normalizeMalformedAssetUrl.ts +22 -0
package/dist/RawEditor.js
CHANGED
|
@@ -7,10 +7,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
7
7
|
* Syncs changes back to EditorContext on every keystroke (debounced).
|
|
8
8
|
*/
|
|
9
9
|
import { useRef, useCallback, useEffect } from 'react';
|
|
10
|
-
import Editor, { loader } from '@monaco-editor/react';
|
|
10
|
+
import Editor, { loader, } from '@monaco-editor/react';
|
|
11
11
|
import * as monaco from 'monaco-editor';
|
|
12
12
|
import { useEditorContext } from './EditorContext';
|
|
13
13
|
import { getAvailableTemplates } from '@bendyline/squisq/doc';
|
|
14
|
+
import { suggestIcons, resolveIcon, iconGlyph } from '@bendyline/squisq/icons';
|
|
14
15
|
import { SQUISQ_MEDIA_MIME, parseSquisqMediaPayload } from './mediaDragMime';
|
|
15
16
|
// Use locally installed monaco-editor instead of CDN.
|
|
16
17
|
//
|
|
@@ -23,6 +24,21 @@ import { SQUISQ_MEDIA_MIME, parseSquisqMediaPayload } from './mediaDragMime';
|
|
|
23
24
|
// Where monaco-slim.ts re-exports 'monaco-editor/esm/vs/editor/editor.api' plus
|
|
24
25
|
// only the language contributions needed (e.g. markdown, javascript, etc.).
|
|
25
26
|
loader.config({ monaco });
|
|
27
|
+
// Squisq Monaco themes: same syntax highlighting as vs / vs-dark, but with
|
|
28
|
+
// Monaco's internal gutter (line numbers + folding margin) and overview
|
|
29
|
+
// ruler tinted to match the side-pane "desk" colors so the canvas's
|
|
30
|
+
// internal furniture blends with its surroundings. The seam color is the
|
|
31
|
+
// 1px line Monaco draws between the white canvas and the overview ruler;
|
|
32
|
+
// matches the `::after` border on `.margin` so both sides of the canvas
|
|
33
|
+
// frame look the same.
|
|
34
|
+
const SQUISQ_LIGHT_GUTTER = '#dcd8d0';
|
|
35
|
+
const SQUISQ_DARK_GUTTER = '#0f1219';
|
|
36
|
+
const SQUISQ_LIGHT_SEAM = '#b0a99a';
|
|
37
|
+
const SQUISQ_DARK_SEAM = '#2a3144';
|
|
38
|
+
const SQUISQ_THEMES = {
|
|
39
|
+
vs: 'squisq-light',
|
|
40
|
+
'vs-dark': 'squisq-dark',
|
|
41
|
+
};
|
|
26
42
|
/**
|
|
27
43
|
* Raw markdown editor using Monaco Editor.
|
|
28
44
|
* Binds to the shared EditorContext for source synchronization.
|
|
@@ -33,6 +49,8 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
33
49
|
const isExternalUpdate = useRef(false);
|
|
34
50
|
const completionDisposable = useRef(null);
|
|
35
51
|
const mentionCompletionDisposable = useRef(null);
|
|
52
|
+
const iconCompletionDisposable = useRef(null);
|
|
53
|
+
const iconGlyphDecorations = useRef(null);
|
|
36
54
|
const dropCleanupRef = useRef(null);
|
|
37
55
|
const keyDisposable = useRef(null);
|
|
38
56
|
// Ref so the keydown handler always sees the latest callback.
|
|
@@ -46,6 +64,30 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
46
64
|
useEffect(() => {
|
|
47
65
|
mentionProviderRef.current = mentionProvider;
|
|
48
66
|
}, [mentionProvider]);
|
|
67
|
+
const handleBeforeMount = useCallback((monaco) => {
|
|
68
|
+
monaco.editor.defineTheme('squisq-light', {
|
|
69
|
+
base: 'vs',
|
|
70
|
+
inherit: true,
|
|
71
|
+
rules: [],
|
|
72
|
+
colors: {
|
|
73
|
+
'editorGutter.background': SQUISQ_LIGHT_GUTTER,
|
|
74
|
+
'editorOverviewRuler.background': SQUISQ_LIGHT_GUTTER,
|
|
75
|
+
'editorOverviewRuler.border': SQUISQ_LIGHT_SEAM,
|
|
76
|
+
'minimap.background': SQUISQ_LIGHT_GUTTER,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
monaco.editor.defineTheme('squisq-dark', {
|
|
80
|
+
base: 'vs-dark',
|
|
81
|
+
inherit: true,
|
|
82
|
+
rules: [],
|
|
83
|
+
colors: {
|
|
84
|
+
'editorGutter.background': SQUISQ_DARK_GUTTER,
|
|
85
|
+
'editorOverviewRuler.background': SQUISQ_DARK_GUTTER,
|
|
86
|
+
'editorOverviewRuler.border': SQUISQ_DARK_SEAM,
|
|
87
|
+
'minimap.background': SQUISQ_DARK_GUTTER,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}, []);
|
|
49
91
|
const handleMount = useCallback((editor, monaco) => {
|
|
50
92
|
editorRef.current = editor;
|
|
51
93
|
setMonacoEditor(editor);
|
|
@@ -55,6 +97,8 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
55
97
|
completionDisposable.current = null;
|
|
56
98
|
mentionCompletionDisposable.current?.dispose();
|
|
57
99
|
mentionCompletionDisposable.current = null;
|
|
100
|
+
iconCompletionDisposable.current?.dispose();
|
|
101
|
+
iconCompletionDisposable.current = null;
|
|
58
102
|
// Register the `{[template]}` completion provider only for markdown
|
|
59
103
|
// files — it's meaningless for TypeScript, JSON, Python, etc.
|
|
60
104
|
if (language === 'markdown') {
|
|
@@ -67,16 +111,23 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
67
111
|
if (!/^#{1,6}\s/.test(lineContent))
|
|
68
112
|
return { suggestions: [] };
|
|
69
113
|
const textBeforeCursor = lineContent.substring(0, position.column - 1);
|
|
114
|
+
const textAfterCursor = lineContent.substring(position.column - 1);
|
|
70
115
|
const bracketIdx = textBeforeCursor.lastIndexOf('{[');
|
|
71
116
|
if (bracketIdx === -1)
|
|
72
117
|
return { suggestions: [] };
|
|
73
|
-
//
|
|
118
|
+
// When Monaco's bracket auto-pair has already produced the
|
|
119
|
+
// closing `]}` we just leave it in place and skip the
|
|
120
|
+
// suffix — otherwise accepting `sectionHeader` on
|
|
121
|
+
// `{[gi]}` would yield `{[sectionHeader]}]}`.
|
|
122
|
+
const closingMatch = textAfterCursor.match(/^\]\}/);
|
|
123
|
+
const suffix = closingMatch ? '' : ']}';
|
|
74
124
|
const startCol = bracketIdx + 3; // after {[
|
|
75
125
|
const range = new monaco.Range(position.lineNumber, startCol, position.lineNumber, position.column);
|
|
76
126
|
const suggestions = templates.map((name) => ({
|
|
77
127
|
label: name,
|
|
128
|
+
filterText: name,
|
|
78
129
|
kind: monaco.languages.CompletionItemKind.Value,
|
|
79
|
-
insertText: name +
|
|
130
|
+
insertText: name + suffix,
|
|
80
131
|
range,
|
|
81
132
|
detail: 'Block template',
|
|
82
133
|
sortText: name,
|
|
@@ -133,6 +184,77 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
133
184
|
};
|
|
134
185
|
},
|
|
135
186
|
});
|
|
187
|
+
// FontAwesome icon completion. Fires inside any `{[…]}` opener
|
|
188
|
+
// anywhere in the doc (not just headings — icons are inline).
|
|
189
|
+
// Suggestions cover the whole FA Free catalog filtered by the
|
|
190
|
+
// partial token; we cap at 50 to keep the popup readable. The
|
|
191
|
+
// template provider above still handles heading lines, so on
|
|
192
|
+
// a `## Title {[…]}` the user sees both template names AND
|
|
193
|
+
// icons interleaved by the regular Monaco filter.
|
|
194
|
+
iconCompletionDisposable.current = monaco.languages.registerCompletionItemProvider('markdown', {
|
|
195
|
+
triggerCharacters: ['['],
|
|
196
|
+
provideCompletionItems(model, position) {
|
|
197
|
+
const lineContent = model.getLineContent(position.lineNumber);
|
|
198
|
+
const textBeforeCursor = lineContent.substring(0, position.column - 1);
|
|
199
|
+
const textAfterCursor = lineContent.substring(position.column - 1);
|
|
200
|
+
const bracketIdx = textBeforeCursor.lastIndexOf('{[');
|
|
201
|
+
if (bracketIdx === -1)
|
|
202
|
+
return { suggestions: [] };
|
|
203
|
+
// Bail if any `]` already closes this annotation between
|
|
204
|
+
// `{[` and the cursor — we'd be past the token, not in it.
|
|
205
|
+
const between = textBeforeCursor.slice(bracketIdx + 2);
|
|
206
|
+
if (between.includes(']'))
|
|
207
|
+
return { suggestions: [] };
|
|
208
|
+
// Tokens are alphanumeric + `-_:`; anything else means
|
|
209
|
+
// we're not inside an icon (probably a code/link bracket).
|
|
210
|
+
if (between && !/^[a-zA-Z0-9_:-]*$/.test(between)) {
|
|
211
|
+
return { suggestions: [] };
|
|
212
|
+
}
|
|
213
|
+
const query = between.toLowerCase();
|
|
214
|
+
// When Monaco's bracket auto-pair has already produced a
|
|
215
|
+
// closing `]}` we don't want to insert another — but we
|
|
216
|
+
// also don't want to consume the existing one, since
|
|
217
|
+
// then we'd have to re-emit it and the round-trip is
|
|
218
|
+
// brittle. Leave the closing in place and just insert
|
|
219
|
+
// the bare token; if no closing exists yet, append it.
|
|
220
|
+
const closingMatch = textAfterCursor.match(/^\]\}/);
|
|
221
|
+
const suffix = closingMatch ? '' : ']}';
|
|
222
|
+
const range = new monaco.Range(position.lineNumber, bracketIdx + 3, // after `{[`
|
|
223
|
+
position.lineNumber, position.column);
|
|
224
|
+
const top = suggestIcons(query, 50);
|
|
225
|
+
return {
|
|
226
|
+
suggestions: top.map((m, i) => ({
|
|
227
|
+
// Embed the FA codepoint as the first character of
|
|
228
|
+
// the label. CSS targets the suggest widget with
|
|
229
|
+
// FontAwesome as a font fallback, so the codepoint
|
|
230
|
+
// renders as the glyph and the name renders in the
|
|
231
|
+
// editor's normal font.
|
|
232
|
+
label: {
|
|
233
|
+
label: `${iconGlyph(m.entry)} ${m.token}`,
|
|
234
|
+
description: `fa-${m.entry.family}`,
|
|
235
|
+
},
|
|
236
|
+
// `filterText` excludes the glyph + spacing so Monaco
|
|
237
|
+
// filters against the actual icon name only.
|
|
238
|
+
filterText: m.token,
|
|
239
|
+
kind: monaco.languages.CompletionItemKind.Constant,
|
|
240
|
+
insertText: `${m.token}${suffix}`,
|
|
241
|
+
range,
|
|
242
|
+
detail: m.entry.label,
|
|
243
|
+
// Documentation pane (rendered when Monaco's
|
|
244
|
+
// suggestion preview is expanded) shows a large
|
|
245
|
+
// version of the glyph alongside the canonical token.
|
|
246
|
+
documentation: {
|
|
247
|
+
value: `<i class="fa-${m.entry.family} fa-${m.entry.name}" style="font-size: 2em; display: inline-block; margin-right: 8px; vertical-align: middle"></i> **${m.token}** *(${m.entry.label})*`,
|
|
248
|
+
isTrusted: true,
|
|
249
|
+
supportHtml: true,
|
|
250
|
+
},
|
|
251
|
+
// Sort key: 1-digit score prefix keeps "starts with"
|
|
252
|
+
// matches above "contains" / keyword matches.
|
|
253
|
+
sortText: `${m.score}${String(i).padStart(4, '0')}`,
|
|
254
|
+
})),
|
|
255
|
+
};
|
|
256
|
+
},
|
|
257
|
+
});
|
|
136
258
|
}
|
|
137
259
|
// Chat-composer mode: intercept Enter before Monaco inserts a newline.
|
|
138
260
|
// Cmd/Ctrl+Enter falls through so the native newline still works.
|
|
@@ -202,6 +324,10 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
202
324
|
completionDisposable.current = null;
|
|
203
325
|
mentionCompletionDisposable.current?.dispose();
|
|
204
326
|
mentionCompletionDisposable.current = null;
|
|
327
|
+
iconCompletionDisposable.current?.dispose();
|
|
328
|
+
iconCompletionDisposable.current = null;
|
|
329
|
+
iconGlyphDecorations.current?.clear();
|
|
330
|
+
iconGlyphDecorations.current = null;
|
|
205
331
|
dropCleanupRef.current?.();
|
|
206
332
|
dropCleanupRef.current = null;
|
|
207
333
|
keyDisposable.current?.dispose();
|
|
@@ -227,7 +353,59 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
227
353
|
}
|
|
228
354
|
}
|
|
229
355
|
}, [markdownSource]);
|
|
230
|
-
|
|
356
|
+
// ── Inline FontAwesome glyph decorations ────────────
|
|
357
|
+
// Walk the markdown source on every change, find each resolvable
|
|
358
|
+
// `{[icon-name]}` span, and overlay the actual glyph (via Monaco's
|
|
359
|
+
// `before:` content decoration) just before the brackets. The CSS
|
|
360
|
+
// classes `.fa-glyph-decoration-<family>` set the per-family font
|
|
361
|
+
// and weight; the codepoint character is the decoration's content.
|
|
362
|
+
useEffect(() => {
|
|
363
|
+
const editor = editorRef.current;
|
|
364
|
+
if (!editor)
|
|
365
|
+
return;
|
|
366
|
+
if (language !== 'markdown')
|
|
367
|
+
return;
|
|
368
|
+
const model = editor.getModel();
|
|
369
|
+
if (!model)
|
|
370
|
+
return;
|
|
371
|
+
const decorations = [];
|
|
372
|
+
const lines = model.getLineCount();
|
|
373
|
+
const re = /\{\[([a-zA-Z0-9_:-]+)\]\}/g;
|
|
374
|
+
for (let line = 1; line <= lines; line++) {
|
|
375
|
+
const text = model.getLineContent(line);
|
|
376
|
+
re.lastIndex = 0;
|
|
377
|
+
let match;
|
|
378
|
+
while ((match = re.exec(text)) !== null) {
|
|
379
|
+
const icon = resolveIcon(match[1]);
|
|
380
|
+
if (!icon)
|
|
381
|
+
continue;
|
|
382
|
+
const glyph = iconGlyph(icon);
|
|
383
|
+
if (!glyph)
|
|
384
|
+
continue;
|
|
385
|
+
// Position the decoration as a zero-width range at the `{`
|
|
386
|
+
// of the matched token. `before.contentText` renders the
|
|
387
|
+
// glyph as content prepended visually to that position.
|
|
388
|
+
const col = match.index + 1; // Monaco columns are 1-based
|
|
389
|
+
decorations.push({
|
|
390
|
+
range: new monaco.Range(line, col, line, col),
|
|
391
|
+
options: {
|
|
392
|
+
before: {
|
|
393
|
+
content: glyph,
|
|
394
|
+
inlineClassName: `fa-glyph-decoration-${icon.family}`,
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (!iconGlyphDecorations.current) {
|
|
401
|
+
iconGlyphDecorations.current = editor.createDecorationsCollection(decorations);
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
404
|
+
iconGlyphDecorations.current.set(decorations);
|
|
405
|
+
}
|
|
406
|
+
}, [markdownSource, language]);
|
|
407
|
+
const effectiveTheme = SQUISQ_THEMES[theme] ?? theme;
|
|
408
|
+
return (_jsx("div", { className: className, style: { width: '100%', height: '100%' }, "data-testid": "raw-editor", children: _jsx(Editor, { defaultLanguage: language, value: markdownSource, theme: effectiveTheme, beforeMount: handleBeforeMount, onMount: handleMount, onChange: handleChange, options: {
|
|
231
409
|
fontSize,
|
|
232
410
|
wordWrap,
|
|
233
411
|
minimap: { enabled: minimap },
|
|
@@ -239,6 +417,22 @@ export function RawEditor({ theme = 'vs', minimap = false, fontSize = 14, wordWr
|
|
|
239
417
|
bracketPairColorization: { enabled: true },
|
|
240
418
|
guides: { indentation: true },
|
|
241
419
|
padding: { top: 12, bottom: 12 },
|
|
420
|
+
// Markdown's tokenizer classifies most body text as "string"
|
|
421
|
+
// or "comment" context, which suppresses `quickSuggestions`
|
|
422
|
+
// by default. Enable in all three so our `{[icon]}` and
|
|
423
|
+
// `@mention` typeaheads keep firing as the user types past
|
|
424
|
+
// the trigger character.
|
|
425
|
+
quickSuggestions: { other: true, comments: true, strings: true },
|
|
426
|
+
suggestOnTriggerCharacters: true,
|
|
427
|
+
// Breathing room between the gutter and the first character.
|
|
428
|
+
// Done via Monaco's own option so cursor + hit-testing stay in
|
|
429
|
+
// sync — CSS-padding `.view-lines` shifts the text but not the
|
|
430
|
+
// cursors layer, which causes the cursor to drift left of the
|
|
431
|
+
// model column. Monaco's default is 10. We set 22 (12 extra),
|
|
432
|
+
// and CSS paints the rightmost 12px of the gutter as canvas
|
|
433
|
+
// color so the breathing room looks like it sits *inside* the
|
|
434
|
+
// canvas rather than widening the gutter.
|
|
435
|
+
lineDecorationsWidth: 22,
|
|
242
436
|
readOnly,
|
|
243
437
|
domReadOnly: readOnly,
|
|
244
438
|
} }) }));
|
package/dist/RawEditor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RawEditor.js","sourceRoot":"","sources":["../src/RawEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RecorderEntry — toolbar slot that wires `RecorderPanel` from
|
|
3
|
+
* `@bendyline/squisq-recorder-react` into the editor.
|
|
4
|
+
*
|
|
5
|
+
* Reads `mediaProvider`, `workspaceContainer`, `activeView`,
|
|
6
|
+
* `tiptapEditor`, and the markdown editing helpers from
|
|
7
|
+
* `useEditorContext()`. On a successful save it:
|
|
8
|
+
* - inserts an HTML5 media element at the cursor — `<video>` for
|
|
9
|
+
* camera / screen recordings, `<audio>` for narration / mic
|
|
10
|
+
* recordings — which the markdown renderer turns into an inline
|
|
11
|
+
* `<InlineVideoPlayer>` / `<InlineAudioPlayer>` with native
|
|
12
|
+
* controls;
|
|
13
|
+
* - for narration, also annotates the nearest heading with
|
|
14
|
+
* `{[audio=filename]}` so `resolveAudioMapping()` continues to tie
|
|
15
|
+
* the recording to that block during slideshow playback;
|
|
16
|
+
* - bumps `mediaRevision` so any blob URLs the media bin cached for
|
|
17
|
+
* the previous file list are invalidated.
|
|
18
|
+
*
|
|
19
|
+
* The component returns `null` when no `mediaProvider` is wired —
|
|
20
|
+
* recording without a place to write the captured bytes is a
|
|
21
|
+
* misconfiguration, not a feature.
|
|
22
|
+
*/
|
|
23
|
+
export declare function RecorderEntry(): import("react/jsx-runtime").JSX.Element | null;
|
|
24
|
+
//# sourceMappingURL=RecorderEntry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecorderEntry.d.ts","sourceRoot":"","sources":["../src/RecorderEntry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAkDH,wBAAgB,aAAa,mDA4F5B"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* RecorderEntry — toolbar slot that wires `RecorderPanel` from
|
|
4
|
+
* `@bendyline/squisq-recorder-react` into the editor.
|
|
5
|
+
*
|
|
6
|
+
* Reads `mediaProvider`, `workspaceContainer`, `activeView`,
|
|
7
|
+
* `tiptapEditor`, and the markdown editing helpers from
|
|
8
|
+
* `useEditorContext()`. On a successful save it:
|
|
9
|
+
* - inserts an HTML5 media element at the cursor — `<video>` for
|
|
10
|
+
* camera / screen recordings, `<audio>` for narration / mic
|
|
11
|
+
* recordings — which the markdown renderer turns into an inline
|
|
12
|
+
* `<InlineVideoPlayer>` / `<InlineAudioPlayer>` with native
|
|
13
|
+
* controls;
|
|
14
|
+
* - for narration, also annotates the nearest heading with
|
|
15
|
+
* `{[audio=filename]}` so `resolveAudioMapping()` continues to tie
|
|
16
|
+
* the recording to that block during slideshow playback;
|
|
17
|
+
* - bumps `mediaRevision` so any blob URLs the media bin cached for
|
|
18
|
+
* the previous file list are invalidated.
|
|
19
|
+
*
|
|
20
|
+
* The component returns `null` when no `mediaProvider` is wired —
|
|
21
|
+
* recording without a place to write the captured bytes is a
|
|
22
|
+
* misconfiguration, not a feature.
|
|
23
|
+
*/
|
|
24
|
+
import { useCallback } from 'react';
|
|
25
|
+
import { RecorderPanel } from './recorder/RecorderPanel.js';
|
|
26
|
+
import { useEditorContext } from './EditorContext';
|
|
27
|
+
/**
|
|
28
|
+
* Insert a narration annotation `{[audio=filename]}` onto the heading
|
|
29
|
+
* line currently above the cursor in the Monaco editor. Pure-text
|
|
30
|
+
* insertion at the line's end keeps the markdown valid and matches the
|
|
31
|
+
* shape `resolveAudioMapping()` reads. Returns true if a heading line
|
|
32
|
+
* was found and updated.
|
|
33
|
+
*/
|
|
34
|
+
function annotateMonacoHeading(editor, filename) {
|
|
35
|
+
const model = editor.getModel();
|
|
36
|
+
if (!model)
|
|
37
|
+
return false;
|
|
38
|
+
const position = editor.getPosition();
|
|
39
|
+
if (!position)
|
|
40
|
+
return false;
|
|
41
|
+
// Walk upward from the cursor to find the nearest heading line.
|
|
42
|
+
for (let line = position.lineNumber; line >= 1; line--) {
|
|
43
|
+
const text = model.getLineContent(line);
|
|
44
|
+
if (!/^#{1,6}\s/.test(text))
|
|
45
|
+
continue;
|
|
46
|
+
// Skip if the heading already has an audio annotation — don't
|
|
47
|
+
// stomp the user's existing wiring. Add a separate annotation in
|
|
48
|
+
// that case wouldn't help either (resolveAudioMapping reads only
|
|
49
|
+
// the first audio= entry).
|
|
50
|
+
if (/\{\[audio=/.test(text))
|
|
51
|
+
return true;
|
|
52
|
+
const trimmed = text.replace(/\s+$/, '');
|
|
53
|
+
const insertText = ` {[audio=${filename}]}`;
|
|
54
|
+
const column = trimmed.length + 1;
|
|
55
|
+
editor.executeEdits('recorder-annotation', [
|
|
56
|
+
{
|
|
57
|
+
range: {
|
|
58
|
+
startLineNumber: line,
|
|
59
|
+
startColumn: column,
|
|
60
|
+
endLineNumber: line,
|
|
61
|
+
endColumn: column,
|
|
62
|
+
},
|
|
63
|
+
text: insertText,
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
export function RecorderEntry() {
|
|
71
|
+
const { mediaProvider, workspaceContainer, activeView, monacoEditor, tiptapEditor, insertAtCursor, bumpMediaRevision, markdownSource, setMarkdownSource, } = useEditorContext();
|
|
72
|
+
const handleSave = useCallback((result) => {
|
|
73
|
+
bumpMediaRevision();
|
|
74
|
+
if (result.source === 'mic') {
|
|
75
|
+
// Narration — annotate the nearest heading (drives the
|
|
76
|
+
// slideshow narration pipeline at `core/src/doc/audioMapping.ts`)
|
|
77
|
+
// *and* insert an inline `<audio controls>` so the user can
|
|
78
|
+
// audition the recording inside the editor. The two roles are
|
|
79
|
+
// orthogonal: the annotation is metadata for playback timing,
|
|
80
|
+
// the HTML tag is an in-editor preview control.
|
|
81
|
+
if (activeView === 'raw' && monacoEditor) {
|
|
82
|
+
annotateMonacoHeading(monacoEditor, result.filename);
|
|
83
|
+
}
|
|
84
|
+
const audioTag = `<audio src="${result.relativePath}" controls></audio>`;
|
|
85
|
+
if (activeView === 'wysiwyg' && tiptapEditor) {
|
|
86
|
+
tiptapEditor
|
|
87
|
+
.chain()
|
|
88
|
+
.focus()
|
|
89
|
+
.insertContent({
|
|
90
|
+
type: 'audio',
|
|
91
|
+
attrs: { src: result.relativePath, controls: true },
|
|
92
|
+
})
|
|
93
|
+
.run();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (activeView === 'raw' && monacoEditor) {
|
|
97
|
+
// The annotation went onto the heading line; drop the player
|
|
98
|
+
// on a fresh line at the cursor.
|
|
99
|
+
insertAtCursor(`\n\n${audioTag}\n`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setMarkdownSource(markdownSource ? `${markdownSource}\n\n${audioTag}` : audioTag);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Camera / screen / screen+mic — inline video player. We pin
|
|
106
|
+
// width=480 so the editor preview doesn't blow up to natural
|
|
107
|
+
// resolution on big monitors; the height is intrinsic, so the
|
|
108
|
+
// aspect ratio is preserved regardless of source dimensions.
|
|
109
|
+
const videoTag = `<video src="${result.relativePath}" controls width="480"></video>`;
|
|
110
|
+
if (activeView === 'wysiwyg' && tiptapEditor) {
|
|
111
|
+
tiptapEditor
|
|
112
|
+
.chain()
|
|
113
|
+
.focus()
|
|
114
|
+
.insertContent({
|
|
115
|
+
type: 'video',
|
|
116
|
+
attrs: { src: result.relativePath, controls: true, width: 480 },
|
|
117
|
+
})
|
|
118
|
+
.run();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (activeView === 'raw' && monacoEditor) {
|
|
122
|
+
insertAtCursor(videoTag);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
setMarkdownSource(markdownSource ? `${markdownSource}\n\n${videoTag}` : videoTag);
|
|
126
|
+
}, [
|
|
127
|
+
activeView,
|
|
128
|
+
monacoEditor,
|
|
129
|
+
tiptapEditor,
|
|
130
|
+
insertAtCursor,
|
|
131
|
+
bumpMediaRevision,
|
|
132
|
+
markdownSource,
|
|
133
|
+
setMarkdownSource,
|
|
134
|
+
]);
|
|
135
|
+
if (!mediaProvider)
|
|
136
|
+
return null;
|
|
137
|
+
return (_jsx(RecorderPanel, { mediaProvider: mediaProvider, container: workspaceContainer, onSave: handleSave, className: "squisq-toolbar-button" }));
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=RecorderEntry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecorderEntry.js","sourceRoot":"","sources":["../src/RecorderEntry.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateAnnotation.d.ts","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"TemplateAnnotation.d.ts","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,sFA4E9B,CAAC"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* ensures Tiptap's schema preserves those attributes through edits.
|
|
14
14
|
*/
|
|
15
15
|
import Heading from '@tiptap/extension-heading';
|
|
16
|
+
import { templateLabel } from './TemplatePicker';
|
|
16
17
|
/**
|
|
17
18
|
* HeadingWithTemplate — drop-in replacement for Tiptap's Heading that
|
|
18
19
|
* persists template annotation attributes.
|
|
@@ -45,11 +46,17 @@ export const HeadingWithTemplate = Heading.extend({
|
|
|
45
46
|
const level = node.attrs.level;
|
|
46
47
|
const tag = `h${level}`;
|
|
47
48
|
const templateName = HTMLAttributes['data-template'];
|
|
49
|
+
// Render heading with a trailing badge span. The badge has no text
|
|
50
|
+
// content — its label is painted via CSS `content: attr(data-template-label)`
|
|
51
|
+
// so the template name never becomes part of the serialized heading
|
|
52
|
+
// text (which would leak into markdown on round-trip).
|
|
53
|
+
//
|
|
54
|
+
// When no template is set we still render a subtle "empty" badge so
|
|
55
|
+
// authors have a visible affordance for opening the template picker
|
|
56
|
+
// straight from the heading (matches the clicky chip shown for
|
|
57
|
+
// templated headings). The empty variant has no `data-template`
|
|
58
|
+
// attribute, so the bridge treats the heading as plain on save.
|
|
48
59
|
if (templateName) {
|
|
49
|
-
// Render heading with a trailing badge span. The badge has no text
|
|
50
|
-
// content — its label is painted via CSS `content: attr(data-template)`
|
|
51
|
-
// so the template name never becomes part of the serialized heading
|
|
52
|
-
// text (which would leak into markdown on round-trip).
|
|
53
60
|
return [
|
|
54
61
|
tag,
|
|
55
62
|
HTMLAttributes,
|
|
@@ -59,13 +66,32 @@ export const HeadingWithTemplate = Heading.extend({
|
|
|
59
66
|
{
|
|
60
67
|
class: 'squisq-template-badge',
|
|
61
68
|
contenteditable: 'false',
|
|
69
|
+
role: 'button',
|
|
70
|
+
tabindex: '0',
|
|
71
|
+
'aria-haspopup': 'listbox',
|
|
72
|
+
title: 'Change block template',
|
|
62
73
|
'data-template': templateName,
|
|
74
|
+
'data-template-label': templateLabel(templateName),
|
|
63
75
|
},
|
|
64
76
|
],
|
|
65
77
|
];
|
|
66
78
|
}
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
return [
|
|
80
|
+
tag,
|
|
81
|
+
HTMLAttributes,
|
|
82
|
+
['span', { class: 'squisq-heading-content' }, 0],
|
|
83
|
+
[
|
|
84
|
+
'span',
|
|
85
|
+
{
|
|
86
|
+
class: 'squisq-template-badge squisq-template-badge--empty',
|
|
87
|
+
contenteditable: 'false',
|
|
88
|
+
role: 'button',
|
|
89
|
+
tabindex: '0',
|
|
90
|
+
'aria-haspopup': 'listbox',
|
|
91
|
+
title: 'Choose block template',
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
];
|
|
69
95
|
},
|
|
70
96
|
});
|
|
71
97
|
//# sourceMappingURL=TemplateAnnotation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateAnnotation.js","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,OAAO,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TemplateAnnotation.js","sourceRoot":"","sources":["../src/TemplateAnnotation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAChD,aAAa;QACX,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;YAClB,YAAY,EAAE;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,IAAI;gBAClF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,YAAY;wBAAE,OAAO,EAAE,CAAC;oBACxC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC;gBACtD,CAAC;aACF;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,CAAC,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,IAAI;gBACzF,UAAU,EAAE,CAAC,UAAmC,EAAE,EAAE;oBAClD,IAAI,CAAC,UAAU,CAAC,kBAAkB;wBAAE,OAAO,EAAE,CAAC;oBAC9C,OAAO,EAAE,sBAAsB,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;gBACnE,CAAC;aACF;SACF,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;QAErD,mEAAmE;QACnE,8EAA8E;QAC9E,oEAAoE;QACpE,uDAAuD;QACvD,EAAE;QACF,oEAAoE;QACpE,oEAAoE;QACpE,+DAA+D;QAC/D,gEAAgE;QAChE,gEAAgE;QAChE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,GAAG;gBACH,cAAc;gBACd,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;gBAChD;oBACE,MAAM;oBACN;wBACE,KAAK,EAAE,uBAAuB;wBAC9B,eAAe,EAAE,OAAO;wBACxB,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,GAAG;wBACb,eAAe,EAAE,SAAS;wBAC1B,KAAK,EAAE,uBAAuB;wBAC9B,eAAe,EAAE,YAAY;wBAC7B,qBAAqB,EAAE,aAAa,CAAC,YAAY,CAAC;qBACnD;iBACF;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,GAAG;YACH,cAAc;YACd,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAChD;gBACE,MAAM;gBACN;oBACE,KAAK,EAAE,oDAAoD;oBAC3D,eAAe,EAAE,OAAO;oBACxB,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,GAAG;oBACb,eAAe,EAAE,SAAS;oBAC1B,KAAK,EAAE,uBAAuB;iBAC/B;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TemplatePicker
|
|
3
|
+
*
|
|
4
|
+
* A custom popover that replaces the plain <select> for block templates.
|
|
5
|
+
* Each template entry shows a mini wireframe SVG, a human-readable label,
|
|
6
|
+
* and a one-sentence description so authors can quickly find the right layout.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Canonical template names known to the picker, in the order they
|
|
10
|
+
* appear in the gallery. Exported so callers can hand the same list to
|
|
11
|
+
* `recommendTemplatesForBlock()` and stay in sync with the visual
|
|
12
|
+
* order.
|
|
13
|
+
*/
|
|
14
|
+
export declare const TEMPLATE_NAMES: readonly string[];
|
|
15
|
+
/**
|
|
16
|
+
* Convert a camelCase template id to a human-readable label. Accepts both
|
|
17
|
+
* the canonical short ids (`title`, `quote`, `map`, `list`) and the
|
|
18
|
+
* legacy long ones (`titleBlock`, `quoteBlock`, `mapBlock`, `listBlock`)
|
|
19
|
+
* so existing documents keep showing a friendly label without first
|
|
20
|
+
* normalizing their annotations.
|
|
21
|
+
*/
|
|
22
|
+
export declare function templateLabel(name: string): string;
|
|
23
|
+
export interface TemplatePickerProps {
|
|
24
|
+
value: string;
|
|
25
|
+
onChange: (name: string) => void;
|
|
26
|
+
/** When true, shows only the trigger button (no popover) — used in the overflow menu. */
|
|
27
|
+
compact?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Template names to surface in a "Recommended for this block" section
|
|
30
|
+
* above the full list. When omitted or empty, the gallery renders as a
|
|
31
|
+
* single ungrouped grid (legacy behavior).
|
|
32
|
+
*/
|
|
33
|
+
recommended?: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export declare function TemplatePicker({ value, onChange, compact, recommended }: TemplatePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export interface TemplateBadgePopoverProps {
|
|
37
|
+
/** DOMRect of the badge that triggered the popover (in viewport coords). */
|
|
38
|
+
anchorRect: DOMRect;
|
|
39
|
+
/** Currently active template name (empty string for none). */
|
|
40
|
+
value: string;
|
|
41
|
+
onChange: (name: string) => void;
|
|
42
|
+
onClose: () => void;
|
|
43
|
+
/** Optional list of template names to surface as "Recommended for this block". */
|
|
44
|
+
recommended?: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Standalone popover that mirrors the toolbar `TemplatePicker`'s gallery,
|
|
48
|
+
* but is anchored to a caller-supplied DOM rect (typically a clicked
|
|
49
|
+
* `.squisq-template-badge` span). Handles its own positioning, outside
|
|
50
|
+
* clicks, Escape, and viewport-edge clamping.
|
|
51
|
+
*/
|
|
52
|
+
export declare function TemplateBadgePopover({ anchorRect, value, onChange, onClose, recommended, }: TemplateBadgePopoverProps): import("react").ReactPortal;
|
|
53
|
+
//# sourceMappingURL=TemplatePicker.d.ts.map
|