@bendyline/squisq-editor-react 1.5.0 → 1.5.2
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 +17088 -82
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- 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
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* @vitest-environment jsdom
|
|
4
|
-
*
|
|
5
|
-
* High-level smoke test for the `<ImageEditor>` shell — verifies it
|
|
6
|
-
* mounts against a sidecar container, finishes its initial seed, and
|
|
7
|
-
* renders the toolbar / canvas / panels.
|
|
8
|
-
*/
|
|
9
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
10
|
-
import { render, screen, waitFor } from '@testing-library/react';
|
|
11
|
-
import { MemoryContentContainer, scopeContainer } from '@bendyline/squisq/storage';
|
|
12
|
-
import { writeImageEditDoc, createEmptyImageEditDoc } from '@bendyline/squisq/imageEdit';
|
|
13
|
-
import { ImageEditor } from '../ImageEditor.js';
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
if (typeof URL.createObjectURL !== 'function') {
|
|
16
|
-
Object.defineProperty(URL, 'createObjectURL', {
|
|
17
|
-
configurable: true,
|
|
18
|
-
value: vi.fn(() => 'blob:stub'),
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
if (typeof URL.revokeObjectURL !== 'function') {
|
|
22
|
-
Object.defineProperty(URL, 'revokeObjectURL', {
|
|
23
|
-
configurable: true,
|
|
24
|
-
value: vi.fn(),
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
describe('<ImageEditor>', () => {
|
|
29
|
-
it('mounts an existing state.json and shows toolbar / layers / properties', async () => {
|
|
30
|
-
const parent = new MemoryContentContainer();
|
|
31
|
-
const sidecar = scopeContainer(parent, 'pic_files');
|
|
32
|
-
await writeImageEditDoc(sidecar, createEmptyImageEditDoc(64, 48));
|
|
33
|
-
render(_jsx(ImageEditor, { filesContainer: sidecar }));
|
|
34
|
-
await waitFor(() => {
|
|
35
|
-
expect(screen.getByTestId('image-editor')).toBeTruthy();
|
|
36
|
-
});
|
|
37
|
-
expect(screen.getByTestId('image-editor-toolbar')).toBeTruthy();
|
|
38
|
-
expect(screen.getByTestId('image-editor-layers')).toBeTruthy();
|
|
39
|
-
expect(screen.getByTestId('image-editor-properties')).toBeTruthy();
|
|
40
|
-
// SVG canvas viewBox reflects the doc dimensions.
|
|
41
|
-
const svg = document.querySelector('svg.squisq-image-editor-canvas');
|
|
42
|
-
expect(svg).not.toBeNull();
|
|
43
|
-
expect(svg.getAttribute('viewBox')).toBe('0 0 64 48');
|
|
44
|
-
});
|
|
45
|
-
it('shows the loading state before the seed completes', () => {
|
|
46
|
-
const parent = new MemoryContentContainer();
|
|
47
|
-
const sidecar = scopeContainer(parent, 'pic_files');
|
|
48
|
-
render(_jsx(ImageEditor, { filesContainer: sidecar }));
|
|
49
|
-
expect(screen.getByText(/loading image editor/i)).toBeTruthy();
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=imageEditorShell.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imageEditorShell.test.js","sourceRoot":"","sources":["../../src/__tests__/imageEditorShell.test.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,UAAU,CAAC,GAAG,EAAE;IACd,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE;YAC5C,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,iBAAiB,EAAE;YAC5C,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,KAAC,WAAW,IAAC,cAAc,EAAE,OAAO,GAAI,CAAC,CAAC;QAEjD,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAC/D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAEnE,kDAAkD;QAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,CAAC,KAAC,WAAW,IAAC,cAAc,EAAE,OAAO,GAAI,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imageEditorState.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/imageEditorState.test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,2BAA2B,CAAC;AAyK9E,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { createEmptyImageEditDoc } from '@bendyline/squisq/imageEdit';
|
|
3
|
-
import { imageEditorReducer, initialImageEditorState, } from '../imageEditor/state.js';
|
|
4
|
-
function bootstrap() {
|
|
5
|
-
const doc = createEmptyImageEditDoc(400, 300);
|
|
6
|
-
// touch sets updatedAt — clear it for stable comparisons
|
|
7
|
-
return initialImageEditorState(doc);
|
|
8
|
-
}
|
|
9
|
-
function dispatchAll(state, actions) {
|
|
10
|
-
return actions.reduce((s, a) => imageEditorReducer(s, a), state);
|
|
11
|
-
}
|
|
12
|
-
describe('imageEditorReducer', () => {
|
|
13
|
-
it('initial state is clean and selects no layer', () => {
|
|
14
|
-
const s = bootstrap();
|
|
15
|
-
expect(s.dirty).toBe(false);
|
|
16
|
-
expect(s.selectedLayerId).toBe(null);
|
|
17
|
-
expect(s.tool).toBe('select');
|
|
18
|
-
expect(s.doc.canvas.width).toBe(400);
|
|
19
|
-
});
|
|
20
|
-
it('add-layer assigns an id, marks dirty, and selects by default', () => {
|
|
21
|
-
const s0 = bootstrap();
|
|
22
|
-
const s1 = imageEditorReducer(s0, {
|
|
23
|
-
type: 'add-layer',
|
|
24
|
-
layer: {
|
|
25
|
-
type: 'shape',
|
|
26
|
-
position: { x: 0, y: 0, width: 50, height: 50 },
|
|
27
|
-
content: { shape: 'rect', fill: '#fff' },
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
expect(s1.dirty).toBe(true);
|
|
31
|
-
expect(s1.doc.layers).toHaveLength(1);
|
|
32
|
-
const added = s1.doc.layers[0];
|
|
33
|
-
expect(added.id).toMatch(/^layer-/);
|
|
34
|
-
expect(s1.selectedLayerId).toBe(added.id);
|
|
35
|
-
});
|
|
36
|
-
it('add-layer with select:false leaves selection untouched', () => {
|
|
37
|
-
const s = imageEditorReducer(bootstrap(), {
|
|
38
|
-
type: 'add-layer',
|
|
39
|
-
select: false,
|
|
40
|
-
layer: {
|
|
41
|
-
type: 'shape',
|
|
42
|
-
position: { x: 0, y: 0, width: 1, height: 1 },
|
|
43
|
-
content: { shape: 'rect' },
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
expect(s.selectedLayerId).toBe(null);
|
|
47
|
-
});
|
|
48
|
-
it('remove-layer drops the layer and clears selection if it was selected', () => {
|
|
49
|
-
const s1 = imageEditorReducer(bootstrap(), {
|
|
50
|
-
type: 'add-layer',
|
|
51
|
-
layer: {
|
|
52
|
-
type: 'shape',
|
|
53
|
-
position: { x: 0, y: 0, width: 1, height: 1 },
|
|
54
|
-
content: { shape: 'rect' },
|
|
55
|
-
},
|
|
56
|
-
});
|
|
57
|
-
const id = s1.doc.layers[0].id;
|
|
58
|
-
const s2 = imageEditorReducer(s1, { type: 'remove-layer', layerId: id });
|
|
59
|
-
expect(s2.doc.layers).toHaveLength(0);
|
|
60
|
-
expect(s2.selectedLayerId).toBe(null);
|
|
61
|
-
});
|
|
62
|
-
it('update-layer applies a shallow patch', () => {
|
|
63
|
-
const s1 = imageEditorReducer(bootstrap(), {
|
|
64
|
-
type: 'add-layer',
|
|
65
|
-
layer: {
|
|
66
|
-
type: 'shape',
|
|
67
|
-
position: { x: 10, y: 10, width: 20, height: 20 },
|
|
68
|
-
content: { shape: 'rect' },
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
const id = s1.doc.layers[0].id;
|
|
72
|
-
const s2 = imageEditorReducer(s1, {
|
|
73
|
-
type: 'update-layer',
|
|
74
|
-
layerId: id,
|
|
75
|
-
patch: { name: 'Box', opacity: 0.5 },
|
|
76
|
-
});
|
|
77
|
-
const layer = s2.doc.layers[0];
|
|
78
|
-
expect(layer.name).toBe('Box');
|
|
79
|
-
expect(layer.opacity).toBe(0.5);
|
|
80
|
-
// Untouched fields are preserved.
|
|
81
|
-
expect(layer.position).toEqual({ x: 10, y: 10, width: 20, height: 20 });
|
|
82
|
-
});
|
|
83
|
-
it('reorder-layer moves a layer to the requested index', () => {
|
|
84
|
-
let s = bootstrap();
|
|
85
|
-
s = dispatchAll(s, [
|
|
86
|
-
{ type: 'add-layer', layer: shape('a') },
|
|
87
|
-
{ type: 'add-layer', layer: shape('b') },
|
|
88
|
-
{ type: 'add-layer', layer: shape('c') },
|
|
89
|
-
]);
|
|
90
|
-
const ids = s.doc.layers.map((l) => l.id);
|
|
91
|
-
// Move the first layer to the top of the stack.
|
|
92
|
-
const s2 = imageEditorReducer(s, { type: 'reorder-layer', layerId: ids[0], toIndex: 2 });
|
|
93
|
-
expect(s2.doc.layers.map((l) => l.id)).toEqual([ids[1], ids[2], ids[0]]);
|
|
94
|
-
});
|
|
95
|
-
it('crop translates layer positions into the new origin and resizes the canvas', () => {
|
|
96
|
-
let s = bootstrap();
|
|
97
|
-
s = imageEditorReducer(s, {
|
|
98
|
-
type: 'add-layer',
|
|
99
|
-
layer: {
|
|
100
|
-
type: 'shape',
|
|
101
|
-
position: { x: 100, y: 80, width: 50, height: 50 },
|
|
102
|
-
content: { shape: 'rect' },
|
|
103
|
-
},
|
|
104
|
-
});
|
|
105
|
-
const s2 = imageEditorReducer(s, {
|
|
106
|
-
type: 'crop',
|
|
107
|
-
rect: { x: 50, y: 50, width: 200, height: 150 },
|
|
108
|
-
});
|
|
109
|
-
expect(s2.doc.canvas.width).toBe(200);
|
|
110
|
-
expect(s2.doc.canvas.height).toBe(150);
|
|
111
|
-
const layer = s2.doc.layers[0];
|
|
112
|
-
expect(layer.position.x).toBe(50);
|
|
113
|
-
expect(layer.position.y).toBe(30);
|
|
114
|
-
});
|
|
115
|
-
it('mark-clean clears the dirty flag without touching the doc', () => {
|
|
116
|
-
let s = bootstrap();
|
|
117
|
-
s = imageEditorReducer(s, { type: 'set-canvas', canvas: { width: 1, height: 1 } });
|
|
118
|
-
expect(s.dirty).toBe(true);
|
|
119
|
-
const docRef = s.doc;
|
|
120
|
-
s = imageEditorReducer(s, { type: 'mark-clean' });
|
|
121
|
-
expect(s.dirty).toBe(false);
|
|
122
|
-
expect(s.doc).toBe(docRef);
|
|
123
|
-
});
|
|
124
|
-
it('select / set-tool do not mark the doc dirty', () => {
|
|
125
|
-
const s0 = imageEditorReducer(bootstrap(), {
|
|
126
|
-
type: 'add-layer',
|
|
127
|
-
layer: shape('x'),
|
|
128
|
-
});
|
|
129
|
-
const s1 = imageEditorReducer({ ...s0, dirty: false }, {
|
|
130
|
-
type: 'select',
|
|
131
|
-
layerId: s0.doc.layers[0].id,
|
|
132
|
-
});
|
|
133
|
-
expect(s1.dirty).toBe(false);
|
|
134
|
-
const s2 = imageEditorReducer(s1, { type: 'set-tool', tool: 'crop' });
|
|
135
|
-
expect(s2.dirty).toBe(false);
|
|
136
|
-
expect(s2.tool).toBe('crop');
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
function shape(name) {
|
|
140
|
-
return {
|
|
141
|
-
id: '', // assigned by reducer
|
|
142
|
-
type: 'shape',
|
|
143
|
-
name,
|
|
144
|
-
position: { x: 0, y: 0, width: 10, height: 10 },
|
|
145
|
-
content: { shape: 'rect' },
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=imageEditorState.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"imageEditorState.test.js","sourceRoot":"","sources":["../../src/__tests__/imageEditorState.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inlinePreviewGutter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inlinePreviewGutter.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { render, screen } from '@testing-library/react';
|
|
4
|
-
import { EditorProvider } from '../EditorContext';
|
|
5
|
-
import { InlinePreviewGutter } from '../InlinePreviewGutter';
|
|
6
|
-
/**
|
|
7
|
-
* The gutter pulls its data from the EditorContext's parsed Doc. We mount
|
|
8
|
-
* it against a real provider seeded with markdown that contains both an
|
|
9
|
-
* annotated heading (`{[title]}`) and a plain heading. The first
|
|
10
|
-
* should produce a card; the second should be ignored.
|
|
11
|
-
*
|
|
12
|
-
* We deliberately don't snapshot the SVG — the BlockRenderer covers that
|
|
13
|
-
* elsewhere. Here we just assert (a) the gutter mounts, (b) it renders
|
|
14
|
-
* one card per annotated block, and (c) the empty state shows when there
|
|
15
|
-
* are no annotated blocks.
|
|
16
|
-
*/
|
|
17
|
-
function renderGutter(markdown) {
|
|
18
|
-
return render(_jsx(EditorProvider, { initialMarkdown: markdown, initialView: "wysiwyg", articleId: "test", children: _jsx(InlinePreviewGutter, {}) }));
|
|
19
|
-
}
|
|
20
|
-
describe('InlinePreviewGutter', () => {
|
|
21
|
-
it('renders the empty state when no blocks are template-annotated', async () => {
|
|
22
|
-
renderGutter('# Plain heading\n\nSome body text.\n');
|
|
23
|
-
expect(await screen.findByText(/tag a heading with a template/i)).toBeTruthy();
|
|
24
|
-
});
|
|
25
|
-
it('renders one card per template-annotated block', async () => {
|
|
26
|
-
const md = [
|
|
27
|
-
'# Welcome {[title]}',
|
|
28
|
-
'',
|
|
29
|
-
'Subtitle goes here.',
|
|
30
|
-
'',
|
|
31
|
-
'## Plain heading',
|
|
32
|
-
'',
|
|
33
|
-
'No template tag — should not produce a card.',
|
|
34
|
-
'',
|
|
35
|
-
'## Big number {[statHighlight]}',
|
|
36
|
-
'',
|
|
37
|
-
'42',
|
|
38
|
-
].join('\n');
|
|
39
|
-
const { container } = renderGutter(md);
|
|
40
|
-
// Two annotated headings → two cards.
|
|
41
|
-
await screen.findByTestId('inline-preview-gutter');
|
|
42
|
-
const cards = container.querySelectorAll('.squisq-inline-preview-card');
|
|
43
|
-
expect(cards.length).toBe(2);
|
|
44
|
-
// Template labels are rendered alongside each card.
|
|
45
|
-
const labels = Array.from(container.querySelectorAll('.squisq-inline-preview-card-template')).map((el) => el.textContent);
|
|
46
|
-
// Templates render their human-readable label (via `templateLabel`).
|
|
47
|
-
expect(labels).toContain('Title');
|
|
48
|
-
expect(labels).toContain('Stat Highlight');
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
//# sourceMappingURL=inlinePreviewGutter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inlinePreviewGutter.test.js","sourceRoot":"","sources":["../../src/__tests__/inlinePreviewGutter.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;;;;;;GAUG;AAEH,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,MAAM,CACX,KAAC,cAAc,IAAC,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAC,SAAS,EAAC,SAAS,EAAC,MAAM,YAC/E,KAAC,mBAAmB,KAAG,GACR,CAClB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,YAAY,CAAC,sCAAsC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,gCAAgC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,GAAG;YACT,qBAAqB;YACrB,EAAE;YACF,qBAAqB;YACrB,EAAE;YACF,kBAAkB;YAClB,EAAE;YACF,8CAA8C;YAC9C,EAAE;YACF,iCAAiC;YACjC,EAAE;YACF,IAAI;SACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAEvC,sCAAsC;QACtC,MAAM,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,SAAS,CAAC,gBAAgB,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7B,oDAAoD;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,SAAS,CAAC,gBAAgB,CAAC,sCAAsC,CAAC,CACnE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC9B,qEAAqE;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inlinePreviewGutterAllBlocks.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/inlinePreviewGutterAllBlocks.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { describe, expect, it, beforeAll } from 'vitest';
|
|
3
|
-
import { render, screen, waitFor } from '@testing-library/react';
|
|
4
|
-
import { EditorProvider } from '../EditorContext';
|
|
5
|
-
import { InlinePreviewGutter } from '../InlinePreviewGutter';
|
|
6
|
-
// jsdom lacks ResizeObserver — the gutter's heading-layout hook wires one
|
|
7
|
-
// up to recompute on editor resizes. Stub a no-op for these tests.
|
|
8
|
-
beforeAll(() => {
|
|
9
|
-
if (typeof globalThis.ResizeObserver === 'undefined') {
|
|
10
|
-
globalThis.ResizeObserver = class {
|
|
11
|
-
observe() { }
|
|
12
|
-
unobserve() { }
|
|
13
|
-
disconnect() { }
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
/**
|
|
18
|
-
* The gutter pulls heading data from the parsed Doc (via `useHeadingLayout`)
|
|
19
|
-
* and pairs it to DOM headings inside the `.squisq-wysiwyg-container`.
|
|
20
|
-
* To exercise the all-blocks bracket logic we provide both: real markdown
|
|
21
|
-
* (so the parser populates `doc.blocks`) AND a sibling stub container with
|
|
22
|
-
* matching `<h*>` elements (so the DOM-pairing path finds something to
|
|
23
|
-
* measure).
|
|
24
|
-
*/
|
|
25
|
-
function renderWithMatchingDom(markdown, headingHtml) {
|
|
26
|
-
return render(_jsx(EditorProvider, { initialMarkdown: markdown, initialView: "wysiwyg", articleId: "test", children: _jsxs("div", { className: "squisq-editor-with-gutter", style: { position: 'relative', height: 600 }, children: [_jsx("div", { className: "squisq-wysiwyg-container", style: { position: 'relative', width: 800, height: 600 }, children: _jsx("div", { className: "squisq-wysiwyg-editor", dangerouslySetInnerHTML: { __html: headingHtml } }) }), _jsx(InlinePreviewGutter, {})] }) }));
|
|
27
|
-
}
|
|
28
|
-
describe('InlinePreviewGutter — all-block bracket lines', () => {
|
|
29
|
-
it('renders a vertical-extent bar per heading even when none are annotated', async () => {
|
|
30
|
-
const md = '# Hello World\n\nBody\n\n## Getting Started\n\nBody\n\n## Tips\n\nBody\n';
|
|
31
|
-
const { container } = renderWithMatchingDom(md, '<h1>Hello World</h1>' +
|
|
32
|
-
'<p>Body</p>' +
|
|
33
|
-
'<h2>Getting Started</h2>' +
|
|
34
|
-
'<p>Body</p>' +
|
|
35
|
-
'<h2>Tips</h2>' +
|
|
36
|
-
'<p>Body</p>');
|
|
37
|
-
await waitFor(() => {
|
|
38
|
-
const bars = container.querySelectorAll('.squisq-inline-preview-extent');
|
|
39
|
-
expect(bars.length).toBe(3);
|
|
40
|
-
}, { timeout: 1000 });
|
|
41
|
-
// All three should be the untagged variant (no `data-template` on any).
|
|
42
|
-
const bars = container.querySelectorAll('.squisq-inline-preview-extent');
|
|
43
|
-
bars.forEach((bar) => expect(bar.classList.contains('squisq-inline-preview-extent--untagged')).toBe(true));
|
|
44
|
-
});
|
|
45
|
-
it('renders a strong tagged bar for annotated headings + lighter bars for the rest', async () => {
|
|
46
|
-
const md = '# Welcome\n\n## Getting Started {[sectionHeader]}\n\n## Tips\n';
|
|
47
|
-
const { container } = renderWithMatchingDom(md, '<h1>Welcome</h1>' +
|
|
48
|
-
'<h2 data-template="sectionHeader">Getting Started</h2>' +
|
|
49
|
-
'<h2>Tips</h2>');
|
|
50
|
-
await waitFor(() => {
|
|
51
|
-
const bars = container.querySelectorAll('.squisq-inline-preview-extent');
|
|
52
|
-
expect(bars.length).toBe(3);
|
|
53
|
-
}, { timeout: 1000 });
|
|
54
|
-
const bars = Array.from(container.querySelectorAll('.squisq-inline-preview-extent'));
|
|
55
|
-
const tagged = bars.filter((b) => !b.classList.contains('squisq-inline-preview-extent--untagged'));
|
|
56
|
-
const untagged = bars.filter((b) => b.classList.contains('squisq-inline-preview-extent--untagged'));
|
|
57
|
-
expect(tagged.length).toBe(1);
|
|
58
|
-
expect(untagged.length).toBe(2);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
// `screen` import unused but kept to mirror the sibling test file's style.
|
|
62
|
-
void screen;
|
|
63
|
-
//# sourceMappingURL=inlinePreviewGutterAllBlocks.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inlinePreviewGutterAllBlocks.test.js","sourceRoot":"","sources":["../../src/__tests__/inlinePreviewGutterAllBlocks.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jsonEditor.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/jsonEditor.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
3
|
-
import { useState } from 'react';
|
|
4
|
-
import { fireEvent, render, screen } from '@testing-library/react';
|
|
5
|
-
import { JsonEditor } from '../jsonEditor';
|
|
6
|
-
function Controlled({ schema, initial, onValueChange, }) {
|
|
7
|
-
const [value, setValue] = useState(initial);
|
|
8
|
-
return (_jsx(JsonEditor, { schema: schema, value: value, onChange: (v) => {
|
|
9
|
-
setValue(v);
|
|
10
|
-
onValueChange?.(v);
|
|
11
|
-
} }));
|
|
12
|
-
}
|
|
13
|
-
describe('JsonEditor', () => {
|
|
14
|
-
it('renders text input and propagates edits through onChange', () => {
|
|
15
|
-
const schema = {
|
|
16
|
-
type: 'object',
|
|
17
|
-
properties: { title: { type: 'string', title: 'Title' } },
|
|
18
|
-
};
|
|
19
|
-
const onChange = vi.fn();
|
|
20
|
-
render(_jsx(Controlled, { schema: schema, initial: { title: 'Hi' }, onValueChange: onChange }));
|
|
21
|
-
const input = screen.getByDisplayValue('Hi');
|
|
22
|
-
fireEvent.change(input, { target: { value: 'Hello' } });
|
|
23
|
-
expect(onChange).toHaveBeenLastCalledWith({ title: 'Hello' });
|
|
24
|
-
});
|
|
25
|
-
it('toggles a boolean via the toggle control', () => {
|
|
26
|
-
const schema = {
|
|
27
|
-
type: 'object',
|
|
28
|
-
properties: { active: { type: 'boolean', title: 'Active' } },
|
|
29
|
-
};
|
|
30
|
-
const onChange = vi.fn();
|
|
31
|
-
render(_jsx(Controlled, { schema: schema, initial: { active: false }, onValueChange: onChange }));
|
|
32
|
-
const button = screen.getByRole('button', { pressed: false });
|
|
33
|
-
fireEvent.click(button);
|
|
34
|
-
expect(onChange).toHaveBeenLastCalledWith({ active: true });
|
|
35
|
-
});
|
|
36
|
-
it('hides fields whose hidden rule matches', () => {
|
|
37
|
-
const schema = {
|
|
38
|
-
type: 'object',
|
|
39
|
-
properties: {
|
|
40
|
-
showAuthor: { type: 'boolean', title: 'Show author' },
|
|
41
|
-
authorName: {
|
|
42
|
-
type: 'string',
|
|
43
|
-
title: 'Author name',
|
|
44
|
-
squisq: { hidden: { field: 'showAuthor', truthy: false } },
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
const { container } = render(_jsx(Controlled, { schema: schema, initial: { showAuthor: false, authorName: 'Alex' } }));
|
|
49
|
-
expect(container.textContent).not.toContain('Author name');
|
|
50
|
-
});
|
|
51
|
-
it('selecting a different segmented option commits the new enum value', () => {
|
|
52
|
-
const schema = {
|
|
53
|
-
type: 'object',
|
|
54
|
-
properties: {
|
|
55
|
-
size: { type: 'string', title: 'Size', enum: ['s', 'm', 'l'] },
|
|
56
|
-
},
|
|
57
|
-
};
|
|
58
|
-
const onChange = vi.fn();
|
|
59
|
-
render(_jsx(Controlled, { schema: schema, initial: { size: 's' }, onValueChange: onChange }));
|
|
60
|
-
fireEvent.click(screen.getByRole('button', { name: 'l' }));
|
|
61
|
-
expect(onChange).toHaveBeenLastCalledWith({ size: 'l' });
|
|
62
|
-
});
|
|
63
|
-
it('card-stack: + Add appends, × Remove removes, ↑↓ reorder', () => {
|
|
64
|
-
const schema = {
|
|
65
|
-
type: 'object',
|
|
66
|
-
properties: {
|
|
67
|
-
sections: {
|
|
68
|
-
type: 'array',
|
|
69
|
-
title: 'Sections',
|
|
70
|
-
items: {
|
|
71
|
-
type: 'object',
|
|
72
|
-
properties: { heading: { type: 'string' } },
|
|
73
|
-
squisq: { itemLabel: { fromField: 'heading' } },
|
|
74
|
-
},
|
|
75
|
-
squisq: { control: 'card-stack', addLabel: '+ Add section' },
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
const onChange = vi.fn();
|
|
80
|
-
render(_jsx(Controlled, { schema: schema, initial: { sections: [{ heading: 'A' }, { heading: 'B' }] }, onValueChange: onChange }));
|
|
81
|
-
// + Add appends a new empty item.
|
|
82
|
-
fireEvent.click(screen.getByText('+ Add section'));
|
|
83
|
-
expect(onChange).toHaveBeenLastCalledWith({
|
|
84
|
-
sections: [{ heading: 'A' }, { heading: 'B' }, { heading: '' }],
|
|
85
|
-
});
|
|
86
|
-
// × on the first card removes it.
|
|
87
|
-
const removeButtons = screen.getAllByLabelText('Remove');
|
|
88
|
-
fireEvent.click(removeButtons[0]);
|
|
89
|
-
expect(onChange).toHaveBeenLastCalledWith({
|
|
90
|
-
sections: [{ heading: 'B' }, { heading: '' }],
|
|
91
|
-
});
|
|
92
|
-
// ↓ on the first card reorders.
|
|
93
|
-
const downs = screen.getAllByLabelText('Move down');
|
|
94
|
-
fireEvent.click(downs[0]);
|
|
95
|
-
expect(onChange).toHaveBeenLastCalledWith({
|
|
96
|
-
sections: [{ heading: '' }, { heading: 'B' }],
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
it('chip-bin: typing + Enter appends, × removes', () => {
|
|
100
|
-
const schema = {
|
|
101
|
-
type: 'object',
|
|
102
|
-
properties: {
|
|
103
|
-
tags: {
|
|
104
|
-
type: 'array',
|
|
105
|
-
items: { type: 'string' },
|
|
106
|
-
squisq: { control: 'chip-bin', addLabel: '+ Add tag' },
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
};
|
|
110
|
-
const onChange = vi.fn();
|
|
111
|
-
render(_jsx(Controlled, { schema: schema, initial: { tags: ['one'] }, onValueChange: onChange }));
|
|
112
|
-
const addInput = screen.getByPlaceholderText('+ Add tag');
|
|
113
|
-
fireEvent.change(addInput, { target: { value: 'two' } });
|
|
114
|
-
fireEvent.keyDown(addInput, { key: 'Enter' });
|
|
115
|
-
expect(onChange).toHaveBeenLastCalledWith({ tags: ['one', 'two'] });
|
|
116
|
-
fireEvent.click(screen.getByLabelText('Remove one'));
|
|
117
|
-
expect(onChange).toHaveBeenLastCalledWith({ tags: ['two'] });
|
|
118
|
-
});
|
|
119
|
-
it('omitting onChange disables every editor', () => {
|
|
120
|
-
const schema = {
|
|
121
|
-
type: 'object',
|
|
122
|
-
properties: { title: { type: 'string', title: 'Title' } },
|
|
123
|
-
};
|
|
124
|
-
const onChange = vi.fn();
|
|
125
|
-
// Use a sniffer onChange we can verify is never called by simulating an
|
|
126
|
-
// attempted change. We render WITHOUT passing onChange to JsonEditor.
|
|
127
|
-
render(_jsx(JsonEditor, { schema: schema, value: { title: 'Hi' } }));
|
|
128
|
-
const input = screen.getByDisplayValue('Hi');
|
|
129
|
-
expect(input.disabled).toBe(true);
|
|
130
|
-
fireEvent.change(input, { target: { value: 'changed' } });
|
|
131
|
-
expect(onChange).not.toHaveBeenCalled();
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
//# sourceMappingURL=jsonEditor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jsonEditor.test.js","sourceRoot":"","sources":["../../src/__tests__/jsonEditor.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layersPanel.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/layersPanel.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* @vitest-environment jsdom
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
6
|
-
import { fireEvent, render, screen } from '@testing-library/react';
|
|
7
|
-
import { LayersPanel } from '../imageEditor/LayersPanel.js';
|
|
8
|
-
function buildDoc() {
|
|
9
|
-
return {
|
|
10
|
-
version: 1,
|
|
11
|
-
canvas: { width: 100, height: 100 },
|
|
12
|
-
layers: [
|
|
13
|
-
{
|
|
14
|
-
id: 'a',
|
|
15
|
-
type: 'shape',
|
|
16
|
-
name: 'Bottom',
|
|
17
|
-
position: { x: 0, y: 0, width: 10, height: 10 },
|
|
18
|
-
content: { shape: 'rect' },
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
id: 'b',
|
|
22
|
-
type: 'text',
|
|
23
|
-
name: 'Middle',
|
|
24
|
-
position: { x: 0, y: 0, width: 50, height: 20 },
|
|
25
|
-
content: { text: 'Hi', style: { fontSize: 16, color: '#000' } },
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: 'c',
|
|
29
|
-
type: 'shape',
|
|
30
|
-
name: 'Top',
|
|
31
|
-
visible: false,
|
|
32
|
-
position: { x: 0, y: 0, width: 10, height: 10 },
|
|
33
|
-
content: { shape: 'rect' },
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
describe('LayersPanel', () => {
|
|
39
|
-
it('renders layers with the top of the SVG stack first', () => {
|
|
40
|
-
const dispatch = vi.fn();
|
|
41
|
-
render(_jsx(LayersPanel, { doc: buildDoc(), selectedLayerId: null, dispatch: dispatch }));
|
|
42
|
-
const items = screen.getAllByText(/Bottom|Middle|Top/);
|
|
43
|
-
expect(items[0]?.textContent).toContain('Top');
|
|
44
|
-
expect(items[items.length - 1]?.textContent).toContain('Bottom');
|
|
45
|
-
});
|
|
46
|
-
it('clicking the layer name dispatches a select action', () => {
|
|
47
|
-
const dispatch = vi.fn();
|
|
48
|
-
render(_jsx(LayersPanel, { doc: buildDoc(), selectedLayerId: null, dispatch: dispatch }));
|
|
49
|
-
fireEvent.click(screen.getByText('Middle'));
|
|
50
|
-
expect(dispatch).toHaveBeenCalledWith({ type: 'select', layerId: 'b' });
|
|
51
|
-
});
|
|
52
|
-
it('toggling visibility dispatches an update-layer action', () => {
|
|
53
|
-
const dispatch = vi.fn();
|
|
54
|
-
render(_jsx(LayersPanel, { doc: buildDoc(), selectedLayerId: null, dispatch: dispatch }));
|
|
55
|
-
// The "Hide layer" buttons exist for visible layers.
|
|
56
|
-
const hideButtons = screen.getAllByRole('button', { name: 'Hide layer' });
|
|
57
|
-
fireEvent.click(hideButtons[0]); // top-most visible layer is 'b'
|
|
58
|
-
expect(dispatch).toHaveBeenCalledWith({
|
|
59
|
-
type: 'update-layer',
|
|
60
|
-
layerId: 'b',
|
|
61
|
-
patch: { visible: false },
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
it('move-up button is disabled at the top of the stack', () => {
|
|
65
|
-
const dispatch = vi.fn();
|
|
66
|
-
render(_jsx(LayersPanel, { doc: buildDoc(), selectedLayerId: null, dispatch: dispatch }));
|
|
67
|
-
const upButtons = screen.getAllByRole('button', { name: 'Move layer up' });
|
|
68
|
-
// Visual order is c, b, a; layer 'c' is at the top of the stack and cannot move up.
|
|
69
|
-
expect(upButtons[0].disabled).toBe(true);
|
|
70
|
-
});
|
|
71
|
-
it('delete button dispatches a remove-layer action', () => {
|
|
72
|
-
const dispatch = vi.fn();
|
|
73
|
-
render(_jsx(LayersPanel, { doc: buildDoc(), selectedLayerId: null, dispatch: dispatch }));
|
|
74
|
-
const delButtons = screen.getAllByRole('button', { name: 'Delete layer' });
|
|
75
|
-
fireEvent.click(delButtons[0]); // top of stack ('c')
|
|
76
|
-
expect(dispatch).toHaveBeenCalledWith({ type: 'remove-layer', layerId: 'c' });
|
|
77
|
-
});
|
|
78
|
-
it('shows an empty-state message when there are no layers', () => {
|
|
79
|
-
const dispatch = vi.fn();
|
|
80
|
-
render(_jsx(LayersPanel, { doc: { version: 1, canvas: { width: 1, height: 1 }, layers: [] }, selectedLayerId: null, dispatch: dispatch }));
|
|
81
|
-
expect(screen.getByText(/no layers yet/i)).toBeTruthy();
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
//# sourceMappingURL=layersPanel.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layersPanel.test.js","sourceRoot":"","sources":["../../src/__tests__/layersPanel.test.tsx"],"names":[],"mappings":"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"}
|