119 lines
3.4 KiB
TypeScript
119 lines
3.4 KiB
TypeScript
// @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<string | TextFormatType, number> = {
|
|
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<string | TextDetailType, number> = {
|
|
directionless: IS_DIRECTIONLESS,
|
|
unmergeable: IS_UNMERGEABLE,
|
|
};
|
|
|
|
export const ELEMENT_TYPE_TO_FORMAT: Record<Exclude<ElementFormatType, "">, 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<number, ElementFormatType> = {
|
|
[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<TextModeType, 0 | 1 | 2> = {
|
|
normal: IS_NORMAL,
|
|
segmented: IS_SEGMENTED,
|
|
token: IS_TOKEN,
|
|
};
|
|
|
|
export const TEXT_TYPE_TO_MODE: Record<number, TextModeType> = {
|
|
[IS_NORMAL]: "normal",
|
|
[IS_SEGMENTED]: "segmented",
|
|
[IS_TOKEN]: "token",
|
|
};
|