import { z } from "zod/mini" import { EmbedContentSchema } from "./embed" import { ImageContentViewSchema } from "./image" import { getEmbedBlockSchema, getImageBlockSchema, getSpanSchema, getTextBlockSchema, } from "./legacy/richText" import type { Span } from "./legacy/richText" import type { FilledLinkContentValue } from "./link" import { FilledLinkContentValueSchema } from "./link" export { RichTextNodeType } from "./legacy/richText" export type { RichTextNodeTypes } from "./legacy/richText" // Spans export type RichTextContentSpan = Span export const RichTextContentSpanSchema: z.ZodMiniType = getSpanSchema( FilledLinkContentValueSchema, ) // Blocks const RichTextContentTextBlockSchema = getTextBlockSchema(FilledLinkContentValueSchema) export type RichTextContentTextBlock = z.infer const RichTextContentImageBlockSchema = getImageBlockSchema( ImageContentViewSchema, FilledLinkContentValueSchema, ) export type RichTextContentImageBlock = z.infer const RichTextContentEmbedBlockSchema = getEmbedBlockSchema(EmbedContentSchema) export type RichTextContentEmbedBlock = z.infer export const RichTextContentBlockSchema: z.ZodMiniType = z.discriminatedUnion( "type", [ RichTextContentTextBlockSchema, RichTextContentImageBlockSchema, RichTextContentEmbedBlockSchema, ], ) // Used by content/codec/richText export type RichTextContentBlock = | RichTextContentTextBlock | RichTextContentImageBlock | RichTextContentEmbedBlock export const RichTextContentType = "StructuredTextContent" as const export type RichTextContent = { __TYPE__: typeof RichTextContentType value: RichTextContentBlock[] } export const RichTextContentSchema = z.object({ __TYPE__: z.literal(RichTextContentType), value: z.array(RichTextContentBlockSchema), })