Skip to content

Peritext laundry list #730

Open
Open
@streamich

Description

@streamich

High-level tasks:


Pile of tasks:

  • In plugins, consider replacing {children} by <Slot/>
Image Image
  • 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 and LeafBlock instances.
    • Re-use old Inline instances.
    • Lazy compute ChunkSlices, 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.
  • 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.
  • 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
  • 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

Icons

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions