portable-text-conversion

Converta conteúdo HTML e Markdown em blocos Portable Text para Sanity. Use ao migrar conteúdo de CMSs legados, importando HTML ou Markdown para o Sanity,…

npx skills add https://github.com/sanity-io/agent-toolkit --skill portable-text-conversion

Portable Text Conversion

Convert external content (HTML, Markdown) into Portable Text for Sanity. Three main approaches:

  1. markdownToPortableText — Convert Markdown directly using @portabletext/markdown (recommended for Markdown)
  2. htmlToBlocks — Parse HTML into PT blocks using @portabletext/block-tools (for HTML migration)
  3. Manual construction — Build PT blocks directly from any source (APIs, databases, etc.)

Portable Text Specification

Understand the target format before converting. PT is an array of blocks:

[
  {
    "_type": "block",
    "_key": "abc123",
    "style": "normal",
    "children": [
      {"_type": "span", "_key": "def456", "text": "Hello ", "marks": []},
      {"_type": "span", "_key": "ghi789", "text": "world", "marks": ["strong"]}
    ],
    "markDefs": []
  },
  {
    "_type": "block",
    "_key": "jkl012",
    "style": "h2",
    "children": [
      {"_type": "span", "_key": "mno345", "text": "A heading", "marks": []}
    ],
    "markDefs": []
  },
  {
    "_type": "image",
    "_key": "pqr678",
    "asset": {"_type": "reference", "_ref": "image-abc-200x200-png"}
  }
]

Key rules:

  • Every block and span needs _key (unique within the array)
  • _type: "block" is for text blocks; custom types use their own _type
  • markDefs holds annotation data; marks on spans reference markDefs[*]._key or are decorator strings
  • Lists use listItem ("bullet" | "number") and level (1, 2, 3...) on regular blocks

Conversion Rules

Read the rule file matching your source format:

  • Markdown → Portable Text: rules/markdown-to-pt.md@portabletext/markdown with markdownToPortableText (recommended)
  • HTML → Portable Text: rules/html-to-pt.md@portabletext/block-tools with htmlToBlocks
  • Manual PT Construction: rules/manual-construction.md — build blocks programmatically from any source

Note: @sanity/block-tools is the legacy package name. Always use @portabletext/block-tools for new projects. The API is the same.

Mais skills de sanity-io

performance-optimization
sanity-io
Otimiza o desempenho da aplicação. Use quando existirem requisitos de desempenho, quando suspeitar de regressões de desempenho, ou quando os Core Web Vitals ou tempos de carregamento…
official
rxjs-like-a-pro
sanity-io
Esta habilidade ajuda você a escrever código RxJS idiomático, composável e livre de armadilhas comuns. A filosofia central: mantenha a lógica na cadeia observável. Toda vez que você recorrer a .subscribe(), pergunte se o trabalho poderia ser expresso como uma transformação dentro de .pipe().
official
find-skills
sanity-io
Ajuda os usuários a descobrir e instalar skills de agente quando fazem perguntas como "como faço X", "encontre uma skill para X", "existe uma skill que possa...", ou expressam...
official
next-cache-components
sanity-io
Componentes de Cache do Next.js 16 - PPR, diretiva use cache, cacheLife, cacheTag, updateTag
official
vercel-react-best-practices
sanity-io
Diretrizes de otimização de desempenho para React e Next.js da Vercel Engineering. Esta skill deve ser usada ao escrever, revisar ou refatorar React/Next.js…
official
frontend-design
sanity-io
Crie interfaces frontend distintas e de qualidade profissional, com alto padrão de design. Use esta habilidade quando o usuário pedir para construir componentes web, páginas ou…
official
plugin-transfer
sanity-io
Orienta agentes na migração de um plugin existente para este monorepo usando o fluxo de trabalho do gerador copy-plugin.
official
test-studio-script-runner
sanity-io
Explica a ferramenta Script Runner do dev/test-studio. Use ao adicionar, editar, executar ou documentar scripts em dev/test-studio/src/script-runner, ou quando o…
official