Project Structure
Main source directories:
src/core— shared Vue components, session lifecycle, runtime orchestrationsrc/core/runtime— pure profile/chrome/session-key derivation anduseEditorRuntimesrc/capabilities— capability registry, extension builder, toolbar gate mappingsrc/configs— public config types and Full/Inline defaultssrc/extensions— Tiptap extension implementationssrc/components/editor— reusable editor controlssrc/components/tools— editor chrome and contextual toolssrc/appearance— appearance and color utilitiessrc/shared— shared modules (e.g. local Ant Design Vue registration inantd.ts)src/styles— explicit CSS entry pointssrc/utils/zIndex.ts— read--ye-z-*tokens from the.yaniv-editorrootsrc/composables/useOverlayMount.ts—useOverlayMountTarget/useOverlayBubbleMenufor overlay portal mountingsrc/composables/useOverlayFeedback.ts/src/core/overlayFeedback.ts— Toast / Notice on overlay portal (no Ant Design static message/notification)
Full Editor API decisions live in src/core/editorTypes.ts, src/configs/editorPreset.ts, and src/core/runtime/resolveEditorProfile.ts.
Inline Editor toolbar decisions live in src/configs/inlineToolbar.ts and src/configs/inlineTypes.ts.
Preset default abilities are defined only in src/core/runtime/resolveEditorProfile.ts. editorPreset.ts holds toolbar and layout defaults only.
Runtime architecture: Architecture. Full normative spec: root ARCHITECTURE.md.
CSS Layers
Styles split into structure, functional chrome, and appearance. Do not duplicate structure rules in appearance files.
| Layer | Location | Responsibility |
|---|---|---|
| Tokens | src/styles/variables.css | --ye-* tokens; colors on :root, z-index on .yaniv-editor |
| Structure | src/styles/content.css, table.css, code-block.css | ProseMirror borders, backgrounds, interaction semantics |
| Functional chrome | src/styles/*.css, src/components/tools/** | Toolbar, menus, drag handle, outline, overlay-portal.css, etc. |
| Appearance | src/appearance/styles/*.css | Theme tokens and typography (margin, font-size, padding) |
Import order is defined in src/styles/index.css (Full) and src/styles/inline.css (Inline). Both import content.css and overlay-portal.css before appearance CSS.
Rules:
- Appearance files may override
--ye-*tokens and typography (do not override z-index viacustomAppearanceVars; usezIndexBaseprop). - Do not redeclare
border/backgroundshorthands on selectors already owned by structure files. block-hover.cssships with the Full bundle but only applies under.appearance-notion(Notion block hover highlight).appearance="custom"has no theme file; override visual tokens on the editor root via:custom-appearance-vars.- Global overlays (bubble menus, BlockPicker, mention, AI popover, etc.) mount via
.yaniv-editor__overlay-portalinsideEditorShell. See Z-Index & Overlays.
Host usage: Appearance and Color, Integration Props.