// @ts-nocheck //This copy-and-pasted from lexical here here: https://github.com/facebook/lexical/blob/c2ceee223f46543d12c574e62155e619f9a18a5d/packages/lexical/src/LexicalConstants.ts import type { ElementFormatType, TextFormatType } from "@payloadcms/richtext-lexical/lexical"; import type { TextDetailType, TextModeType } from "lexical/nodes/LexicalTextNode"; /** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ // DOM export const DOM_ELEMENT_TYPE = 1; export const DOM_TEXT_TYPE = 3; // Reconciling export const NO_DIRTY_NODES = 0; export const HAS_DIRTY_NODES = 1; export const FULL_RECONCILE = 2; // Text node modes export const IS_NORMAL = 0; export const IS_TOKEN = 1; export const IS_SEGMENTED = 2; // IS_INERT = 3 // Text node formatting export const IS_BOLD = 1; export const IS_ITALIC = 1 << 1; export const IS_STRIKETHROUGH = 1 << 2; export const IS_UNDERLINE = 1 << 3; export const IS_CODE = 1 << 4; export const IS_SUBSCRIPT = 1 << 5; export const IS_SUPERSCRIPT = 1 << 6; export const IS_HIGHLIGHT = 1 << 7; export const IS_ALL_FORMATTING = IS_BOLD | IS_ITALIC | IS_STRIKETHROUGH | IS_UNDERLINE | IS_CODE | IS_SUBSCRIPT | IS_SUPERSCRIPT | IS_HIGHLIGHT; // Text node details export const IS_DIRECTIONLESS = 1; export const IS_UNMERGEABLE = 1 << 1; // Element node formatting export const IS_ALIGN_LEFT = 1; export const IS_ALIGN_CENTER = 2; export const IS_ALIGN_RIGHT = 3; export const IS_ALIGN_JUSTIFY = 4; export const IS_ALIGN_START = 5; export const IS_ALIGN_END = 6; // Reconciliation export const NON_BREAKING_SPACE = "\u00A0"; // const ZERO_WIDTH_SPACE = '\u200b' export const DOUBLE_LINE_BREAK = "\n\n"; // For FF, we need to use a non-breaking space, or it gets composition // in a stuck state. const RTL = "\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC"; const LTR = "A-Za-z\u00C0-\u00D6\u00D8-\u00F6" + "\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF\u200E\u2C00-\uFB1C" + "\uFE00-\uFE6F\uFEFD-\uFFFF"; export const RTL_REGEX = new RegExp("^[^" + LTR + "]*[" + RTL + "]"); export const LTR_REGEX = new RegExp("^[^" + RTL + "]*[" + LTR + "]"); export const TEXT_TYPE_TO_FORMAT: Record = { bold: IS_BOLD, code: IS_CODE, highlight: IS_HIGHLIGHT, italic: IS_ITALIC, strikethrough: IS_STRIKETHROUGH, subscript: IS_SUBSCRIPT, superscript: IS_SUPERSCRIPT, underline: IS_UNDERLINE, }; export const DETAIL_TYPE_TO_DETAIL: Record = { directionless: IS_DIRECTIONLESS, unmergeable: IS_UNMERGEABLE, }; export const ELEMENT_TYPE_TO_FORMAT: Record, number> = { center: IS_ALIGN_CENTER, end: IS_ALIGN_END, justify: IS_ALIGN_JUSTIFY, left: IS_ALIGN_LEFT, right: IS_ALIGN_RIGHT, start: IS_ALIGN_START, }; export const ELEMENT_FORMAT_TO_TYPE: Record = { [IS_ALIGN_CENTER]: "center", [IS_ALIGN_END]: "end", [IS_ALIGN_JUSTIFY]: "justify", [IS_ALIGN_LEFT]: "left", [IS_ALIGN_RIGHT]: "right", [IS_ALIGN_START]: "start", }; export const TEXT_MODE_TO_TYPE: Record = { normal: IS_NORMAL, segmented: IS_SEGMENTED, token: IS_TOKEN, }; export const TEXT_TYPE_TO_MODE: Record = { [IS_NORMAL]: "normal", [IS_SEGMENTED]: "segmented", [IS_TOKEN]: "token", };