import type { BreakBlock, Image, SectionBlock, TranscriptBlock } from "./types/collections"; // END MOCKING SECTION export enum Collections { ChronologyEvents = "chronology-events", Currencies = "currencies", Files = "files", Languages = "languages", Notes = "notes", Pages = "pages", PagesThumbnails = "pages-thumbnails", Recorders = "recorders", Folders = "folders", Tags = "tags", TagsGroups = "tags-groups", Images = "images", Wordings = "wordings", Collectibles = "collectibles", GenericContents = "generic-contents", HomeFolders = "home-folders", } export enum CollectionGroups { Collections = "Collections", Media = "Media", Meta = "Meta", } export enum LanguageCodes { en = "English", fr = "French", ja = "Japan", es = "Spanish", "pt-br" = "Portuguese", "zh" = "Chinese", } export enum BreakBlockType { sceneBreak = "Scene break", space = "Empty space", solidLine = "Solid line", dottedLine = "Dotted line", } export enum CollectibleBindingTypes { Paperback = "Paperback", Hardcover = "Hardcover", } export enum CollectiblePageOrders { LeftToRight = "Left to right", RightToLeft = "Right to left", } export enum CollectibleNature { Physical = "Physical", Digital = "Digital", } export enum CollectibleContentType { None = "None", Indexes = "Index-based", Pages = "Page-based", } export enum RecordersRoles { Admin = "Admin", Recorder = "Recorder", Api = "Api", } export enum CollectionStatus { Draft = "draft", Published = "published", } export enum PageType { Content = "Content", Post = "Post", Generic = "Generic", } /* RICH TEXT */ export type RichTextContent = { root: { children: RichTextNode[]; direction: ("ltr" | "rtl") | null; format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; indent: number; type: string; version: number; }; [k: string]: unknown; }; export type RichTextNode = { type: string; version: number; [k: string]: unknown; }; export interface RichTextNodeWithChildren extends RichTextNode { children: RichTextNode[]; } export interface RichTextParagraphNode extends RichTextNodeWithChildren { type: "paragraph"; format: "left" | "start" | "center" | "right" | "end" | "justify" | ""; } export interface RichTextListNode extends RichTextNode { type: "list"; children: RichTextNodeWithChildren[]; listType: string; } export interface RichTextListNumberNode extends RichTextListNode { listType: "number"; } export interface RichTextListBulletNode extends RichTextListNode { listType: "bullet"; } export interface RichTextListCheckNode extends RichTextListNode { listType: "check"; } export interface RichTextLinebreakNode extends RichTextNode { type: "linebreak"; } export interface RichTextUploadNode extends RichTextNode { type: "upload"; relationTo: string; } export interface RichTextUploadImageNode extends RichTextUploadNode { relationTo: "images" | "background-images"; value: Image; } export interface RichTextTextNode extends RichTextNode { type: "text"; format: number; text: string; } export interface RichTextTabNode extends RichTextNode { type: "tab"; format: number; } export interface RichTextLinkNode extends RichTextNodeWithChildren { type: "link"; fields: { linkType: "internal" | "custom"; }; } export interface RichTextLinkInternalNode extends RichTextLinkNode { fields: { linkType: "internal"; newTab: boolean; doc: { relationTo: string; value: any; }; }; } export interface RichTextLinkCustomNode extends RichTextLinkNode { fields: { linkType: "custom"; newTab: boolean; url: string; }; } export interface RichTextBlockNode extends RichTextNode { type: "block"; fields: { blockType: string; }; } export interface RichTextSectionBlock extends RichTextBlockNode { fields: SectionBlock; anchorHash: string; } export interface RichTextTranscriptBlock extends RichTextBlockNode { fields: TranscriptBlock; } export interface RichTextBreakBlock extends RichTextBlockNode { fields: BreakBlock; anchorHash: string; } export const isNodeParagraphNode = (node: RichTextNode): node is RichTextParagraphNode => node.type === "paragraph"; export const isNodeUploadNode = (node: RichTextNode): node is RichTextUploadNode => node.type === "upload"; export const isUploadNodeImageNode = (node: RichTextUploadNode): node is RichTextUploadImageNode => node.relationTo === "images" || node.relationTo === "background-images"; export const isNodeListNode = (node: RichTextNode): node is RichTextListNode => node.type === "list"; export const isListNodeNumberListNode = (node: RichTextListNode): node is RichTextListNumberNode => node.listType === "number"; export const isListNodeBulletListNode = (node: RichTextListNode): node is RichTextListBulletNode => node.listType === "bullet"; export const isListNodeCheckListNode = (node: RichTextListNode): node is RichTextListCheckNode => node.listType === "check"; export const isNodeLinebreakNode = (node: RichTextNode): node is RichTextLinebreakNode => node.type === "linebreak"; export const isNodeTextNode = (node: RichTextNode): node is RichTextTextNode => node.type === "text"; export const isNodeTabNode = (node: RichTextNode): node is RichTextTabNode => node.type === "tab"; export const isNodeLinkNode = (node: RichTextNode): node is RichTextLinkNode => node.type === "link"; export const isLinkNodeInternalLinkNode = ( node: RichTextLinkNode ): node is RichTextLinkInternalNode => node.fields.linkType === "internal"; export const isLinkNodeCustomLinkNode = (node: RichTextLinkNode): node is RichTextLinkCustomNode => node.fields.linkType === "custom"; export const isNodeBlockNode = (node: RichTextNode): node is RichTextBlockNode => node.type === "block"; export const isBlockNodeSectionBlock = (node: RichTextBlockNode): node is RichTextSectionBlock => node.fields.blockType === "sectionBlock"; export const isBlockNodeTranscriptBlock = ( node: RichTextBlockNode ): node is RichTextTranscriptBlock => node.fields.blockType === "transcriptBlock"; export const isBlockNodeBreakBlock = (node: RichTextBlockNode): node is RichTextBreakBlock => node.fields.blockType === "breakBlock"; /* BLOCKS */ /* TODO: TO BE REMOVED WHEN https://github.com/payloadcms/payload/issues/5216 is closed */ export interface CueBlock { content: RichTextContent; blockType: "cueBlock"; id?: string | null; blockName?: string | null; } export interface LineBlock { content: RichTextContent; blockType: "lineBlock"; id?: string | null; blockName?: string | null; } export interface GenericBlock { id?: string | null; blockName?: string | null; blockType: string; } export const isBlockCueBlock = (block: GenericBlock): block is CueBlock => block.blockType === "cueBlock"; export const isBlockLineBlock = (block: GenericBlock): block is LineBlock => block.blockType === "lineBlock";