portable-text-serialization

Рендеринг и сериализация Portable Text в React, Svelte, Vue, Astro, HTML, Markdown и обычный текст. Используйте при реализации рендеринга Portable Text в любом фронтенде…

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

Portable Text Serialization

Render Portable Text content across frameworks using the @portabletext/* library family. Each library follows the same component-mapping pattern: you provide a components object that maps PT node types to framework-specific renderers.

Portable Text Structure (Quick Reference)

PT is an array of blocks. Each block has _type, optional style, children (spans), markDefs, listItem, and level.

Root array
├── block (_type: "block")
│   ├── style: "normal" | "h1" | "h2" | "blockquote" | ...
│   ├── children: [span, span, ...]
│   │   └── span: { _type: "span", text: "...", marks: ["strong", "<markDefKey>"] }
│   ├── markDefs: [{ _key, _type: "link", href: "..." }, ...]
│   ├── listItem: "bullet" | "number" (optional)
│   └── level: 1, 2, 3... (optional, for nested lists)
├── custom block (_type: "image" | "code" | any custom type)
└── ...more blocks

Marks come in two forms:

  • Decorators: string values in marks[] like "strong", "em", "underline", "code"
  • Annotations: keys in marks[] referencing entries in markDefs[] (e.g., links, internal references)

Component Mapping Pattern (All Frameworks)

Every @portabletext/* library accepts a components object with these keys:

KeyRendersProps/Data
typesCustom block/inline types (image, code, CTA)value (the block data)
marksDecorators + annotationschildren + value (mark data)
blockBlock styles (h1, normal, blockquote)children
listList wrappers (ul, ol)children
listItemList itemschildren
hardBreakLine breaks within a block

Framework-Specific Rules

Read the rule file matching your framework:

  • React / Next.js: rules/react.md@portabletext/react or next-sanity
  • Svelte / SvelteKit: rules/svelte.md@portabletext/svelte
  • Vue / Nuxt: rules/vue.md@portabletext/vue
  • Astro: rules/astro.mdastro-portabletext
  • HTML (server-side): rules/html.md@portabletext/to-html
  • Markdown: rules/markdown.md@portabletext/markdown
  • Plain text extraction: rules/plain-text.md@portabletext/toolkit

Additional Community Serializers

These are listed on portabletext.org but don't have dedicated rule files:

TargetPackage
React Native@portabletext/react-native-portabletext
React PDF@portabletext/react-pdf-portabletext
Solidsolid-portabletext
Qwikportabletext-qwik
Shopify Liquidportable-text-to-liquid
PHPsanity-php (SanityBlockContent class)
Pythonportabletext-html
C# / .NETdotnet-portable-text
Dart / Flutterflutter_sanity_portable_text

Common Patterns (All Frameworks)

Custom Types Need Explicit Components

PT renderers only handle standard blocks by default. Custom types (image, code, callToAction, etc.) require explicit component mappings — they won't render otherwise.

Keep Components Object Stable

In React/Vue, define components outside the render function or memoize it. Recreating on every render causes unnecessary re-renders.

Handle Missing Components Gracefully

All libraries accept onMissingComponent to control behavior when encountering unknown types:

  • false — suppress warnings
  • Custom function — log or report

Querying PT with GROQ

Always expand references inside custom blocks:

body[]{
  ...,
  _type == "image" => {
    ...,
    asset->
  },
  markDefs[]{
    ...,
    _type == "internalLink" => {
      ...,
      "slug": @.reference->slug.current
    }
  }
}

Больше skills от sanity-io

sanity-migration
sanity-io
Планирует, выполняет и проверяет миграции из других CMS и систем управления контентом в Sanity. Используйте при миграции или переходе на Sanity из AEM, Adobe Experience Manager, Contentful, Strapi, Webflow, WordPress, Payload, Drupal, файлов Markdown/MDX/frontmatter, экспортов WXR/XML, API CMS, дампов баз данных, статического HTML, а также при проектировании процессов извлечения, трансформации, преобразования в Portable Text, миграции ресурсов, редиректов, валидации и переключения.
officialdevelopmentdatabase
create-agent-with-sanity-context
sanity-io
Создавайте AI-агентов со структурированным доступом к контенту Sanity через Agent Context. Используйте при настройке чат-бота на базе Sanity, подключении AI-ассистента к Sanity…
official
dial-your-context
sanity-io
Интерактивный сеанс для создания содержимого поля Instructions для Sanity Agent Context MCP. Используйте этот навык, когда пользователи упоминают настройку контекста агента, улучшение…
official
optimize-agent-prompt
sanity-io
Настройте агента контекста Sanity Agent с помощью направленного диалога. Преобразует данные исследования в готовые к использованию инструкции и создает системный промпт…
official
shape-your-agent
sanity-io
Интерактивная сессия для создания системного промпта для AI-агента на базе Sanity Agent Context MCP. Используйте этот навык, когда пользователи хотят определить личность агента,…
official
content-experimentation-best-practices
sanity-io
Структурированное руководство по проектированию, проведению и анализу контент-экспериментов для повышения конверсии и вовлеченности. Охватывает фреймворки гипотез, выбор метрик, расчет размера выборки и проверку статистической значимости в A/B и многофакторных экспериментах. Включает подробные материалы по p-значениям, доверительным интервалам, анализу мощности и байесовским методам интерпретации результатов. Предоставляет шаблоны интеграции с CMS для управления вариантами на уровне полей и подключения внешних...
official
content-modeling-best-practices
sanity-io
Структурированное руководство по моделированию контента для проектирования схем, повторного использования и многоканальной доставки. Охватывает основные принципы: работа с контентом как с данными, а не страницами, поддержание единых источников истины, проектирование для будущих каналов и оптимизация рабочих процессов редакторов. Включает структуры принятия решений для ссылок и встроенных объектов, разделение ответственности и шаблоны повторного использования контента. Предоставляет рекомендации по таксономии и классификации для плоских, иерархических и фасетных подходов. Применяется к...
official
portable-text-conversion
sanity-io
Преобразует HTML и Markdown в блоки Portable Text для Sanity. Используется при миграции контента из устаревших CMS, импорте HTML или Markdown в Sanity,…
official