|
|
@@ -2,7 +2,32 @@
|
|
|
|
|
|
A high-performance **block markdown editor** built with Vue 3, TypeScript, ProseMirror, and the Lezer parsing framework.
|
|
|
|
|
|
-Documents are structured as distinct, interactive **Blocks** rather than a single flat string. A 3-stage parsing pipeline bridges UI state down to ASTs, enabling real-time extraction of pages, references, task state, callouts, and inline decorations.
|
|
|
+Documents are structured as distinct, interactive **Blocks** rather than a single flat string. Each block is a self-contained ProseMirror editor instance that stores raw markdown as plain text — no AST conversion, no mark storage. A Lezer-based 3-stage parsing pipeline renders syntax as visual decorations in real time, enabling live-preview editing of Obsidian-style references, task states, callouts, headings, and inline formatting.
|
|
|
+
|
|
|
+The editor is designed for the philosophy that **plain text should stay plain text** — formatting is purely decorative, never structural. This makes it ideal for note-taking apps, knowledge bases, and any tool that needs to edit rich markdown with programmatic access to the raw source.
|
|
|
+
|
|
|
+## Vision
|
|
|
+
|
|
|
+Enesis is being built as a complete block-editing substrate:
|
|
|
+
|
|
|
+| Phase | Feature | Status |
|
|
|
+|---|---|---|
|
|
|
+| 1–5 | Core editor: clean content model, keyboard boundaries, focus/cursor, inline + block decorations, Lezer-only AST pipeline | **Done** |
|
|
|
+| 6 | Code block node views with CodeMirror 6, inline/block LaTeX with KaTeX | Next |
|
|
|
+| 7 | Toolbar handler API — `toggleBold`, `insertLink`, `setHeading`, `toggleTask` from Lezer tree queries | Planned |
|
|
|
+| 8 | Asset handling — image drop, upload protocol, inline preview | Planned |
|
|
|
+| 9 | Reference interactivity — clickable `[[page]]`, `((block))`, `#tag` chips with preview | Planned |
|
|
|
+| 10 | Multi-block editing — shared toolbar, drag handle, suggestion/mention menus | Planned |
|
|
|
+| 11 | WCAG 2.1 AA compliance, screen reader support, RTL, high contrast | Planned |
|
|
|
+| 12 | Third-party decoration plugin system | Planned |
|
|
|
+| 13 | History orchestration API across blocks | Planned |
|
|
|
+
|
|
|
+## Design Principles
|
|
|
+
|
|
|
+- **Raw markdown in, raw markdown out.** ProseMirror never converts `**bold**` to `<strong>`. What you type is what's stored.
|
|
|
+- **Syntax through decorations, not marks.** Bold, italic, links, references, tags — all rendered via ProseMirror decorations, never via schema marks. This keeps the document model clean and pluggable.
|
|
|
+- **Lezer-based parsing.** All syntax features flow through a single `@lezer/markdown` AST walk with custom extensions for Obsidian-style elements.
|
|
|
+- **Block-level isolation.** Each block is an independent ProseMirror instance. Blocks coordinate via emitted events (`split`, `merge-previous`, `arrow-up-from-start`, etc.) — no shared state.
|
|
|
|
|
|
## Monorepo Structure
|
|
|
|