sno-blog/sanity/schemas/objects/blockContent.ts
2026-02-02 22:53:36 +03:00

94 lines
2.7 KiB
TypeScript

import { defineType, defineArrayMember } from 'sanity'
export const blockContentType = defineType({
name: 'blockContent',
title: 'Контент',
type: 'array',
of: [
defineArrayMember({
type: 'block',
title: 'Блок',
styles: [
{ title: 'Обычный', value: 'normal' },
{ title: 'Заголовок 2', value: 'h2' },
{ title: 'Заголовок 3', value: 'h3' },
{ title: 'Заголовок 4', value: 'h4' },
{ title: 'Цитата', value: 'blockquote' },
],
lists: [
{ title: 'Маркированный', value: 'bullet' },
{ title: 'Нумерованный', value: 'number' },
],
marks: {
decorators: [
{ title: 'Жирный', value: 'strong' },
{ title: 'Курсив', value: 'em' },
{ title: 'Подчёркнутый', value: 'underline' },
{ title: 'Зачёркнутый', value: 'strike-through' },
{ title: 'Код', value: 'code' },
],
annotations: [
{
name: 'link',
type: 'object',
title: 'Ссылка',
fields: [
{
name: 'href',
type: 'url',
title: 'URL',
validation: (Rule) =>
Rule.uri({
allowRelative: true,
scheme: ['http', 'https', 'mailto', 'tel'],
}),
},
{
name: 'blank',
type: 'boolean',
title: 'Открывать в новой вкладке',
initialValue: false,
},
],
},
],
},
}),
defineArrayMember({
type: 'image',
title: 'Изображение',
options: { hotspot: true },
fields: [
{
name: 'alt',
type: 'string',
title: 'Альтернативный текст',
description: 'Важно для SEO и доступности',
},
{
name: 'caption',
type: 'string',
title: 'Подпись',
},
],
}),
defineArrayMember({
type: 'code',
title: 'Код',
options: {
language: 'typescript',
languageAlternatives: [
{ title: 'TypeScript', value: 'typescript' },
{ title: 'JavaScript', value: 'javascript' },
{ title: 'HTML', value: 'html' },
{ title: 'CSS', value: 'css' },
{ title: 'Python', value: 'python' },
{ title: 'Bash', value: 'bash' },
{ title: 'JSON', value: 'json' },
],
withFilename: true,
},
}),
],
})