Hey all!
I am working on an interactive scientific writing platform called curvenote.com, which integrates with Jupyter. We recently released a few open source projects that we have been working on over the past year that might be interesting/useful to this community.
-
@curvenote/editor
- prosemirror + react/redux -
sidenotes
- google-docs style placement of comments with inline references. -
@curvenote/schema
- the schema we use that translates to Latex and MyST flavoured markdown.
Happy to answer questions! Let me know what you think! The prosemirror community & library is fantastic, thanks!
-Rowan
@curvenote/editor
I think this is pretty well trod territory by now: another react wrapper of prosemirror with suggestions, so I will stick to what is different, our inline interactive widgets. Our goal is to make it easy to write content like this - with inline sliders, data, variables, etc. that hook up to visualizations.
The editor currently looks like this:
Interactive widgets using web-components
We went with the approach of having prosemirror wrap web-components that contain the interactivity, which means that there is very little custom view from the prosemirror perspective - just manipulating XML. This made the integration with prosemirror really simple (mostly around right clicking on the widgets and popping up a menu). We communicate state back to react using a shared redux store.
Suggestion framework
The other piece that is currently buried in there is our suggestions, which combine an input rule trigger and then a decoration, I don’t think I have seen this approach yet, and it works quite well. Happy to spin this out if it is useful to folks.
sidenotes
sidenotes
is a library for placing notes/comments to the side of a document. Just the placement, no comment UI included. Allows inline references as well as “block” based reference fallbacks.
@curvenote/schema
@curvenote/schema
is a library to convert between markdown and the prosemirror internal format. There is some support for latex export here, as well as MyST flavoured markdown import and export.