Open
Description
High-level tasks:
- Read only-mode (and fragment rendering) #857
- Accessibility #858
- Code blocks #859
- Paragraph block #860
- Caret floating menu #861
- Product feature investigation #862
- Size toggle in context menu (toolbar menu) #863
- Multiple cursors #864
- DOM insert event support #865
- Detailed slice editing #866
- Composition #867
- Input overlay UI #868
- AI features #869
- Minimap #870
- Block floating menu #871
- Document level storage #872
- External state rendering #873
- Top toolbar #874
Pile of tasks:
- In plugins, consider replacing
{children}
by<Slot/>


- Gracefully handle
RESET
event. - Add ability to blur the editor and to remove all cursors.
- BUG: support
input
event composition when done through keyboard. - Use
contentvisibilityautostatechange
event to not re-render invisible blocks. - Make the editor tabbable, add
tabIndex={0}
. - Formatting
- API to allow crawling of the URL and rendering its title.
- Ability to "reselect". UI stores the action to be performed, and presents it to the user again once user selects a new selection.
- Highlight selection green when configuration is in progress.
- After marker insert, move the cursor in from of the marker.
- APIs for removing markers.
- APIs for changing marker attributes.
- Delete markers on
Backspace
clicks. - On
blur
grey out the cursors. - On
focus
make cursors active. - Create standartized slice annotations for:
- bold
- italic
- etc.
- Do not process
mousemove
events if coordinates don't change. - Setting cursor position to the current position, should not change block hashes.
- Bug: add ability to set caret using mouse at to the very start or very end of text.
- Block layer performance
Re-use old.Block
andLeafBlock
instances- Re-use old
Inline
instances. - Lazy compute
ChunkSlice
s, only when necessary. (And cache?) - When rending
Inline
, memoize it based on hash.- Do not memoize on
.text
contents. - For the same hash, do not re-render all the renderers.
- Do not memoize on
- Inline formatting
- When adding slice, expand selection as per Peritext paper (next char anchor).
- Ability to remove formatting.
- Ability to insert formatting into only a caret selection.
- Block formatting
- Support
Enter
paragraph splitting using the right DOM events. - Support line break insertion using
Ctrl + Enter
. - Support block splits, for all blocks, when not in paragraph block.
- Support block deletion/merge.
- Support block type change.
- Support
- In
cursor
events, operate in the native CRDT coordinates. - Support rendering ABS start and end cursors.
- BUG: cursor at ABS and is not included into block layer.
- Support soft line detection in rendering layer.
- Rendering surface
- Implement some very basic defaults, such that, when no renderers are provided, the caret and selection are still visible.
- Add support for soft lines in events
- Events
- Insert events
- Insert from clipboard
- Insert rich-text from clipboard
- Insert Peritext rich-text
- Delete events
- Selection
- Selection across slice boundaries
- Selection across block boundaries
- Delete backwards/forwards
- Delete unit: (1) char; (2) word; (3) line
- Cursor events
- Clipboard events
- Inline slice events
- Block marker events
- History events
- Imperative APIs
- Insert events
- Improve how renderers surround the root block element. React tree should not change because of the renderer changes.
- Inside coloured text, split the caret vertically in half and color top part in the color of the text and color the lower part in some color that matches the background.
- On multiple quick consecutive clicks extend selection in the following order: (1) word; (2) soft line; (3) hard line?; (4) block (what if it is the same as hard line?); (5) block and two adjacent blocks; (6) the whole document.
- Separate context and
<Editor>
into their very own components, create state container. So that toolbar can be rendered in a very different place. - Selection menu move into viewport
Caret
- Ability to change caret color
- Keep track and render fast typing score