@tiny-codes/react-easy 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/es/components/Lexical/helpers/index.d.ts +58 -0
  3. package/es/components/Lexical/helpers/index.js +249 -0
  4. package/es/components/Lexical/helpers/index.js.map +1 -0
  5. package/es/components/Lexical/index.d.ts +5 -0
  6. package/es/components/Lexical/index.js +6 -0
  7. package/es/components/Lexical/index.js.map +1 -0
  8. package/es/components/Lexical/nodes/DivNode.d.ts +25 -0
  9. package/es/components/Lexical/nodes/DivNode.js +163 -0
  10. package/es/components/Lexical/nodes/DivNode.js.map +1 -0
  11. package/es/components/Lexical/nodes/ExtendTextNode.d.ts +24 -0
  12. package/es/components/Lexical/nodes/ExtendTextNode.js +102 -0
  13. package/es/components/Lexical/nodes/ExtendTextNode.js.map +1 -0
  14. package/es/components/Lexical/nodes/SelectNode.d.ts +44 -0
  15. package/es/components/Lexical/nodes/SelectNode.js +204 -0
  16. package/es/components/Lexical/nodes/SelectNode.js.map +1 -0
  17. package/es/components/Lexical/nodes/base.d.ts +51 -0
  18. package/es/components/Lexical/nodes/base.js +168 -0
  19. package/es/components/Lexical/nodes/base.js.map +1 -0
  20. package/es/hooks/useRefValue.d.ts +2 -2
  21. package/es/hooks/useRefValue.js.map +1 -1
  22. package/lib/components/Lexical/helpers/index.d.ts +58 -0
  23. package/lib/components/Lexical/helpers/index.js +198 -0
  24. package/lib/components/Lexical/helpers/index.js.map +7 -0
  25. package/lib/components/Lexical/index.d.ts +5 -0
  26. package/lib/components/Lexical/index.js +32 -0
  27. package/lib/components/Lexical/index.js.map +7 -0
  28. package/lib/components/Lexical/nodes/DivNode.d.ts +25 -0
  29. package/lib/components/Lexical/nodes/DivNode.js +139 -0
  30. package/lib/components/Lexical/nodes/DivNode.js.map +7 -0
  31. package/lib/components/Lexical/nodes/ExtendTextNode.d.ts +24 -0
  32. package/lib/components/Lexical/nodes/ExtendTextNode.js +87 -0
  33. package/lib/components/Lexical/nodes/ExtendTextNode.js.map +7 -0
  34. package/lib/components/Lexical/nodes/SelectNode.d.ts +44 -0
  35. package/lib/components/Lexical/nodes/SelectNode.js +157 -0
  36. package/lib/components/Lexical/nodes/SelectNode.js.map +7 -0
  37. package/lib/components/Lexical/nodes/base.d.ts +51 -0
  38. package/lib/components/Lexical/nodes/base.js +116 -0
  39. package/lib/components/Lexical/nodes/base.js.map +7 -0
  40. package/lib/hooks/useRefValue.d.ts +2 -2
  41. package/lib/hooks/useRefValue.js.map +2 -2
  42. package/package.json +20 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DecoratorNode","ElementNode","BaseNodeHelper","props","superMethods","_this","_classCallCheck","_defineProperty","remove","preserveEmptyParent","_this$__props","__props","canBeRemoved","__superMethods","replace","replaceWith","includeChildren","_this$__props2","canBeReplaced","_createClass","key","value","getUnderlyingProps","restProps","_objectWithoutProperties","_excluded","BaseElementNode","_ElementNode","_inherits","_super","_createSuper","_thisSuper","_thisSuper2","_this2","_ref","_excluded2","call","_assertThisInitialized","__base","_get","_getPrototypeOf","prototype","Object","keys","hooks","forEach","method","bind","canBeEmpty","_this$__props$canBeEm","_this$__props3","canInsertTextBefore","_this$__props$canInse","_this$__props4","canInsertTextAfter","_this$__props$canInse2","_this$__props5","baseProps","_excluded3","BaseDecoratorNode","_DecoratorNode","_super2","_thisSuper3","_thisSuper4","_this3","_ref2","_excluded4","assign","_objectDestructuringEmpty"],"sources":["../../../../src/components/Lexical/nodes/base.ts"],"sourcesContent":["import type { LexicalNode } from 'lexical';\nimport { DecoratorNode, ElementNode } from 'lexical';\n\nexport interface BaseNodeProps {\n /** 是否可被删除,默认 `true` */\n canBeRemoved?: boolean;\n /** 是否可被替换,默认 `true` */\n canBeReplaced?: boolean;\n}\nexport interface BaseElementProps extends BaseNodeProps {\n /**\n * 是否允许节点为空,默认 `false`\n *\n * - `true` - 允许节点为空\n * - `false` - 不允许节点为空,当最后一个子节点被删除后,节点也会被删除\n */\n canBeEmpty?: boolean;\n /** 是否允许在节点内的起始位置插入文本,默认 `true` */\n canInsertTextBefore?: boolean;\n /** 是否允许在节点内的结束位置插入文本,默认 `true` */\n canInsertTextAfter?: boolean;\n}\n\nexport type BaseDecoratorNodeProps = BaseNodeProps;\n\nexport class BaseNodeHelper<P extends BaseNodeProps> {\n __props: (P & BaseNodeProps) | undefined;\n __superMethods: Pick<LexicalNode, 'replace' | 'remove'>;\n\n constructor(props: P | undefined, superMethods: Pick<LexicalNode, 'replace' | 'remove'>) {\n this.__props = props as P & BaseNodeProps;\n this.__superMethods = superMethods;\n }\n\n hooks = {\n remove: (preserveEmptyParent?: boolean): void => {\n if (this.__props?.canBeRemoved === false) {\n return;\n }\n this.__superMethods.remove(preserveEmptyParent);\n },\n\n replace: <N extends LexicalNode>(replaceWith: N, includeChildren?: boolean): N => {\n if (this.__props?.canBeReplaced === false) {\n return this as unknown as N;\n }\n return this.__superMethods.replace(replaceWith, includeChildren);\n },\n };\n getUnderlyingProps(props: P & BaseNodeProps): Omit<P, keyof BaseNodeProps> {\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { canBeRemoved, canBeReplaced, ...restProps } = props;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n return restProps as P;\n }\n}\n\nexport class BaseElementNode<P extends BaseElementProps> extends ElementNode {\n __props: P | undefined;\n __base: BaseNodeHelper<P>;\n\n constructor(props?: P & { key?: string }) {\n const { key, ...restProps } = props || {};\n super(key);\n this.__props = restProps as P;\n this.__base = new BaseNodeHelper<P>(this.__props, {\n remove: () => super.remove(),\n replace: (replaceWith, includeChildren) => super.replace(replaceWith, includeChildren),\n });\n Object.keys(this.__base.hooks).forEach((key) => {\n const method = this.__base.hooks[key as keyof typeof this.__base.hooks];\n if (typeof method === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[key as keyof this] = method.bind(this.__base) as any;\n }\n });\n }\n\n canBeEmpty(): boolean {\n return this.__props?.canBeEmpty ?? false;\n }\n\n canInsertTextBefore(): boolean {\n return this.__props?.canInsertTextBefore ?? true;\n }\n\n canInsertTextAfter(): boolean {\n return this.__props?.canInsertTextAfter ?? true;\n }\n\n getUnderlyingProps(props: P | undefined): Omit<P, keyof BaseElementProps> {\n const baseProps = this.__base.getUnderlyingProps(props ?? ({} as P));\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { canBeEmpty, canInsertTextBefore, canInsertTextAfter, ...restProps } = baseProps;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n return restProps as P;\n }\n}\n\nexport class BaseDecoratorNode<T, P extends BaseDecoratorNodeProps> extends DecoratorNode<T> {\n __props: P | undefined;\n __base: BaseNodeHelper<P>;\n\n constructor(props?: P & { key?: string }) {\n const { key, ...restProps } = props || {};\n super(key);\n this.__props = restProps as P;\n\n this.__base = new BaseNodeHelper<P>(this.__props, {\n remove: () => super.remove(),\n replace: (replaceWith, includeChildren) => super.replace(replaceWith, includeChildren),\n });\n Object.keys(this.__base.hooks).forEach((key) => {\n const method = this.__base.hooks[key as keyof typeof this.__base.hooks];\n if (typeof method === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this[key as keyof this] = method.bind(this.__base) as any;\n }\n });\n }\n\n getUnderlyingProps(props: P | undefined): Omit<P, keyof BaseDecoratorNodeProps> {\n const baseProps = this.__base.getUnderlyingProps(props ?? ({} as P));\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { ...restProps } = baseProps;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n return restProps as P;\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import type { RefObject } from 'react';
2
2
  /**
3
3
  * - **EN:** Get a mutable ref object and automatically update the value change
4
4
  * - **CN:** 获取一个可变的ref对象,并自动更新值变化
@@ -7,5 +7,5 @@
7
7
  *
8
8
  * @returns A mutable ref object, but the reference is immutable | 可变的ref对象,但引用不可变
9
9
  */
10
- declare const useRefValue: <T>(value: T) => import("react").RefObject<T>;
10
+ declare const useRefValue: <T>(value: T) => RefObject<T>;
11
11
  export default useRefValue;
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","useRefValue","value","ref","current"],"sources":["../../src/hooks/useRefValue.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * - **EN:** Get a mutable ref object and automatically update the value change\n * - **CN:** 获取一个可变的ref对象,并自动更新值变化\n *\n * @param value the wrapped value | 被包装的值\n *\n * @returns A mutable ref object, but the reference is immutable | 可变的ref对象,但引用不可变\n */\nconst useRefValue = <T>(value: T) => {\n const ref = useRef<T>(value);\n ref.current = value;\n return ref;\n};\n\nexport default useRefValue;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAOC,KAAQ,EAAK;EACnC,IAAMC,GAAG,GAAGH,MAAM,CAAIE,KAAK,CAAC;EAC5BC,GAAG,CAACC,OAAO,GAAGF,KAAK;EACnB,OAAOC,GAAG;AACZ,CAAC;AAED,eAAeF,WAAW"}
1
+ {"version":3,"names":["useRef","useRefValue","value","ref","current"],"sources":["../../src/hooks/useRefValue.ts"],"sourcesContent":["import type { RefObject } from 'react';\nimport { useRef } from 'react';\n\n/**\n * - **EN:** Get a mutable ref object and automatically update the value change\n * - **CN:** 获取一个可变的ref对象,并自动更新值变化\n *\n * @param value the wrapped value | 被包装的值\n *\n * @returns A mutable ref object, but the reference is immutable | 可变的ref对象,但引用不可变\n */\nconst useRefValue = <T>(value: T): RefObject<T> => {\n const ref = useRef<T>(value);\n ref.current = value;\n return ref;\n};\n\nexport default useRefValue;\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,OAAO;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAOC,KAAQ,EAAmB;EACjD,IAAMC,GAAG,GAAGH,MAAM,CAAIE,KAAK,CAAC;EAC5BC,GAAG,CAACC,OAAO,GAAGF,KAAK;EACnB,OAAOC,GAAG;AACZ,CAAC;AAED,eAAeF,WAAW"}
@@ -0,0 +1,58 @@
1
+ import type { CSSProperties, HtmlHTMLAttributes } from 'react';
2
+ import type { LexicalEditor, LexicalNode } from 'lexical';
3
+ /**
4
+ * 将节点插入到当前光标位置
5
+ *
6
+ * @param editor LexicalEditor 实例
7
+ * @param node 要插入的节点
8
+ */
9
+ export declare function insertNodeAtCursor(editor: LexicalEditor, node: LexicalNode): void;
10
+ /**
11
+ * 将文本插入到当前光标位置
12
+ *
13
+ * @param editor LexicalEditor 实例
14
+ * @param text 要插入的文本
15
+ */
16
+ export declare function insertTextAtCursor(editor: LexicalEditor, text: string): void;
17
+ /**
18
+ * 清空编辑器内容
19
+ *
20
+ * @param editor LexicalEditor 实例
21
+ */
22
+ export declare function clearEditorContent(editor: LexicalEditor): void;
23
+ /**
24
+ * 查找符合条件的节点
25
+ *
26
+ * @param editor LexicalEditor 实例
27
+ * @param predicate 用于匹配节点的函数
28
+ * @param options 选项
29
+ *
30
+ * @returns 符合条件的节点数组
31
+ */
32
+ export declare function findNode<T extends LexicalNode>(editor: LexicalEditor, predicate: (node: LexicalNode) => boolean): T | undefined;
33
+ /**
34
+ * 查找所有符合条件的节点数组
35
+ *
36
+ * @param editor LexicalEditor 实例
37
+ * @param predicate 用于匹配节点的函数
38
+ * @param options 选项
39
+ *
40
+ * @returns 符合条件的节点数组
41
+ */
42
+ export declare function findNodes<T extends LexicalNode>(editor: LexicalEditor, predicate: (node: LexicalNode) => boolean, options?: {
43
+ stopOnFirstMatch?: boolean;
44
+ }): T[];
45
+ /**
46
+ * 更新 DOM 元素的属性
47
+ *
48
+ * @param dom 要更新的 DOM 元素
49
+ * @param props 要设置的属性
50
+ */
51
+ export declare function updateDomProps(dom: HTMLElement | undefined, props: HtmlHTMLAttributes<HTMLElement>): void;
52
+ /**
53
+ * 更新 DOM 元素的样式
54
+ *
55
+ * @param dom 要更新的 DOM 元素
56
+ * @param style 要设置的样式
57
+ */
58
+ export declare function updateDomStyle(dom: HTMLElement | undefined, style: CSSProperties | undefined): void;
@@ -0,0 +1,198 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/Lexical/helpers/index.ts
20
+ var helpers_exports = {};
21
+ __export(helpers_exports, {
22
+ clearEditorContent: () => clearEditorContent,
23
+ findNode: () => findNode,
24
+ findNodes: () => findNodes,
25
+ insertNodeAtCursor: () => insertNodeAtCursor,
26
+ insertTextAtCursor: () => insertTextAtCursor,
27
+ updateDomProps: () => updateDomProps,
28
+ updateDomStyle: () => updateDomStyle
29
+ });
30
+ module.exports = __toCommonJS(helpers_exports);
31
+ var import_lexical = require("lexical");
32
+ var import_DivNode = require("../nodes/DivNode");
33
+ function insertNodeAtCursor(editor, node) {
34
+ editor.update(() => {
35
+ const selection = (0, import_lexical.$getSelection)();
36
+ if (selection) {
37
+ if ((0, import_lexical.$isRangeSelection)(selection)) {
38
+ const lastNode = selection.focus.getNode();
39
+ if (lastNode) {
40
+ if ((0, import_lexical.$isParagraphNode)(lastNode)) {
41
+ lastNode.append(node);
42
+ } else if ((0, import_lexical.$isTextNode)(lastNode)) {
43
+ lastNode.insertAfter(node);
44
+ } else if ((0, import_DivNode.$isDivNode)(lastNode)) {
45
+ lastNode.append(node);
46
+ } else {
47
+ selection.insertNodes([node]);
48
+ }
49
+ node.selectNext();
50
+ }
51
+ } else {
52
+ selection.insertNodes([node]);
53
+ node.selectNext();
54
+ }
55
+ } else {
56
+ const root = (0, import_lexical.$getRoot)();
57
+ let nodeToInsert = node;
58
+ if ((0, import_lexical.$isElementNode)(node) || (0, import_lexical.$isDecoratorNode)(node)) {
59
+ nodeToInsert = node;
60
+ } else {
61
+ const container = (0, import_DivNode.$createDivNode)({
62
+ style: { display: "inline-block" }
63
+ });
64
+ container.append(node);
65
+ nodeToInsert = container;
66
+ }
67
+ root.append(nodeToInsert);
68
+ node.selectNext();
69
+ }
70
+ });
71
+ }
72
+ function insertTextAtCursor(editor, text) {
73
+ editor == null ? void 0 : editor.update(() => {
74
+ const textNode = (0, import_lexical.$createTextNode)(text);
75
+ const root = (0, import_lexical.$getRoot)();
76
+ const selection = (0, import_lexical.$getSelection)();
77
+ if (selection) {
78
+ selection.insertText(text);
79
+ } else {
80
+ const lastNode = root.getLastChild();
81
+ if (lastNode && (0, import_lexical.$isParagraphNode)(lastNode)) {
82
+ lastNode.append(textNode);
83
+ } else {
84
+ const container = (0, import_DivNode.$createDivNode)({
85
+ style: { display: "inline-block" }
86
+ });
87
+ container.append(textNode);
88
+ root.append(container);
89
+ }
90
+ }
91
+ });
92
+ }
93
+ function clearEditorContent(editor) {
94
+ const state = editor.getEditorState();
95
+ const stateJson = state.toJSON();
96
+ const newJson = {
97
+ ...stateJson,
98
+ root: {
99
+ ...stateJson.root,
100
+ children: [
101
+ {
102
+ children: [],
103
+ direction: null,
104
+ format: "",
105
+ indent: 0,
106
+ type: "paragraph",
107
+ version: 1,
108
+ textFormat: 0,
109
+ textStyle: ""
110
+ }
111
+ ]
112
+ }
113
+ };
114
+ const emptyState = editor.parseEditorState(JSON.stringify(newJson));
115
+ editor.setEditorState(emptyState);
116
+ editor.update(() => {
117
+ const root = (0, import_lexical.$getRoot)();
118
+ root.clear();
119
+ });
120
+ }
121
+ function findNode(editor, predicate) {
122
+ const matched = findNodes(editor, predicate, { stopOnFirstMatch: true });
123
+ return matched[0];
124
+ }
125
+ function findNodes(editor, predicate, options) {
126
+ const matched = [];
127
+ editor.getEditorState().read(() => {
128
+ const root = (0, import_lexical.$getRoot)();
129
+ const traverse = (node, result) => {
130
+ if (predicate(node)) {
131
+ result.push(node);
132
+ if (options == null ? void 0 : options.stopOnFirstMatch) {
133
+ return;
134
+ }
135
+ }
136
+ if ((0, import_lexical.$isElementNode)(node)) {
137
+ const children = node.getChildren();
138
+ for (const child of children) {
139
+ traverse(child, result);
140
+ if ((options == null ? void 0 : options.stopOnFirstMatch) && result.length > 0) {
141
+ return;
142
+ }
143
+ }
144
+ }
145
+ };
146
+ traverse(root, matched);
147
+ });
148
+ return matched;
149
+ }
150
+ function updateDomProps(dom, props) {
151
+ if (!dom)
152
+ return;
153
+ Array.from(dom.attributes).forEach((attr) => {
154
+ if (!attr.name.startsWith("data-lexical")) {
155
+ dom.removeAttribute(attr.name);
156
+ }
157
+ });
158
+ dom.removeAttribute("style");
159
+ dom.removeAttribute("class");
160
+ if (props) {
161
+ Object.entries(props).forEach(([key, value]) => {
162
+ if (key === "style" && value) {
163
+ Object.entries(value).forEach(([styleKey, styleValue]) => {
164
+ if (styleValue !== void 0) {
165
+ dom.style[styleKey] = styleValue;
166
+ }
167
+ });
168
+ } else if (key === "className" && value) {
169
+ dom.className = value;
170
+ } else if (value !== void 0 && value !== null) {
171
+ dom.setAttribute(key, value.toString());
172
+ }
173
+ });
174
+ }
175
+ }
176
+ function updateDomStyle(dom, style) {
177
+ if (!dom)
178
+ return;
179
+ dom.removeAttribute("style");
180
+ if (style) {
181
+ Object.entries(style).forEach(([styleKey, styleValue]) => {
182
+ if (styleValue !== void 0) {
183
+ dom.style[styleKey] = styleValue;
184
+ }
185
+ });
186
+ }
187
+ }
188
+ // Annotate the CommonJS export names for ESM import in node:
189
+ 0 && (module.exports = {
190
+ clearEditorContent,
191
+ findNode,
192
+ findNodes,
193
+ insertNodeAtCursor,
194
+ insertTextAtCursor,
195
+ updateDomProps,
196
+ updateDomStyle
197
+ });
198
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/Lexical/helpers/index.ts"],
4
+ "sourcesContent": ["import type { CSSProperties, HtmlHTMLAttributes } from 'react';\nimport type { LexicalEditor, LexicalNode } from 'lexical';\nimport {\n $createTextNode,\n $getRoot,\n $getSelection,\n $isDecoratorNode,\n $isElementNode,\n $isParagraphNode,\n $isRangeSelection,\n $isTextNode,\n} from 'lexical';\nimport { $createDivNode, $isDivNode } from '../nodes/DivNode';\n\n/**\n * 将节点插入到当前光标位置\n *\n * @param editor LexicalEditor 实例\n * @param node 要插入的节点\n */\nexport function insertNodeAtCursor(editor: LexicalEditor, node: LexicalNode): void {\n editor.update(() => {\n const selection = $getSelection();\n if (selection) {\n if ($isRangeSelection(selection)) {\n // 如果没有选取,则直接在根节点末尾插入\n const lastNode = selection.focus.getNode();\n if (lastNode) {\n if ($isParagraphNode(lastNode)) {\n lastNode.append(node);\n } else if ($isTextNode(lastNode)) {\n // 如果最后一个节点是文本节点,则在其后插入 SelectNode\n lastNode.insertAfter(node);\n } else if ($isDivNode(lastNode)) {\n lastNode.append(node);\n } else {\n selection.insertNodes([node]);\n }\n node.selectNext();\n }\n } else {\n selection.insertNodes([node]);\n node.selectNext();\n }\n } else {\n const root = $getRoot();\n let nodeToInsert: LexicalNode = node;\n if ($isElementNode(node) || $isDecoratorNode(node)) {\n nodeToInsert = node;\n } else {\n const container = $createDivNode({\n style: { display: 'inline-block' },\n });\n container.append(node);\n nodeToInsert = container;\n }\n root.append(nodeToInsert);\n node.selectNext();\n }\n });\n}\n\n/**\n * 将文本插入到当前光标位置\n *\n * @param editor LexicalEditor 实例\n * @param text 要插入的文本\n */\nexport function insertTextAtCursor(editor: LexicalEditor, text: string): void {\n editor?.update(() => {\n const textNode = $createTextNode(text);\n const root = $getRoot();\n const selection = $getSelection();\n if (selection) {\n // 插入光标位置\n selection.insertText(text);\n } else {\n // 如果没有选取,则直接在根节点末尾插入\n const lastNode = root.getLastChild();\n if (lastNode && $isParagraphNode(lastNode)) {\n lastNode.append(textNode);\n } else {\n const container = $createDivNode({\n style: { display: 'inline-block' },\n });\n container.append(textNode);\n root.append(container);\n }\n }\n });\n}\n\n/**\n * 清空编辑器内容\n *\n * @param editor LexicalEditor 实例\n */\nexport function clearEditorContent(editor: LexicalEditor) {\n const state = editor.getEditorState();\n const stateJson = state.toJSON();\n // 默认创建一个ParagraphNode\n const newJson = {\n ...stateJson,\n root: {\n ...stateJson.root,\n children: [\n {\n children: [],\n direction: null,\n format: '',\n indent: 0,\n type: 'paragraph',\n version: 1,\n textFormat: 0,\n textStyle: '',\n },\n ],\n },\n };\n const emptyState = editor.parseEditorState(JSON.stringify(newJson));\n editor.setEditorState(emptyState);\n editor.update(() => {\n const root = $getRoot();\n root.clear();\n });\n}\n\n/**\n * 查找符合条件的节点\n *\n * @param editor LexicalEditor 实例\n * @param predicate 用于匹配节点的函数\n * @param options 选项\n *\n * @returns 符合条件的节点数组\n */\nexport function findNode<T extends LexicalNode>(\n editor: LexicalEditor,\n predicate: (node: LexicalNode) => boolean\n): T | undefined {\n const matched = findNodes<T>(editor, predicate, { stopOnFirstMatch: true });\n return matched[0];\n}\n/**\n * 查找所有符合条件的节点数组\n *\n * @param editor LexicalEditor 实例\n * @param predicate 用于匹配节点的函数\n * @param options 选项\n *\n * @returns 符合条件的节点数组\n */\nexport function findNodes<T extends LexicalNode>(\n editor: LexicalEditor,\n predicate: (node: LexicalNode) => boolean,\n options?: {\n stopOnFirstMatch?: boolean;\n }\n): T[] {\n const matched: T[] = [];\n editor.getEditorState().read(() => {\n const root = $getRoot();\n const traverse = (node: LexicalNode, result: T[]) => {\n if (predicate(node)) {\n result.push(node as unknown as T);\n if (options?.stopOnFirstMatch) {\n return;\n }\n }\n if ($isElementNode(node)) {\n const children = node.getChildren();\n for (const child of children) {\n traverse(child, result);\n if (options?.stopOnFirstMatch && result.length > 0) {\n return;\n }\n }\n }\n };\n traverse(root, matched);\n });\n return matched;\n}\n\n/**\n * 更新 DOM 元素的属性\n *\n * @param dom 要更新的 DOM 元素\n * @param props 要设置的属性\n */\nexport function updateDomProps(dom: HTMLElement | undefined, props: HtmlHTMLAttributes<HTMLElement>): void {\n if (!dom) return;\n Array.from(dom.attributes).forEach((attr) => {\n if (!attr.name.startsWith('data-lexical')) {\n dom.removeAttribute(attr.name);\n }\n });\n\n dom.removeAttribute('style');\n dom.removeAttribute('class');\n\n if (props) {\n Object.entries(props).forEach(([key, value]) => {\n if (key === 'style' && value) {\n Object.entries(value as CSSProperties).forEach(([styleKey, styleValue]) => {\n if (styleValue !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (dom.style as any)[styleKey] = styleValue;\n }\n });\n } else if (key === 'className' && value) {\n dom.className = value as string;\n } else if (value !== undefined && value !== null) {\n dom.setAttribute(key, value.toString());\n }\n });\n }\n}\n\n/**\n * 更新 DOM 元素的样式\n *\n * @param dom 要更新的 DOM 元素\n * @param style 要设置的样式\n */\nexport function updateDomStyle(dom: HTMLElement | undefined, style: CSSProperties | undefined): void {\n if (!dom) return;\n dom.removeAttribute('style');\n if (style) {\n Object.entries(style).forEach(([styleKey, styleValue]) => {\n if (styleValue !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (dom.style as any)[styleKey] = styleValue;\n }\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ export * from './helpers';
2
+ export * from './nodes/base';
3
+ export * from './nodes/DivNode';
4
+ export * from './nodes/SelectNode';
5
+ export * from './nodes/ExtendTextNode';
@@ -0,0 +1,32 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+
16
+ // src/components/Lexical/index.ts
17
+ var Lexical_exports = {};
18
+ module.exports = __toCommonJS(Lexical_exports);
19
+ __reExport(Lexical_exports, require("./helpers"), module.exports);
20
+ __reExport(Lexical_exports, require("./nodes/base"), module.exports);
21
+ __reExport(Lexical_exports, require("./nodes/DivNode"), module.exports);
22
+ __reExport(Lexical_exports, require("./nodes/SelectNode"), module.exports);
23
+ __reExport(Lexical_exports, require("./nodes/ExtendTextNode"), module.exports);
24
+ // Annotate the CommonJS export names for ESM import in node:
25
+ 0 && (module.exports = {
26
+ ...require("./helpers"),
27
+ ...require("./nodes/base"),
28
+ ...require("./nodes/DivNode"),
29
+ ...require("./nodes/SelectNode"),
30
+ ...require("./nodes/ExtendTextNode")
31
+ });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/Lexical/index.ts"],
4
+ "sourcesContent": ["export * from './helpers';\nexport * from './nodes/base';\nexport * from './nodes/DivNode';\nexport * from './nodes/SelectNode';\nexport * from './nodes/ExtendTextNode';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,4BAAc,sBAAd;AACA,4BAAc,yBADd;AAEA,4BAAc,4BAFd;AAGA,4BAAc,+BAHd;AAIA,4BAAc,mCAJd;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ import type { CSSProperties, HtmlHTMLAttributes } from 'react';
2
+ import type { DOMConversionMap, DOMExportOutput, LexicalNode, SerializedElementNode, Spread } from 'lexical';
3
+ import { BaseElementNode, type BaseElementProps } from './base';
4
+ export interface DivNodeProps extends HtmlHTMLAttributes<HTMLDivElement>, BaseElementProps {
5
+ }
6
+ export type SerializedDivNode = Spread<{
7
+ props?: DivNodeProps;
8
+ }, SerializedElementNode>;
9
+ export declare class DivNode extends BaseElementNode<DivNodeProps> {
10
+ static getType(): string;
11
+ static clone(node: DivNode): DivNode;
12
+ protected getForceDisplay(): CSSProperties['display'];
13
+ createDOM(): HTMLElement;
14
+ updateDOM(prevNode: DivNode, dom: HTMLElement): boolean;
15
+ static importDOM(): DOMConversionMap | null;
16
+ static importJSON(serializedNode: SerializedDivNode): DivNode;
17
+ exportJSON(): SerializedDivNode;
18
+ exportDOM(): DOMExportOutput;
19
+ isInline(): boolean;
20
+ getPropValue<K extends keyof DivNodeProps>(key: K): DivNodeProps[K] | undefined;
21
+ setProps(props: DivNodeProps): void;
22
+ private shallowEqual;
23
+ }
24
+ export declare function $createDivNode(props?: DivNodeProps): DivNode;
25
+ export declare function $isDivNode(node: LexicalNode | null | undefined): node is DivNode;
@@ -0,0 +1,139 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/Lexical/nodes/DivNode.tsx
20
+ var DivNode_exports = {};
21
+ __export(DivNode_exports, {
22
+ $createDivNode: () => $createDivNode,
23
+ $isDivNode: () => $isDivNode,
24
+ DivNode: () => DivNode
25
+ });
26
+ module.exports = __toCommonJS(DivNode_exports);
27
+ var import_helpers = require("../helpers");
28
+ var import_base = require("./base");
29
+ var DivNode = class extends import_base.BaseElementNode {
30
+ static getType() {
31
+ return "html.div";
32
+ }
33
+ static clone(node) {
34
+ return new DivNode({ ...node.__props, key: node.getKey() });
35
+ }
36
+ getForceDisplay() {
37
+ return void 0;
38
+ }
39
+ createDOM() {
40
+ const div = document.createElement("div");
41
+ const domProps = this.getUnderlyingProps(this.__props);
42
+ if (domProps) {
43
+ (0, import_helpers.updateDomProps)(div, domProps);
44
+ }
45
+ return div;
46
+ }
47
+ updateDOM(prevNode, dom) {
48
+ const prevProps = prevNode.__props;
49
+ const currentProps = this.__props;
50
+ const propsChanged = !this.shallowEqual(prevProps, currentProps);
51
+ if (propsChanged) {
52
+ (0, import_helpers.updateDomProps)(dom, this.getUnderlyingProps(currentProps));
53
+ }
54
+ return false;
55
+ }
56
+ static importDOM() {
57
+ return {
58
+ div: (node) => ({
59
+ conversion: convertDivElement,
60
+ priority: 1
61
+ })
62
+ };
63
+ }
64
+ static importJSON(serializedNode) {
65
+ return $createDivNode(serializedNode.props);
66
+ }
67
+ exportJSON() {
68
+ return {
69
+ ...super.exportJSON(),
70
+ props: this.__props,
71
+ type: this.getType()
72
+ };
73
+ }
74
+ exportDOM() {
75
+ const element = this.createDOM();
76
+ return { element };
77
+ }
78
+ isInline() {
79
+ var _a, _b;
80
+ const display = (_b = (_a = this.__props) == null ? void 0 : _a.style) == null ? void 0 : _b.display;
81
+ return display === "inline" || display === "inline-flex" || display === "inline-block" || display === "inline-grid" || display === "inline-table" || display === "inline-list-item";
82
+ }
83
+ getPropValue(key) {
84
+ var _a;
85
+ return (_a = this.__props) == null ? void 0 : _a[key];
86
+ }
87
+ setProps(props) {
88
+ var _a;
89
+ const writable = this.getWritable();
90
+ writable.__props = {
91
+ ...writable.__props,
92
+ ...props,
93
+ style: {
94
+ ...(_a = writable.__props) == null ? void 0 : _a.style,
95
+ ...props.style
96
+ }
97
+ };
98
+ }
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ shallowEqual(obj1, obj2) {
101
+ if (obj1 === obj2)
102
+ return true;
103
+ if (!obj1 || !obj2)
104
+ return false;
105
+ const keys1 = Object.keys(obj1);
106
+ const keys2 = Object.keys(obj2);
107
+ if (keys1.length !== keys2.length)
108
+ return false;
109
+ for (const key of keys1) {
110
+ if (key === "style") {
111
+ if (!this.shallowEqual(obj1[key], obj2[key]))
112
+ return false;
113
+ } else if (obj1[key] !== obj2[key]) {
114
+ return false;
115
+ }
116
+ }
117
+ return true;
118
+ }
119
+ };
120
+ function convertDivElement(domNode) {
121
+ const element = domNode;
122
+ if (element.nodeName === "DIV") {
123
+ return { node: $createDivNode() };
124
+ }
125
+ return { node: null };
126
+ }
127
+ function $createDivNode(props) {
128
+ return new DivNode(props);
129
+ }
130
+ function $isDivNode(node) {
131
+ return node instanceof DivNode;
132
+ }
133
+ // Annotate the CommonJS export names for ESM import in node:
134
+ 0 && (module.exports = {
135
+ $createDivNode,
136
+ $isDivNode,
137
+ DivNode
138
+ });
139
+ //# sourceMappingURL=DivNode.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/Lexical/nodes/DivNode.tsx"],
4
+ "sourcesContent": ["import type { CSSProperties, HtmlHTMLAttributes } from 'react';\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n LexicalNode,\n SerializedElementNode,\n Spread,\n} from 'lexical';\nimport { updateDomProps } from '../helpers';\nimport { BaseElementNode, type BaseElementProps } from './base';\n\nexport interface DivNodeProps extends HtmlHTMLAttributes<HTMLDivElement>, BaseElementProps {}\n\nexport type SerializedDivNode = Spread<\n {\n props?: DivNodeProps;\n },\n SerializedElementNode\n>;\n\nexport class DivNode extends BaseElementNode<DivNodeProps> {\n static getType(): string {\n return 'html.div';\n }\n\n static clone(node: DivNode): DivNode {\n return new DivNode({ ...node.__props, key: node.getKey() });\n }\n\n protected getForceDisplay(): CSSProperties['display'] {\n return undefined;\n }\n\n createDOM(): HTMLElement {\n const div = document.createElement('div');\n const domProps = this.getUnderlyingProps(this.__props);\n if (domProps) {\n updateDomProps(div, domProps);\n }\n return div;\n }\n\n updateDOM(prevNode: DivNode, dom: HTMLElement): boolean {\n const prevProps = prevNode.__props;\n const currentProps = this.__props;\n const propsChanged = !this.shallowEqual(prevProps, currentProps);\n if (propsChanged) {\n updateDomProps(dom, this.getUnderlyingProps(currentProps));\n }\n // 不重新创建\n return false;\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n div: (node: Node) => ({\n conversion: convertDivElement,\n priority: 1,\n }),\n };\n }\n\n static importJSON(serializedNode: SerializedDivNode): DivNode {\n return $createDivNode(serializedNode.props);\n }\n\n exportJSON(): SerializedDivNode {\n return {\n ...super.exportJSON(),\n props: this.__props,\n type: this.getType(),\n };\n }\n\n exportDOM(): DOMExportOutput {\n const element = this.createDOM();\n return { element };\n }\n\n isInline(): boolean {\n const display = this.__props?.style?.display;\n return (\n display === 'inline' ||\n display === 'inline-flex' ||\n display === 'inline-block' ||\n display === 'inline-grid' ||\n display === 'inline-table' ||\n display === 'inline-list-item'\n );\n }\n\n getPropValue<K extends keyof DivNodeProps>(key: K): DivNodeProps[K] | undefined {\n return this.__props?.[key];\n }\n setProps(props: DivNodeProps): void {\n const writable = this.getWritable();\n writable.__props = {\n ...writable.__props,\n ...props,\n style: {\n ...writable.__props?.style,\n ...props.style,\n },\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private shallowEqual(obj1: any, obj2: any): boolean {\n if (obj1 === obj2) return true;\n if (!obj1 || !obj2) return false;\n\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n\n if (keys1.length !== keys2.length) return false;\n\n for (const key of keys1) {\n if (key === 'style') {\n // 特殊处理 style 对象\n if (!this.shallowEqual(obj1[key], obj2[key])) return false;\n } else if (obj1[key] !== obj2[key]) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nfunction convertDivElement(domNode: Node): DOMConversionOutput {\n const element = domNode as HTMLElement;\n if (element.nodeName === 'DIV') {\n return { node: $createDivNode() };\n }\n return { node: null };\n}\n\nexport function $createDivNode(props?: DivNodeProps): DivNode {\n return new DivNode(props);\n}\n\nexport function $isDivNode(node: LexicalNode | null | undefined): node is DivNode {\n return node instanceof DivNode;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,24 @@
1
+ import type { LexicalNode, NodeKey, SerializedTextNode, Spread } from 'lexical';
2
+ import { TextNode } from 'lexical';
3
+ import type { BaseNodeProps } from './base';
4
+ import { BaseNodeHelper } from './base';
5
+ export interface ExtendTextNodeProps extends BaseNodeProps {
6
+ text?: string;
7
+ }
8
+ export declare class ExtendTextNode extends TextNode {
9
+ __props: ExtendTextNodeProps | undefined;
10
+ __base: BaseNodeHelper<ExtendTextNodeProps>;
11
+ constructor(props?: ExtendTextNodeProps & {
12
+ key?: NodeKey;
13
+ });
14
+ static getType(): string;
15
+ static clone(node: ExtendTextNode): ExtendTextNode;
16
+ static importJSON(serializedNode: SerializedExtendTextNode): ExtendTextNode;
17
+ exportJSON(): SerializedExtendTextNode;
18
+ }
19
+ export type SerializedExtendTextNode = Spread<{
20
+ props?: ExtendTextNodeProps;
21
+ text: string;
22
+ }, SerializedTextNode>;
23
+ export declare function $createExtendTextNode(props?: ExtendTextNodeProps): ExtendTextNode;
24
+ export declare function $isExtendTextNode(node: LexicalNode | null | undefined): node is ExtendTextNode;