tiptap-editor

Tiptap Editor API Patterns

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "tiptap-editor" with this command: npx skills add xiaolai/vmark/xiaolai-vmark-tiptap-editor

Tiptap Editor API Patterns

Overview

This skill documents proper Tiptap API usage patterns for vmark development. It helps distinguish when to use Tiptap's high-level API vs direct ProseMirror access.

When to Use Tiptap API

Always prefer Tiptap API for:

  • Format commands (bold, italic, underline, etc.)

  • Block type changes (heading, paragraph, code block)

  • List operations (bullet, ordered, toggle, indent/outdent)

  • Table operations via Tiptap table extension

  • Content insertion and replacement

  • Editor state queries (isActive , getAttributes )

Tiptap patterns to use:

// Direct commands editor.commands.toggleBold() editor.commands.setHeading({ level: 2 }) editor.commands.setContent(doc, { emitUpdate: false })

// Chained commands (for multiple operations) editor.chain().focus().setHeading({ level: 2 }).run() editor.chain().focus().toggleMark("underline").run()

// State queries editor.isActive("blockquote") editor.isActive("heading", { level: 2 }) editor.getAttributes("link")

When Direct ProseMirror is Appropriate

Use ProseMirror directly for:

  • Markdown conversion layer (proseMirrorToMdast.ts , mdastToProseMirror.ts )

  • Multi-cursor/selection subclassing (MultiSelection.ts )

  • Custom node views

  • Low-level transaction manipulation

  • Schema-level operations

Known Issues in vmark

  1. cursorHandlers.ts Block Boundary Issue

src/hooks/mcpBridge/cursorHandlers.ts uses doc.textContent which flattens the document and loses block boundaries. The correct approach is to use $pos helpers:

// WRONG - loses block structure const text = doc.textContent;

// RIGHT - respects block boundaries const $pos = doc.resolve(from); const currentNode = $pos.parent; const blockStart = $pos.before($pos.depth); const blockEnd = $pos.after($pos.depth);

  1. Cursor Sync Drift After WYSIWYG Edits

sourceLine attributes are only set on initial parse. After WYSIWYG edits that add/remove blocks, line numbers no longer match the source. This is a known limitation.

  1. HtmlNodeView.ts Store Issue

src/plugins/markdownArtifacts/HtmlNodeView.ts writes cursor info to wrong store.

References

  • references/patterns.md

  • Detailed API patterns and $pos usage

  • references/examples.md

  • Real code examples from vmark codebase

Workflow

  • Identify operation type (format, block, selection, traversal)

  • Check if Tiptap has a built-in command for it

  • Use editor.commands.xxx() for single operations

  • Use editor.chain().focus().xxx().run() when focus is needed or chaining

  • For node traversal, use doc.resolve(pos) to get $pos helpers

  • For state queries, use editor.isActive() or editor.getAttributes()

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Interior Fullplan

# 室内设计·全案方案自动生成器

Archived SourceRecently Updated
General

kb-archiver

智能本地知识库归档系统 v1.1.0。支持 AI 智能分类、批量归档、全文搜索、统计报告。 自动将文件分类归档到本地知识库,提取全文索引支持秒级搜索。 小文件存本地、大文件可对接云存储。支持 Excel/Word/PPT/PDF/TXT 等格式。 当用户需要:归档文件、建立知识库、全文检索文档内容、管理大量工作文档、批量处理文件夹时使用。 关键词:知识库、归档、文件管理、全文搜索、文档索引、批量归档、AI分类

Archived SourceRecently Updated
General

honest-agent

强制诚实系统:防止AI撒谎、虚构、言行不一。核心功能:(1) 承诺自动追踪(写入honest-commitments.json)(2) 回复前诚实校验拦截 (3) 媒体并行识别(大模型+OCR择优)(4) 诚实审计日志 (5) 安全独立存储。触发词:诚实、撒谎、虚构、承诺、图片识别、媒体处理、我承诺、我会帮你。

Archived SourceRecently Updated
General

long-term-plan

长期计划推进技能。用于管理需要持续数天/数周的任务,采用滚动节点式规划(每3-5天为一个阶段,阶段结束时复盘并规划下一阶段)。支持自动日期计算、每日同步、复盘统计、多任务管理、极简指令。当用户说"开一个长期计划"、"今天计划任务"、"阶段复盘"、"滚动下一阶段"、"列出所有计划"时使用。

Archived SourceRecently Updated