@lobehub/editor
Version:
A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.
71 lines (69 loc) • 2.51 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
import { $getNodeByKey, createEditor } from 'lexical';
// DOM
export var DOM_ELEMENT_TYPE = 1;
export var DOM_TEXT_TYPE = 3;
export var DOM_DOCUMENT_TYPE = 9;
export var DOM_DOCUMENT_FRAGMENT_TYPE = 11;
export function genServiceId(name) {
return {
__serviceId: name
};
}
export var noop = function noop() {};
export function createEmptyEditorState() {
// Create a temporary editor to get an empty state
var tempEditor = createEditor();
return tempEditor.getEditorState();
}
export function assert(cond, message) {
if (cond) {
return;
}
throw new Error(message);
}
export function getNodeKeyFromDOMNode(dom, editor) {
var prop = "__lexicalKey_".concat(editor._key);
return dom[prop];
}
export function $getNodeFromDOMNode(dom, editor, editorState) {
var key = getNodeKeyFromDOMNode(dom, editor);
if (key !== undefined) {
return $getNodeByKey(key, editorState);
}
return null;
}
/**
* @param x - The element being tested
* @returns Returns true if x is a DOM Node, false otherwise.
*/
export function isDOMNode(x) {
return _typeof(x) === 'object' && x !== null && 'nodeType' in x && typeof x.nodeType === 'number';
}
/**
* @param x - The element being testing
* @returns Returns true if x is a document fragment, false otherwise.
*/
export function isDocumentFragment(x) {
return isDOMNode(x) && x.nodeType === DOM_DOCUMENT_FRAGMENT_TYPE;
}
export function getParentElement(node) {
var parentElement = node.assignedSlot || node.parentElement;
return isDocumentFragment(parentElement) ? parentElement.host : parentElement;
}
export function $getNearestNodeFromDOMNode(startingDOM, editor, editorState) {
var dom = startingDOM;
while (dom !== null) {
var node = $getNodeFromDOMNode(dom, editor, editorState);
if (node !== null) {
return node;
}
dom = getParentElement(dom);
}
return null;
}
export function getKernelFromEditor(editor) {
var _editor$_createEditor;
// @ts-expect-error __kernel is injected into the lexical editor instance
return ((_editor$_createEditor = editor._createEditorArgs) === null || _editor$_createEditor === void 0 ? void 0 : _editor$_createEditor.__kernel) || editor._kernel;
}