import { FilledLinkField } from "./link.cjs";
import { FieldState } from "./types.cjs";
import { EmbedField } from "./embed.cjs";

//#region src/types/value/richText.d.ts
/**
 * Types enum for RichTextNodes
 *
 * @see More details: {@link https://prismic.io/docs/rich-text-title}
 */
declare const RichTextNodeType: {
  readonly heading1: "heading1";
  readonly heading2: "heading2";
  readonly heading3: "heading3";
  readonly heading4: "heading4";
  readonly heading5: "heading5";
  readonly heading6: "heading6";
  readonly paragraph: "paragraph";
  readonly preformatted: "preformatted";
  readonly strong: "strong";
  readonly em: "em";
  readonly listItem: "list-item";
  readonly oListItem: "o-list-item";
  readonly list: "group-list-item";
  readonly oList: "group-o-list-item";
  readonly image: "image";
  readonly embed: "embed";
  readonly hyperlink: "hyperlink";
  readonly label: "label";
  readonly span: "span";
};
/**
 * Types for RichTextNodes
 *
 * @see More details: {@link https://prismic.io/docs/rich-text-title}
 */
type RichTextNodeTypes = (typeof RichTextNodeType)[keyof typeof RichTextNodeType];
/** Base to be extended by other rich text nodes. */
interface RTTextNodeBase {
  text: string;
  spans: RTInlineNode[];
  direction?: "ltr" | "rtl";
}
/** Rich text `heading1` node */
interface RTHeading1Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading1;
}
/** Rich text `heading2` node */
interface RTHeading2Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading2;
}
/** Rich text `heading3` node */
interface RTHeading3Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading3;
}
/** Rich text `heading4` node */
interface RTHeading4Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading4;
}
/** Rich text `heading5` node */
interface RTHeading5Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading5;
}
/** Rich text `heading6` node */
interface RTHeading6Node extends RTTextNodeBase {
  type: typeof RichTextNodeType.heading6;
}
/** Rich text `paragraph` node */
interface RTParagraphNode extends RTTextNodeBase {
  type: typeof RichTextNodeType.paragraph;
}
/** Rich text `preformatted` node */
interface RTPreformattedNode extends RTTextNodeBase {
  type: typeof RichTextNodeType.preformatted;
}
/** Rich text `list-item` node */
interface RTListItemNode extends RTTextNodeBase {
  type: typeof RichTextNodeType.listItem;
}
/** Rich text `o-list-item` node for ordered lists */
interface RTOListItemNode extends RTTextNodeBase {
  type: typeof RichTextNodeType.oListItem;
}
/** @internal Span Node base to be extended for other Span nodes */
interface RTSpanNodeBase {
  start: number;
  end: number;
}
/** Rich text `strong` node */
interface RTStrongNode extends RTSpanNodeBase {
  type: typeof RichTextNodeType.strong;
}
/** Rich text `embed` node */
interface RTEmNode extends RTSpanNodeBase {
  type: typeof RichTextNodeType.em;
}
/** Rich text `label` node */
interface RTLabelNode extends RTSpanNodeBase {
  type: typeof RichTextNodeType.label;
  data: {
    label: string;
  };
}
/** Rich text `image` nodes. They could link to other documents, external web links and media fields */
type RTImageNode = {
  type: typeof RichTextNodeType.image;
  id: string;
  url: string;
  alt: string | null;
  copyright: string | null;
  dimensions: {
    width: number;
    height: number;
  };
  edit: {
    x: number;
    y: number;
    zoom: number;
    background: string;
  };
  linkTo?: FilledLinkField;
};
/** Rich text `embed` node */
type RTEmbedNode = {
  type: typeof RichTextNodeType.embed;
  oembed: EmbedField;
};
/**
 * Rich text `a` node
 *
 * @see More details: {@link https://prismic.io/docs/rich-text-title#elements-and-styles}
 */
interface RTLinkNode extends RTSpanNodeBase {
  type: typeof RichTextNodeType.hyperlink;
  data: FilledLinkField;
}
/** Rich text `list` node */
interface RTListNode {
  type: typeof RichTextNodeType.list;
  items: RTListItemNode[];
}
/** Rich text o-lost node */
interface RTOListNode {
  type: typeof RichTextNodeType.oList;
  items: RTOListItemNode[];
}
/** Rich text `span` node */
interface RTSpanNode extends RTTextNodeBase {
  type: typeof RichTextNodeType.span;
}
/** Nodes from a rich text field */
type RTNode = RTHeading1Node | RTHeading2Node | RTHeading3Node | RTHeading4Node | RTHeading5Node | RTHeading6Node | RTParagraphNode | RTPreformattedNode | RTListItemNode | RTOListItemNode | RTImageNode | RTEmbedNode;
/** Rich text nodes with text */
type RTTextNode = RTHeading1Node | RTHeading2Node | RTHeading3Node | RTHeading4Node | RTHeading5Node | RTHeading6Node | RTParagraphNode | RTPreformattedNode | RTListItemNode | RTOListItemNode;
/** Rich text block nodes */
type RTBlockNode = RTHeading1Node | RTHeading2Node | RTHeading3Node | RTHeading4Node | RTHeading5Node | RTHeading6Node | RTParagraphNode | RTPreformattedNode | RTListItemNode | RTOListItemNode | RTListNode | RTOListNode | RTImageNode | RTEmbedNode;
/** Inline rich text nodes */
type RTInlineNode = RTStrongNode | RTEmNode | RTLabelNode | RTLinkNode;
/** All rich text nodes */
type RTAnyNode = RTBlockNode | RTInlineNode | RTSpanNode;
/**
 * A rich text field.
 *
 * @see Rich text field documentation: {@link https://prismic.io/docs/rich-text-title}
 */
type RichTextField<State extends FieldState = FieldState> = State extends "empty" ? [] : [RTNode, ...RTNode[]];
//#endregion
export { RTAnyNode, RTBlockNode, RTEmNode, RTEmbedNode, RTHeading1Node, RTHeading2Node, RTHeading3Node, RTHeading4Node, RTHeading5Node, RTHeading6Node, RTImageNode, RTInlineNode, RTLabelNode, RTLinkNode, RTListItemNode, RTListNode, RTNode, RTOListItemNode, RTOListNode, RTParagraphNode, RTPreformattedNode, RTSpanNode, RTSpanNodeBase, RTStrongNode, RTTextNode, RTTextNodeBase, RichTextField, RichTextNodeType, RichTextNodeTypes };
//# sourceMappingURL=richText.d.cts.map