@tiny-codes/react-easy 1.4.2 → 1.4.5
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.
- package/CHANGELOG.md +37 -0
- package/es/components/Lexical/helpers/index.d.ts +1 -0
- package/es/components/Lexical/helpers/index.js +20 -0
- package/es/components/Lexical/helpers/index.js.map +1 -1
- package/es/components/Lexical/nodes/CloseIcon.d.ts +0 -2
- package/es/components/Lexical/nodes/CloseIcon.js +0 -12
- package/es/components/Lexical/nodes/CloseIcon.js.map +1 -1
- package/es/components/Lexical/nodes/DivNode.d.ts +1 -3
- package/es/components/Lexical/nodes/DivNode.js +4 -32
- package/es/components/Lexical/nodes/DivNode.js.map +1 -1
- package/es/components/Lexical/nodes/SelectNode.d.ts +3 -3
- package/es/components/Lexical/nodes/SelectNode.js +8 -7
- package/es/components/Lexical/nodes/SelectNode.js.map +1 -1
- package/es/components/Lexical/nodes/base.d.ts +4 -0
- package/es/components/Lexical/nodes/base.js +33 -7
- package/es/components/Lexical/nodes/base.js.map +1 -1
- package/es/utils/crypto.d.ts +56 -0
- package/es/utils/crypto.js +322 -0
- package/es/utils/crypto.js.map +1 -0
- package/es/utils/index.d.ts +1 -0
- package/es/utils/index.js +1 -0
- package/es/utils/index.js.map +1 -1
- package/lib/components/Lexical/helpers/index.d.ts +1 -0
- package/lib/components/Lexical/helpers/index.js +21 -0
- package/lib/components/Lexical/helpers/index.js.map +2 -2
- package/lib/components/Lexical/nodes/CloseIcon.d.ts +0 -2
- package/lib/components/Lexical/nodes/CloseIcon.js +0 -11
- package/lib/components/Lexical/nodes/CloseIcon.js.map +2 -2
- package/lib/components/Lexical/nodes/DivNode.d.ts +1 -3
- package/lib/components/Lexical/nodes/DivNode.js +2 -26
- package/lib/components/Lexical/nodes/DivNode.js.map +2 -2
- package/lib/components/Lexical/nodes/SelectNode.d.ts +3 -3
- package/lib/components/Lexical/nodes/SelectNode.js +5 -4
- package/lib/components/Lexical/nodes/SelectNode.js.map +2 -2
- package/lib/components/Lexical/nodes/base.d.ts +4 -0
- package/lib/components/Lexical/nodes/base.js +22 -0
- package/lib/components/Lexical/nodes/base.js.map +2 -2
- package/lib/utils/crypto.d.ts +56 -0
- package/lib/utils/crypto.js +175 -0
- package/lib/utils/crypto.js.map +7 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +3 -1
- package/lib/utils/index.js.map +2 -2
- package/package.json +1 -18
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## 1.4.5
|
|
6
|
+
|
|
7
|
+
2025-8-16
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
#### Crypto
|
|
12
|
+
|
|
13
|
+
- ✨ Improve `toBase64` and `fromBase64` to make node.js and browser compatible each other.
|
|
14
|
+
|
|
15
|
+
### Breaking Changes
|
|
16
|
+
|
|
17
|
+
- Remove `exports` from the package.json.
|
|
18
|
+
|
|
19
|
+
## 1.4.4
|
|
20
|
+
|
|
21
|
+
2025-8-15
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
#### Crypto
|
|
26
|
+
|
|
27
|
+
- ✨ Add `advancedEncrypt` and `advancedDecrypt` methods for enhanced security encryption and decryption.
|
|
28
|
+
- ✨ Add `encryptAES` and `decryptAES` methods for general AES encryption and decryption.
|
|
29
|
+
- ✨ Add `toBase64` and `fromBase64` utility functions for base64 encoding and decoding.
|
|
30
|
+
|
|
31
|
+
## 1.4.3
|
|
32
|
+
|
|
33
|
+
2025-8-10
|
|
34
|
+
|
|
35
|
+
### Features
|
|
36
|
+
|
|
37
|
+
#### Lexical components
|
|
38
|
+
|
|
39
|
+
- ✨ rename `getPropValue` to `getProp`
|
|
40
|
+
- ✨ rename `setProps` to `updateProps`
|
|
41
|
+
|
|
5
42
|
## 1.4.2
|
|
6
43
|
|
|
7
44
|
2025-8-10
|
|
@@ -71,3 +71,4 @@ export declare function updateDomStyle(dom: HTMLElement | undefined, style: CSSP
|
|
|
71
71
|
* @returns Element attributes | 元素属性
|
|
72
72
|
*/
|
|
73
73
|
export declare function getDomAttributes(dom: HTMLElement | undefined): HtmlHTMLAttributes<HTMLElement> | undefined;
|
|
74
|
+
export declare function shallowEqual(obj1: any, obj2: any): boolean;
|
|
@@ -285,4 +285,24 @@ export function getDomAttributes(dom) {
|
|
|
285
285
|
}
|
|
286
286
|
return attributes;
|
|
287
287
|
}
|
|
288
|
+
|
|
289
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
290
|
+
export function shallowEqual(obj1, obj2) {
|
|
291
|
+
if (obj1 === obj2) return true;
|
|
292
|
+
if (!obj1 || !obj2) return false;
|
|
293
|
+
var keys1 = Object.keys(obj1);
|
|
294
|
+
var keys2 = Object.keys(obj2);
|
|
295
|
+
if (keys1.length !== keys2.length) return false;
|
|
296
|
+
for (var _i = 0, _keys = keys1; _i < _keys.length; _i++) {
|
|
297
|
+
var key = _keys[_i];
|
|
298
|
+
if (key === 'style') {
|
|
299
|
+
// - EN: Special handling for style objects.
|
|
300
|
+
// - CN: 特殊处理 style 对象。
|
|
301
|
+
if (!shallowEqual(obj1[key], obj2[key])) return false;
|
|
302
|
+
} else if (obj1[key] !== obj2[key]) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
288
308
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["$createTextNode","$getRoot","$getSelection","$isDecoratorNode","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","$createDivNode","$isDivNode","insertNodeAtCursor","editor","node","update","selection","lastNode","focus","getNode","append","insertAfter","insertNodes","selectNext","root","nodeToInsert","container","style","display","insertTextAtCursor","text","textNode","insertText","getLastChild","clearEditorContent","state","getEditorState","stateJson","toJSON","newJson","_objectSpread","children","direction","format","indent","type","version","textFormat","textStyle","emptyState","parseEditorState","JSON","stringify","setEditorState","clear","findNode","predicate","matched","findNodes","stopOnFirstMatch","options","read","traverse","result","push","getChildren","_iterator","_createForOfIteratorHelper","_step","s","n","done","child","value","length","err","e","f","updateDomProps","dom","props","Array","from","attributes","forEach","attr","name","startsWith","removeAttribute","Object","entries","_ref","_ref2","_slicedToArray","key","_ref3","_ref4","styleKey","styleValue","undefined","className","toLowerCase","setAttribute","toString","updateDomStyle","_ref5","_ref6","getDomAttributes","styles","styleName"],"sources":["../../../../src/components/Lexical/helpers/index.ts"],"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 * - EN: Insert a node at the current cursor position.\n * - CN: 将节点插入到当前光标位置。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param node Node to insert | 要插入的节点\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 * - EN: Insert text at the current cursor position.\n * - CN: 将文本插入到当前光标位置。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param text Text to insert | 要插入的文本\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 * - EN: Clear the editor content.\n * - CN: 清空编辑器内容。\n *\n * @param editor LexicalEditor instance | 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 * - EN: Find the first node that matches the predicate.\n * - CN: 查找第一个符合条件的节点。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param predicate Function to test whether a node matches | 用于匹配节点的函数\n *\n * @returns The matched node, or undefined | 符合条件的第一个节点,或 undefined\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 * - EN: Find all nodes that match the predicate.\n * - CN: 查找所有符合条件的节点数组。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param predicate Function to test whether a node matches | 用于匹配节点的函数\n * @param options Options | 选项\n *\n * @returns An array of matched nodes | 符合条件的节点数组\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 * - EN: Update properties on a DOM element.\n * - CN: 更新 DOM 元素的属性。\n *\n * @param dom Target DOM element to update | 要更新的 DOM 元素\n * @param props Props to set on the element | 要设置的属性\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 (key.startsWith('on') && typeof value === 'function') {\n dom[key.toLowerCase() as 'onclick'] = value as (event: MouseEvent) => void;\n } else if (value !== undefined && value !== null) {\n dom.setAttribute(key, value.toString());\n }\n });\n }\n}\n\n/**\n * - EN: Update style on a DOM element.\n * - CN: 更新 DOM 元素的样式。\n *\n * @param dom Target DOM element to update | 要更新的 DOM 元素\n * @param style Style to set | 要设置的样式\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\n/**\n * - EN: Get attributes from a DOM element.\n * - CN: 从 DOM 元素获取属性。\n *\n * @param dom Target DOM element | 目标 DOM 元素\n *\n * @returns Element attributes | 元素属性\n */\nexport function getDomAttributes(dom: HTMLElement | undefined): HtmlHTMLAttributes<HTMLElement> | undefined {\n if (!dom) return undefined;\n\n const attributes: HtmlHTMLAttributes<HTMLElement> = {};\n Array.from(dom.attributes).forEach((attr) => {\n if (attr.name === 'class' || attr.name === 'style') {\n return;\n }\n attributes[attr.name as keyof HtmlHTMLAttributes<HTMLElement>] = attr.value;\n });\n\n if (dom.className) {\n attributes.className = dom.className;\n }\n\n if (dom.style) {\n const styles: CSSProperties = {};\n Array.from(dom.style).forEach((styleName) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (styles as any)[styleName] = (dom.style as any)[styleName];\n });\n attributes.style = styles;\n }\n\n return attributes;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["$createTextNode","$getRoot","$getSelection","$isDecoratorNode","$isElementNode","$isParagraphNode","$isRangeSelection","$isTextNode","$createDivNode","$isDivNode","insertNodeAtCursor","editor","node","update","selection","lastNode","focus","getNode","append","insertAfter","insertNodes","selectNext","root","nodeToInsert","container","style","display","insertTextAtCursor","text","textNode","insertText","getLastChild","clearEditorContent","state","getEditorState","stateJson","toJSON","newJson","_objectSpread","children","direction","format","indent","type","version","textFormat","textStyle","emptyState","parseEditorState","JSON","stringify","setEditorState","clear","findNode","predicate","matched","findNodes","stopOnFirstMatch","options","read","traverse","result","push","getChildren","_iterator","_createForOfIteratorHelper","_step","s","n","done","child","value","length","err","e","f","updateDomProps","dom","props","Array","from","attributes","forEach","attr","name","startsWith","removeAttribute","Object","entries","_ref","_ref2","_slicedToArray","key","_ref3","_ref4","styleKey","styleValue","undefined","className","toLowerCase","setAttribute","toString","updateDomStyle","_ref5","_ref6","getDomAttributes","styles","styleName","shallowEqual","obj1","obj2","keys1","keys","keys2","_i","_keys"],"sources":["../../../../src/components/Lexical/helpers/index.ts"],"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 * - EN: Insert a node at the current cursor position.\n * - CN: 将节点插入到当前光标位置。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param node Node to insert | 要插入的节点\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 * - EN: Insert text at the current cursor position.\n * - CN: 将文本插入到当前光标位置。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param text Text to insert | 要插入的文本\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 * - EN: Clear the editor content.\n * - CN: 清空编辑器内容。\n *\n * @param editor LexicalEditor instance | 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 * - EN: Find the first node that matches the predicate.\n * - CN: 查找第一个符合条件的节点。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param predicate Function to test whether a node matches | 用于匹配节点的函数\n *\n * @returns The matched node, or undefined | 符合条件的第一个节点,或 undefined\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 * - EN: Find all nodes that match the predicate.\n * - CN: 查找所有符合条件的节点数组。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param predicate Function to test whether a node matches | 用于匹配节点的函数\n * @param options Options | 选项\n *\n * @returns An array of matched nodes | 符合条件的节点数组\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 * - EN: Update properties on a DOM element.\n * - CN: 更新 DOM 元素的属性。\n *\n * @param dom Target DOM element to update | 要更新的 DOM 元素\n * @param props Props to set on the element | 要设置的属性\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 (key.startsWith('on') && typeof value === 'function') {\n dom[key.toLowerCase() as 'onclick'] = value as (event: MouseEvent) => void;\n } else if (value !== undefined && value !== null) {\n dom.setAttribute(key, value.toString());\n }\n });\n }\n}\n\n/**\n * - EN: Update style on a DOM element.\n * - CN: 更新 DOM 元素的样式。\n *\n * @param dom Target DOM element to update | 要更新的 DOM 元素\n * @param style Style to set | 要设置的样式\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\n/**\n * - EN: Get attributes from a DOM element.\n * - CN: 从 DOM 元素获取属性。\n *\n * @param dom Target DOM element | 目标 DOM 元素\n *\n * @returns Element attributes | 元素属性\n */\nexport function getDomAttributes(dom: HTMLElement | undefined): HtmlHTMLAttributes<HTMLElement> | undefined {\n if (!dom) return undefined;\n\n const attributes: HtmlHTMLAttributes<HTMLElement> = {};\n Array.from(dom.attributes).forEach((attr) => {\n if (attr.name === 'class' || attr.name === 'style') {\n return;\n }\n attributes[attr.name as keyof HtmlHTMLAttributes<HTMLElement>] = attr.value;\n });\n\n if (dom.className) {\n attributes.className = dom.className;\n }\n\n if (dom.style) {\n const styles: CSSProperties = {};\n Array.from(dom.style).forEach((styleName) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (styles as any)[styleName] = (dom.style as any)[styleName];\n });\n attributes.style = styles;\n }\n\n return attributes;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function 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 // - EN: Special handling for style objects.\n // - CN: 特殊处理 style 对象。\n if (!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"],"mappings":";;;;;;;;;;;;;AAEA,SACEA,eAAe,EACfC,QAAQ,EACRC,aAAa,EACbC,gBAAgB,EAChBC,cAAc,EACdC,gBAAgB,EAChBC,iBAAiB,EACjBC,WAAW,QACN,SAAS;AAChB,SAASC,cAAc,EAAEC,UAAU;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,MAAqB,EAAEC,IAAiB,EAAQ;EACjFD,MAAM,CAACE,MAAM,CAAC,YAAM;IAClB,IAAMC,SAAS,GAAGZ,aAAa,CAAC,CAAC;IACjC,IAAIY,SAAS,EAAE;MACb,IAAIR,iBAAiB,CAACQ,SAAS,CAAC,EAAE;QAChC;QACA,IAAMC,QAAQ,GAAGD,SAAS,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC;QAC1C,IAAIF,QAAQ,EAAE;UACZ,IAAIV,gBAAgB,CAACU,QAAQ,CAAC,EAAE;YAC9BA,QAAQ,CAACG,MAAM,CAACN,IAAI,CAAC;UACvB,CAAC,MAAM,IAAIL,WAAW,CAACQ,QAAQ,CAAC,EAAE;YAChC;YACAA,QAAQ,CAACI,WAAW,CAACP,IAAI,CAAC;UAC5B,CAAC,MAAM,IAAIH,UAAU,CAACM,QAAQ,CAAC,EAAE;YAC/BA,QAAQ,CAACG,MAAM,CAACN,IAAI,CAAC;UACvB,CAAC,MAAM;YACLE,SAAS,CAACM,WAAW,CAAC,CAACR,IAAI,CAAC,CAAC;UAC/B;UACAA,IAAI,CAACS,UAAU,CAAC,CAAC;QACnB;MACF,CAAC,MAAM;QACLP,SAAS,CAACM,WAAW,CAAC,CAACR,IAAI,CAAC,CAAC;QAC7BA,IAAI,CAACS,UAAU,CAAC,CAAC;MACnB;IACF,CAAC,MAAM;MACL,IAAMC,IAAI,GAAGrB,QAAQ,CAAC,CAAC;MACvB,IAAIsB,YAAyB,GAAGX,IAAI;MACpC,IAAIR,cAAc,CAACQ,IAAI,CAAC,IAAIT,gBAAgB,CAACS,IAAI,CAAC,EAAE;QAClDW,YAAY,GAAGX,IAAI;MACrB,CAAC,MAAM;QACL,IAAMY,SAAS,GAAGhB,cAAc,CAAC;UAC/BiB,KAAK,EAAE;YAAEC,OAAO,EAAE;UAAe;QACnC,CAAC,CAAC;QACFF,SAAS,CAACN,MAAM,CAACN,IAAI,CAAC;QACtBW,YAAY,GAAGC,SAAS;MAC1B;MACAF,IAAI,CAACJ,MAAM,CAACK,YAAY,CAAC;MACzBX,IAAI,CAACS,UAAU,CAAC,CAAC;IACnB;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,kBAAkBA,CAAChB,MAAqB,EAAEiB,IAAY,EAAQ;EAC5EjB,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEE,MAAM,CAAC,YAAM;IACnB,IAAMgB,QAAQ,GAAG7B,eAAe,CAAC4B,IAAI,CAAC;IACtC,IAAMN,IAAI,GAAGrB,QAAQ,CAAC,CAAC;IACvB,IAAMa,SAAS,GAAGZ,aAAa,CAAC,CAAC;IACjC,IAAIY,SAAS,EAAE;MACb;MACAA,SAAS,CAACgB,UAAU,CAACF,IAAI,CAAC;IAC5B,CAAC,MAAM;MACL;MACA,IAAMb,QAAQ,GAAGO,IAAI,CAACS,YAAY,CAAC,CAAC;MACpC,IAAIhB,QAAQ,IAAIV,gBAAgB,CAACU,QAAQ,CAAC,EAAE;QAC1CA,QAAQ,CAACG,MAAM,CAACW,QAAQ,CAAC;MAC3B,CAAC,MAAM;QACL,IAAML,SAAS,GAAGhB,cAAc,CAAC;UAC/BiB,KAAK,EAAE;YAAEC,OAAO,EAAE;UAAe;QACnC,CAAC,CAAC;QACFF,SAAS,CAACN,MAAM,CAACW,QAAQ,CAAC;QAC1BP,IAAI,CAACJ,MAAM,CAACM,SAAS,CAAC;MACxB;IACF;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,kBAAkBA,CAACrB,MAAqB,EAAE;EACxD,IAAMsB,KAAK,GAAGtB,MAAM,CAACuB,cAAc,CAAC,CAAC;EACrC,IAAMC,SAAS,GAAGF,KAAK,CAACG,MAAM,CAAC,CAAC;EAChC;EACA,IAAMC,OAAO,GAAAC,aAAA,CAAAA,aAAA,KACRH,SAAS;IACZb,IAAI,EAAAgB,aAAA,CAAAA,aAAA,KACCH,SAAS,CAACb,IAAI;MACjBiB,QAAQ,EAAE,CACR;QACEA,QAAQ,EAAE,EAAE;QACZC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,EAAE;QACVC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,WAAW;QACjBC,OAAO,EAAE,CAAC;QACVC,UAAU,EAAE,CAAC;QACbC,SAAS,EAAE;MACb,CAAC;IACF;EACF,EACF;EACD,IAAMC,UAAU,GAAGpC,MAAM,CAACqC,gBAAgB,CAACC,IAAI,CAACC,SAAS,CAACb,OAAO,CAAC,CAAC;EACnE1B,MAAM,CAACwC,cAAc,CAACJ,UAAU,CAAC;EACjCpC,MAAM,CAACE,MAAM,CAAC,YAAM;IAClB,IAAMS,IAAI,GAAGrB,QAAQ,CAAC,CAAC;IACvBqB,IAAI,CAAC8B,KAAK,CAAC,CAAC;EACd,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CACtB1C,MAAqB,EACrB2C,SAAyC,EAC1B;EACf,IAAMC,OAAO,GAAGC,SAAS,CAAI7C,MAAM,EAAE2C,SAAS,EAAE;IAAEG,gBAAgB,EAAE;EAAK,CAAC,CAAC;EAC3E,OAAOF,OAAO,CAAC,CAAC,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CACvB7C,MAAqB,EACrB2C,SAAyC,EACzCI,OAEC,EACI;EACL,IAAMH,OAAY,GAAG,EAAE;EACvB5C,MAAM,CAACuB,cAAc,CAAC,CAAC,CAACyB,IAAI,CAAC,YAAM;IACjC,IAAMrC,IAAI,GAAGrB,QAAQ,CAAC,CAAC;IACvB,IAAM2D,QAAQ,GAAG,SAAXA,QAAQA,CAAIhD,IAAiB,EAAEiD,MAAW,EAAK;MACnD,IAAIP,SAAS,CAAC1C,IAAI,CAAC,EAAE;QACnBiD,MAAM,CAACC,IAAI,CAAClD,IAAoB,CAAC;QACjC,IAAI8C,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAED,gBAAgB,EAAE;UAC7B;QACF;MACF;MACA,IAAIrD,cAAc,CAACQ,IAAI,CAAC,EAAE;QACxB,IAAM2B,QAAQ,GAAG3B,IAAI,CAACmD,WAAW,CAAC,CAAC;QAAC,IAAAC,SAAA,GAAAC,0BAAA,CAChB1B,QAAQ;UAAA2B,KAAA;QAAA;UAA5B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA8B;YAAA,IAAnBC,KAAK,GAAAJ,KAAA,CAAAK,KAAA;YACdX,QAAQ,CAACU,KAAK,EAAET,MAAM,CAAC;YACvB,IAAIH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAED,gBAAgB,IAAII,MAAM,CAACW,MAAM,GAAG,CAAC,EAAE;cAClD;YACF;UACF;QAAC,SAAAC,GAAA;UAAAT,SAAA,CAAAU,CAAA,CAAAD,GAAA;QAAA;UAAAT,SAAA,CAAAW,CAAA;QAAA;MACH;IACF,CAAC;IACDf,QAAQ,CAACtC,IAAI,EAAEiC,OAAO,CAAC;EACzB,CAAC,CAAC;EACF,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASqB,cAAcA,CAACC,GAA4B,EAAEC,KAAsC,EAAQ;EACzG,IAAI,CAACD,GAAG,EAAE;EACVE,KAAK,CAACC,IAAI,CAACH,GAAG,CAACI,UAAU,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;IAC3C,IAAI,CAACA,IAAI,CAACC,IAAI,CAACC,UAAU,CAAC,cAAc,CAAC,EAAE;MACzCR,GAAG,CAACS,eAAe,CAACH,IAAI,CAACC,IAAI,CAAC;IAChC;EACF,CAAC,CAAC;EAEFP,GAAG,CAACS,eAAe,CAAC,OAAO,CAAC;EAC5BT,GAAG,CAACS,eAAe,CAAC,OAAO,CAAC;EAE5B,IAAIR,KAAK,EAAE;IACTS,MAAM,CAACC,OAAO,CAACV,KAAK,CAAC,CAACI,OAAO,CAAC,UAAAO,IAAA,EAAkB;MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA;QAAhBG,GAAG,GAAAF,KAAA;QAAEnB,KAAK,GAAAmB,KAAA;MACxC,IAAIE,GAAG,KAAK,OAAO,IAAIrB,KAAK,EAAE;QAC5BgB,MAAM,CAACC,OAAO,CAACjB,KAAsB,CAAC,CAACW,OAAO,CAAC,UAAAW,KAAA,EAA4B;UAAA,IAAAC,KAAA,GAAAH,cAAA,CAAAE,KAAA;YAA1BE,QAAQ,GAAAD,KAAA;YAAEE,UAAU,GAAAF,KAAA;UACnE,IAAIE,UAAU,KAAKC,SAAS,EAAE;YAC5B;YACCpB,GAAG,CAACpD,KAAK,CAASsE,QAAQ,CAAC,GAAGC,UAAU;UAC3C;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIJ,GAAG,KAAK,WAAW,IAAIrB,KAAK,EAAE;QACvCM,GAAG,CAACqB,SAAS,GAAG3B,KAAe;MACjC,CAAC,MAAM,IAAIqB,GAAG,CAACP,UAAU,CAAC,IAAI,CAAC,IAAI,OAAOd,KAAK,KAAK,UAAU,EAAE;QAC9DM,GAAG,CAACe,GAAG,CAACO,WAAW,CAAC,CAAC,CAAc,GAAG5B,KAAoC;MAC5E,CAAC,MAAM,IAAIA,KAAK,KAAK0B,SAAS,IAAI1B,KAAK,KAAK,IAAI,EAAE;QAChDM,GAAG,CAACuB,YAAY,CAACR,GAAG,EAAErB,KAAK,CAAC8B,QAAQ,CAAC,CAAC,CAAC;MACzC;IACF,CAAC,CAAC;EACJ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACzB,GAA4B,EAAEpD,KAAgC,EAAQ;EACnG,IAAI,CAACoD,GAAG,EAAE;EACVA,GAAG,CAACS,eAAe,CAAC,OAAO,CAAC;EAC5B,IAAI7D,KAAK,EAAE;IACT8D,MAAM,CAACC,OAAO,CAAC/D,KAAK,CAAC,CAACyD,OAAO,CAAC,UAAAqB,KAAA,EAA4B;MAAA,IAAAC,KAAA,GAAAb,cAAA,CAAAY,KAAA;QAA1BR,QAAQ,GAAAS,KAAA;QAAER,UAAU,GAAAQ,KAAA;MAClD,IAAIR,UAAU,KAAKC,SAAS,EAAE;QAC5B;QACCpB,GAAG,CAACpD,KAAK,CAASsE,QAAQ,CAAC,GAAGC,UAAU;MAC3C;IACF,CAAC,CAAC;EACJ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,gBAAgBA,CAAC5B,GAA4B,EAA+C;EAC1G,IAAI,CAACA,GAAG,EAAE,OAAOoB,SAAS;EAE1B,IAAMhB,UAA2C,GAAG,CAAC,CAAC;EACtDF,KAAK,CAACC,IAAI,CAACH,GAAG,CAACI,UAAU,CAAC,CAACC,OAAO,CAAC,UAACC,IAAI,EAAK;IAC3C,IAAIA,IAAI,CAACC,IAAI,KAAK,OAAO,IAAID,IAAI,CAACC,IAAI,KAAK,OAAO,EAAE;MAClD;IACF;IACAH,UAAU,CAACE,IAAI,CAACC,IAAI,CAA0C,GAAGD,IAAI,CAACZ,KAAK;EAC7E,CAAC,CAAC;EAEF,IAAIM,GAAG,CAACqB,SAAS,EAAE;IACjBjB,UAAU,CAACiB,SAAS,GAAGrB,GAAG,CAACqB,SAAS;EACtC;EAEA,IAAIrB,GAAG,CAACpD,KAAK,EAAE;IACb,IAAMiF,MAAqB,GAAG,CAAC,CAAC;IAChC3B,KAAK,CAACC,IAAI,CAACH,GAAG,CAACpD,KAAK,CAAC,CAACyD,OAAO,CAAC,UAACyB,SAAS,EAAK;MAC3C;MACCD,MAAM,CAASC,SAAS,CAAC,GAAI9B,GAAG,CAACpD,KAAK,CAASkF,SAAS,CAAC;IAC5D,CAAC,CAAC;IACF1B,UAAU,CAACxD,KAAK,GAAGiF,MAAM;EAC3B;EAEA,OAAOzB,UAAU;AACnB;;AAEA;AACA,OAAO,SAAS2B,YAAYA,CAACC,IAAS,EAAEC,IAAS,EAAW;EAC1D,IAAID,IAAI,KAAKC,IAAI,EAAE,OAAO,IAAI;EAC9B,IAAI,CAACD,IAAI,IAAI,CAACC,IAAI,EAAE,OAAO,KAAK;EAEhC,IAAMC,KAAK,GAAGxB,MAAM,CAACyB,IAAI,CAACH,IAAI,CAAC;EAC/B,IAAMI,KAAK,GAAG1B,MAAM,CAACyB,IAAI,CAACF,IAAI,CAAC;EAE/B,IAAIC,KAAK,CAACvC,MAAM,KAAKyC,KAAK,CAACzC,MAAM,EAAE,OAAO,KAAK;EAE/C,SAAA0C,EAAA,MAAAC,KAAA,GAAkBJ,KAAK,EAAAG,EAAA,GAAAC,KAAA,CAAA3C,MAAA,EAAA0C,EAAA,IAAE;IAApB,IAAMtB,GAAG,GAAAuB,KAAA,CAAAD,EAAA;IACZ,IAAItB,GAAG,KAAK,OAAO,EAAE;MACnB;MACA;MACA,IAAI,CAACgB,YAAY,CAACC,IAAI,CAACjB,GAAG,CAAC,EAAEkB,IAAI,CAAClB,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK;IACvD,CAAC,MAAM,IAAIiB,IAAI,CAACjB,GAAG,CAAC,KAAKkB,IAAI,CAAClB,GAAG,CAAC,EAAE;MAClC,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb"}
|
|
@@ -47,8 +47,6 @@ export declare class CloseIconNode extends BaseDecoratorNode<ReactNode, CloseIco
|
|
|
47
47
|
updateDOM(): boolean;
|
|
48
48
|
decorate(): ReactNode;
|
|
49
49
|
isInline(): boolean;
|
|
50
|
-
getPropValue(propName: keyof CloseIconNodeProps): CloseIconNodeProps[typeof propName];
|
|
51
|
-
setProps(props: Partial<CloseIconNodeProps>): void;
|
|
52
50
|
getUnderlyingProps(props: CloseIconNodeProps | undefined): Omit<CloseIconNodeProps, keyof BaseNodeProps>;
|
|
53
51
|
}
|
|
54
52
|
/**
|
|
@@ -85,18 +85,6 @@ export var CloseIconNode = /*#__PURE__*/function (_BaseDecoratorNode) {
|
|
|
85
85
|
value: function isInline() {
|
|
86
86
|
return false;
|
|
87
87
|
}
|
|
88
|
-
}, {
|
|
89
|
-
key: "getPropValue",
|
|
90
|
-
value: function getPropValue(propName) {
|
|
91
|
-
var _this$__props2;
|
|
92
|
-
return (_this$__props2 = this.__props) === null || _this$__props2 === void 0 ? void 0 : _this$__props2[propName];
|
|
93
|
-
}
|
|
94
|
-
}, {
|
|
95
|
-
key: "setProps",
|
|
96
|
-
value: function setProps(props) {
|
|
97
|
-
var writable = this.getWritable();
|
|
98
|
-
writable.__props = _objectSpread(_objectSpread({}, writable.__props), props);
|
|
99
|
-
}
|
|
100
88
|
}, {
|
|
101
89
|
key: "getUnderlyingProps",
|
|
102
90
|
value: function getUnderlyingProps(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["theme","classNames","CloseCircleOutlined","randomChars","updateDomProps","BaseDecoratorNode","jsx","_jsx","CLOSE_ICON_CLASSNAME","CloseIconNode","_BaseDecoratorNode","_inherits","_super","_createSuper","props","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","__hashId","concat","_createClass","key","value","exportJSON","_objectSpread","_get","_getPrototypeOf","prototype","__props","type","getType","version","createDOM","_this$__props","span","document","createElement","underlyingProps","getUnderlyingProps","className","stylesheet","token","getDesignToken","parentCls","parentClassName","innerHTML","colorTextDisabled","fontSizeSM","colorTextSecondary","append","updateDOM","decorate","CloseIconComponent","node","isInline","getPropValue","propName","_this$__props2","setProps","writable","getWritable","excludeProps","_ref","icon","iconClassName","iconStyle","onClick","rest","_objectWithoutProperties","_excluded","clone","getKey","importJSON","serializedNode","$createCloseIconNode","_ref2","_ref3","closeIcon","style","$isCloseIconNode"],"sources":["../../../../src/components/Lexical/nodes/CloseIcon.tsx"],"sourcesContent":["import { type CSSProperties, type HtmlHTMLAttributes, type ReactNode } from 'react';\nimport { theme } from 'antd';\nimport classNames from 'classnames';\nimport type { LexicalNode, SerializedLexicalNode, Spread } from 'lexical';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { randomChars } from '../../../utils';\nimport { updateDomProps } from '../helpers';\nimport type { BaseDecoratorNodeProps, BaseNodeProps } from './base';\nimport { BaseDecoratorNode } from './base';\n\nconst CLOSE_ICON_CLASSNAME = 'lexical-close-icon';\n\nexport interface CloseIconNodeProps extends HtmlHTMLAttributes<HTMLSpanElement>, BaseDecoratorNodeProps {\n /**\n * - EN: Parent element class name, used to add positioning styles to the parent element.\n * - CN: 父元素的类名,用于给父元素添加定位样式\n */\n parentClassName: string;\n /**\n * - EN: The custom icon to display, optional\n * - CN: 要显示的自定义图标,可选\n */\n icon?: ReactNode;\n /**\n * - EN: The default class name for the close icon element. This property is invalid if `icon` is\n * set.\n * - CN: 默认关闭图标元素的类名,如果设置了 `icon` 则该属性无效\n */\n iconClassName?: string;\n /**\n * - EN: The custom style for the close icon element. This property is invalid if `icon` is set.\n * - CN: 自定义关闭图标元素的样式,如果设置了 `icon` 则该属性无效\n */\n iconStyle?: CSSProperties;\n /**\n * - EN: The click event handler for the close icon element.\n * - CN: 关闭图标元素的点击事件\n */\n onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\n/**\n * - EN: A node that represents a close icon.\n * - CN: 一个关闭图标的节点。\n */\nexport class CloseIconNode extends BaseDecoratorNode<ReactNode, CloseIconNodeProps> {\n __hashId: string;\n\n constructor(props: CloseIconNodeProps & { key?: string }) {\n super(props);\n this.__hashId = `hash-${randomChars(6)}`;\n }\n\n static getType(): string {\n return 'CloseIcon';\n }\n\n static clone(node: CloseIconNode): CloseIconNode {\n return new CloseIconNode({ ...node.__props!, key: node.getKey() });\n }\n\n static importJSON(serializedNode: SerializedCloseIconNode): CloseIconNode {\n return $createCloseIconNode(serializedNode.props);\n }\n\n exportJSON(): SerializedCloseIconNode {\n return {\n ...super.exportJSON(),\n props: this.__props!,\n type: this.getType(),\n version: 1,\n };\n }\n\n createDOM(): HTMLElement {\n const span = document.createElement('span');\n const underlyingProps = this.getUnderlyingProps(this.__props);\n const className = classNames(CLOSE_ICON_CLASSNAME, this.__hashId, underlyingProps?.className);\n updateDomProps(span, { ...underlyingProps, className });\n const stylesheet = document.createElement('style');\n const token = theme.getDesignToken();\n const parentCls = this.__props?.parentClassName ? `.${this.__props.parentClassName}` : '';\n stylesheet.innerHTML = `\n ${\n parentCls\n ? `\n ${parentCls} { \n position: relative;\n }\n `\n : ''\n }\n ${parentCls} .${CLOSE_ICON_CLASSNAME}.${this.__hashId} {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n color: ${token.colorTextDisabled};\n font-size: ${token.fontSizeSM}px;\n line-height: 0;\n z-index: 1;\n opacity: 0;\n cursor: pointer;\n pointer-events: none;\n transition: opacity 0.2s ease;\n }\n ${parentCls}:hover .${CLOSE_ICON_CLASSNAME}.${this.__hashId} {\n opacity: 1;\n pointer-events: auto;\n }\n ${parentCls}:hover .${CLOSE_ICON_CLASSNAME}.${this.__hashId}:hover {\n color: ${token.colorTextSecondary};\n }\n `;\n span.append(stylesheet);\n return span;\n }\n\n updateDOM() {\n return false;\n }\n\n decorate(): ReactNode {\n return <CloseIconComponent node={this} />;\n }\n\n isInline(): boolean {\n return false;\n }\n\n getPropValue(propName: keyof CloseIconNodeProps): CloseIconNodeProps[typeof propName] {\n return this.__props?.[propName];\n }\n\n setProps(props: Partial<CloseIconNodeProps>): void {\n const writable = this.getWritable();\n writable.__props = {\n ...writable.__props!,\n ...props,\n };\n }\n\n getUnderlyingProps(props: CloseIconNodeProps | undefined): Omit<CloseIconNodeProps, keyof BaseNodeProps> {\n const excludeProps = super.getUnderlyingProps(props);\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { icon, iconClassName, iconStyle, onClick, ...rest } = excludeProps || {};\n /* eslint-enable @typescript-eslint/no-unused-vars */\n return rest;\n }\n}\n\n/**\n * - EN: React decorator component rendered for CloseIconNode.\n * - CN: CloseIconNode 对应的 React 装饰组件。\n *\n * @param node The bound CloseIconNode instance | 关联的 CloseIconNode 实例\n */\nfunction CloseIconComponent({ node }: CloseIconComponentProps): ReactNode {\n const { icon, iconClassName, iconStyle, onClick } = node.__props || {};\n\n const closeIcon = icon ?? (\n <CloseCircleOutlined className={classNames(node.__hashId, iconClassName)} style={iconStyle} onClick={onClick} />\n );\n return closeIcon;\n}\n\n/**\n * - EN: Factory to create a CloseIconNode.\n * - CN: 创建 CloseIconNode 的工厂函数。\n *\n * @param props Props for the CloseIcon node | CloseIcon 节点的属性\n */\nexport function $createCloseIconNode(props: CloseIconNodeProps): CloseIconNode {\n return new CloseIconNode(props);\n}\n\n/**\n * - EN: Type guard to check whether a node is CloseIconNode.\n * - CN: 判断节点是否为 CloseIconNode 的类型守卫。\n *\n * @param node Node to test | 要检测的节点\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function $isCloseIconNode(node: LexicalNode | null | undefined): node is CloseIconNode {\n return node instanceof CloseIconNode;\n}\n\ninterface CloseIconComponentProps {\n node: CloseIconNode;\n}\ntype SerializedCloseIconNode = Spread<\n {\n props: CloseIconNodeProps;\n },\n SerializedLexicalNode\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["theme","classNames","CloseCircleOutlined","randomChars","updateDomProps","BaseDecoratorNode","jsx","_jsx","CLOSE_ICON_CLASSNAME","CloseIconNode","_BaseDecoratorNode","_inherits","_super","_createSuper","props","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","__hashId","concat","_createClass","key","value","exportJSON","_objectSpread","_get","_getPrototypeOf","prototype","__props","type","getType","version","createDOM","_this$__props","span","document","createElement","underlyingProps","getUnderlyingProps","className","stylesheet","token","getDesignToken","parentCls","parentClassName","innerHTML","colorTextDisabled","fontSizeSM","colorTextSecondary","append","updateDOM","decorate","CloseIconComponent","node","isInline","excludeProps","_ref","icon","iconClassName","iconStyle","onClick","rest","_objectWithoutProperties","_excluded","clone","getKey","importJSON","serializedNode","$createCloseIconNode","_ref2","_ref3","closeIcon","style","$isCloseIconNode"],"sources":["../../../../src/components/Lexical/nodes/CloseIcon.tsx"],"sourcesContent":["import { type CSSProperties, type HtmlHTMLAttributes, type ReactNode } from 'react';\nimport { theme } from 'antd';\nimport classNames from 'classnames';\nimport type { LexicalNode, SerializedLexicalNode, Spread } from 'lexical';\nimport { CloseCircleOutlined } from '@ant-design/icons';\nimport { randomChars } from '../../../utils';\nimport { updateDomProps } from '../helpers';\nimport type { BaseDecoratorNodeProps, BaseNodeProps } from './base';\nimport { BaseDecoratorNode } from './base';\n\nconst CLOSE_ICON_CLASSNAME = 'lexical-close-icon';\n\nexport interface CloseIconNodeProps extends HtmlHTMLAttributes<HTMLSpanElement>, BaseDecoratorNodeProps {\n /**\n * - EN: Parent element class name, used to add positioning styles to the parent element.\n * - CN: 父元素的类名,用于给父元素添加定位样式\n */\n parentClassName: string;\n /**\n * - EN: The custom icon to display, optional\n * - CN: 要显示的自定义图标,可选\n */\n icon?: ReactNode;\n /**\n * - EN: The default class name for the close icon element. This property is invalid if `icon` is\n * set.\n * - CN: 默认关闭图标元素的类名,如果设置了 `icon` 则该属性无效\n */\n iconClassName?: string;\n /**\n * - EN: The custom style for the close icon element. This property is invalid if `icon` is set.\n * - CN: 自定义关闭图标元素的样式,如果设置了 `icon` 则该属性无效\n */\n iconStyle?: CSSProperties;\n /**\n * - EN: The click event handler for the close icon element.\n * - CN: 关闭图标元素的点击事件\n */\n onClick?: (e: React.MouseEvent<HTMLSpanElement>) => void;\n}\n\n/**\n * - EN: A node that represents a close icon.\n * - CN: 一个关闭图标的节点。\n */\nexport class CloseIconNode extends BaseDecoratorNode<ReactNode, CloseIconNodeProps> {\n __hashId: string;\n\n constructor(props: CloseIconNodeProps & { key?: string }) {\n super(props);\n this.__hashId = `hash-${randomChars(6)}`;\n }\n\n static getType(): string {\n return 'CloseIcon';\n }\n\n static clone(node: CloseIconNode): CloseIconNode {\n return new CloseIconNode({ ...node.__props!, key: node.getKey() });\n }\n\n static importJSON(serializedNode: SerializedCloseIconNode): CloseIconNode {\n return $createCloseIconNode(serializedNode.props);\n }\n\n exportJSON(): SerializedCloseIconNode {\n return {\n ...super.exportJSON(),\n props: this.__props!,\n type: this.getType(),\n version: 1,\n };\n }\n\n createDOM(): HTMLElement {\n const span = document.createElement('span');\n const underlyingProps = this.getUnderlyingProps(this.__props);\n const className = classNames(CLOSE_ICON_CLASSNAME, this.__hashId, underlyingProps?.className);\n updateDomProps(span, { ...underlyingProps, className });\n const stylesheet = document.createElement('style');\n const token = theme.getDesignToken();\n const parentCls = this.__props?.parentClassName ? `.${this.__props.parentClassName}` : '';\n stylesheet.innerHTML = `\n ${\n parentCls\n ? `\n ${parentCls} { \n position: relative;\n }\n `\n : ''\n }\n ${parentCls} .${CLOSE_ICON_CLASSNAME}.${this.__hashId} {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n color: ${token.colorTextDisabled};\n font-size: ${token.fontSizeSM}px;\n line-height: 0;\n z-index: 1;\n opacity: 0;\n cursor: pointer;\n pointer-events: none;\n transition: opacity 0.2s ease;\n }\n ${parentCls}:hover .${CLOSE_ICON_CLASSNAME}.${this.__hashId} {\n opacity: 1;\n pointer-events: auto;\n }\n ${parentCls}:hover .${CLOSE_ICON_CLASSNAME}.${this.__hashId}:hover {\n color: ${token.colorTextSecondary};\n }\n `;\n span.append(stylesheet);\n return span;\n }\n\n updateDOM() {\n return false;\n }\n\n decorate(): ReactNode {\n return <CloseIconComponent node={this} />;\n }\n\n isInline(): boolean {\n return false;\n }\n\n getUnderlyingProps(props: CloseIconNodeProps | undefined): Omit<CloseIconNodeProps, keyof BaseNodeProps> {\n const excludeProps = super.getUnderlyingProps(props);\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { icon, iconClassName, iconStyle, onClick, ...rest } = excludeProps || {};\n /* eslint-enable @typescript-eslint/no-unused-vars */\n return rest;\n }\n}\n\n/**\n * - EN: React decorator component rendered for CloseIconNode.\n * - CN: CloseIconNode 对应的 React 装饰组件。\n *\n * @param node The bound CloseIconNode instance | 关联的 CloseIconNode 实例\n */\nfunction CloseIconComponent({ node }: CloseIconComponentProps): ReactNode {\n const { icon, iconClassName, iconStyle, onClick } = node.__props || {};\n\n const closeIcon = icon ?? (\n <CloseCircleOutlined className={classNames(node.__hashId, iconClassName)} style={iconStyle} onClick={onClick} />\n );\n return closeIcon;\n}\n\n/**\n * - EN: Factory to create a CloseIconNode.\n * - CN: 创建 CloseIconNode 的工厂函数。\n *\n * @param props Props for the CloseIcon node | CloseIcon 节点的属性\n */\nexport function $createCloseIconNode(props: CloseIconNodeProps): CloseIconNode {\n return new CloseIconNode(props);\n}\n\n/**\n * - EN: Type guard to check whether a node is CloseIconNode.\n * - CN: 判断节点是否为 CloseIconNode 的类型守卫。\n *\n * @param node Node to test | 要检测的节点\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function $isCloseIconNode(node: LexicalNode | null | undefined): node is CloseIconNode {\n return node instanceof CloseIconNode;\n}\n\ninterface CloseIconComponentProps {\n node: CloseIconNode;\n}\ntype SerializedCloseIconNode = Spread<\n {\n props: CloseIconNodeProps;\n },\n SerializedLexicalNode\n>;\n"],"mappings":"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"}
|
|
@@ -25,9 +25,7 @@ export declare class DivNode extends BaseElementNode<DivNodeProps> {
|
|
|
25
25
|
exportJSON(): SerializedDivNode;
|
|
26
26
|
exportDOM(): DOMExportOutput;
|
|
27
27
|
isInline(): boolean;
|
|
28
|
-
|
|
29
|
-
setProps(props: DivNodeProps): void;
|
|
30
|
-
private shallowEqual;
|
|
28
|
+
updateProps(props: DivNodeProps): void;
|
|
31
29
|
}
|
|
32
30
|
/**
|
|
33
31
|
* - EN: Factory to create a DivNode.
|
|
@@ -16,7 +16,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) ===
|
|
|
16
16
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
17
17
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
18
18
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
19
|
-
import { updateDomProps } from "../helpers";
|
|
19
|
+
import { shallowEqual, updateDomProps } from "../helpers";
|
|
20
20
|
import { BaseElementNode } from "./base";
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -55,7 +55,7 @@ export var DivNode = /*#__PURE__*/function (_BaseElementNode) {
|
|
|
55
55
|
value: function updateDOM(prevNode, dom) {
|
|
56
56
|
var prevProps = prevNode.__props;
|
|
57
57
|
var currentProps = this.__props;
|
|
58
|
-
var propsChanged = !
|
|
58
|
+
var propsChanged = !shallowEqual(prevProps, currentProps);
|
|
59
59
|
if (propsChanged) {
|
|
60
60
|
updateDomProps(dom, this.getUnderlyingProps(currentProps));
|
|
61
61
|
}
|
|
@@ -85,42 +85,14 @@ export var DivNode = /*#__PURE__*/function (_BaseElementNode) {
|
|
|
85
85
|
return display === 'inline' || display === 'inline-flex' || display === 'inline-block' || display === 'inline-grid' || display === 'inline-table' || display === 'inline-list-item';
|
|
86
86
|
}
|
|
87
87
|
}, {
|
|
88
|
-
key: "
|
|
89
|
-
value: function
|
|
90
|
-
var _this$__props2;
|
|
91
|
-
return (_this$__props2 = this.__props) === null || _this$__props2 === void 0 ? void 0 : _this$__props2[key];
|
|
92
|
-
}
|
|
93
|
-
}, {
|
|
94
|
-
key: "setProps",
|
|
95
|
-
value: function setProps(props) {
|
|
88
|
+
key: "updateProps",
|
|
89
|
+
value: function updateProps(props) {
|
|
96
90
|
var _writable$__props;
|
|
97
91
|
var writable = this.getWritable();
|
|
98
92
|
writable.__props = _objectSpread(_objectSpread(_objectSpread({}, writable.__props), props), {}, {
|
|
99
93
|
style: _objectSpread(_objectSpread({}, (_writable$__props = writable.__props) === null || _writable$__props === void 0 ? void 0 : _writable$__props.style), props.style)
|
|
100
94
|
});
|
|
101
95
|
}
|
|
102
|
-
|
|
103
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
-
}, {
|
|
105
|
-
key: "shallowEqual",
|
|
106
|
-
value: function shallowEqual(obj1, obj2) {
|
|
107
|
-
if (obj1 === obj2) return true;
|
|
108
|
-
if (!obj1 || !obj2) return false;
|
|
109
|
-
var keys1 = Object.keys(obj1);
|
|
110
|
-
var keys2 = Object.keys(obj2);
|
|
111
|
-
if (keys1.length !== keys2.length) return false;
|
|
112
|
-
for (var _i = 0, _keys = keys1; _i < _keys.length; _i++) {
|
|
113
|
-
var key = _keys[_i];
|
|
114
|
-
if (key === 'style') {
|
|
115
|
-
// - EN: Special handling for style objects.
|
|
116
|
-
// - CN: 特殊处理 style 对象。
|
|
117
|
-
if (!this.shallowEqual(obj1[key], obj2[key])) return false;
|
|
118
|
-
} else if (obj1[key] !== obj2[key]) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return true;
|
|
123
|
-
}
|
|
124
96
|
}], [{
|
|
125
97
|
key: "getType",
|
|
126
98
|
value: function getType() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["updateDomProps","BaseElementNode","DivNode","_BaseElementNode","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","getForceDisplay","undefined","createDOM","div","document","createElement","domProps","getUnderlyingProps","__props","updateDOM","prevNode","dom","prevProps","currentProps","propsChanged","
|
|
1
|
+
{"version":3,"names":["shallowEqual","updateDomProps","BaseElementNode","DivNode","_BaseElementNode","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","getForceDisplay","undefined","createDOM","div","document","createElement","domProps","getUnderlyingProps","__props","updateDOM","prevNode","dom","prevProps","currentProps","propsChanged","exportJSON","_objectSpread","_get","_getPrototypeOf","prototype","call","props","type","getType","exportDOM","element","isInline","_this$__props$style$d","_this$__props","display","style","updateProps","_writable$__props","writable","getWritable","clone","node","getKey","importDOM","conversion","convertDivElement","priority","importJSON","serializedNode","$createDivNode","domNode","nodeName","$isDivNode"],"sources":["../../../../src/components/Lexical/nodes/DivNode.tsx"],"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 { shallowEqual, updateDomProps } from '../helpers';\nimport { BaseElementNode, type BaseElementProps } from './base';\n\n/**\n * - EN: Props for the DivNode, combining DOM div attributes and element behavior flags.\n * - CN: DivNode 的属性,包含 DOM div 属性与元素行为标记。\n */\nexport interface DivNodeProps extends HtmlHTMLAttributes<HTMLDivElement>, BaseElementProps {}\n\nexport type SerializedDivNode = Spread<\n {\n props?: DivNodeProps;\n },\n SerializedElementNode\n>;\n\n/**\n * - EN: Lexical element node that renders a DOM div with controlled props.\n * - CN: 渲染为 DOM div 且可控制属性的 Lexical 元素节点。\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 = !shallowEqual(prevProps, currentProps);\n if (propsChanged) {\n updateDomProps(dom, this.getUnderlyingProps(currentProps));\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 ?? 'block';\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 updateProps(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/**\n * - EN: Convert a DOM node to a DivNode during import.\n * - CN: 在导入时将 DOM 节点转换为 DivNode。\n *\n * @param domNode Source DOM node | 源 DOM 节点\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/**\n * - EN: Factory to create a DivNode.\n * - CN: 创建 DivNode 的工厂函数。\n *\n * @param props Props for the DivNode | DivNode 的属性\n */\nexport function $createDivNode(props?: DivNodeProps): DivNode {\n return new DivNode(props);\n}\n/**\n * - EN: Type guard to check if a node is DivNode.\n * - CN: 判断节点是否为 DivNode 的类型守卫。\n *\n * @param node Node to test | 要检测的节点\n */\nexport function $isDivNode(node: LexicalNode | null | undefined): node is DivNode {\n return node instanceof DivNode;\n}\n"],"mappings":"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"}
|
|
@@ -37,14 +37,14 @@ export declare class SelectNode<ValueType = any, OptionType extends BaseOptionTy
|
|
|
37
37
|
static importJSON<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(serializedNode: SerializedSelectNode<ValueType, OptionType>): SelectNode<ValueType, OptionType>;
|
|
38
38
|
exportJSON(): SerializedSelectNode<ValueType, OptionType>;
|
|
39
39
|
createDOM(): HTMLElement;
|
|
40
|
-
updateDOM():
|
|
40
|
+
updateDOM(prevNode: this, dom: HTMLElement): boolean;
|
|
41
41
|
decorate(): ReactNode;
|
|
42
42
|
isInline(): boolean;
|
|
43
43
|
getTextContent(): string;
|
|
44
44
|
getValue(): ValueType | undefined;
|
|
45
45
|
setValue(value: ValueType | undefined): void;
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
getProp(propName: keyof SelectNodeProps<ValueType, OptionType>): SelectNodeProps<ValueType, OptionType>[typeof propName];
|
|
47
|
+
updateProps(props: Partial<SelectNodeProps<ValueType, OptionType>>): void;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* - EN: Factory to create a SelectNode.
|
|
@@ -28,7 +28,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
28
28
|
import { useCallback } from 'react';
|
|
29
29
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
30
30
|
import { Select } from 'antd';
|
|
31
|
-
import { insertNodeAtCursor, updateDomStyle } from "../helpers";
|
|
31
|
+
import { insertNodeAtCursor, shallowEqual, updateDomStyle } from "../helpers";
|
|
32
32
|
import { BaseDecoratorNode } from "./base";
|
|
33
33
|
|
|
34
34
|
/**
|
|
@@ -67,8 +67,9 @@ export var SelectNode = /*#__PURE__*/function (_BaseDecoratorNode) {
|
|
|
67
67
|
}
|
|
68
68
|
}, {
|
|
69
69
|
key: "updateDOM",
|
|
70
|
-
value: function updateDOM() {
|
|
71
|
-
|
|
70
|
+
value: function updateDOM(prevNode, dom) {
|
|
71
|
+
var propsChanged = !shallowEqual(prevNode.__props, this.__props);
|
|
72
|
+
return propsChanged;
|
|
72
73
|
}
|
|
73
74
|
}, {
|
|
74
75
|
key: "decorate",
|
|
@@ -116,14 +117,14 @@ export var SelectNode = /*#__PURE__*/function (_BaseDecoratorNode) {
|
|
|
116
117
|
writable.__value = value;
|
|
117
118
|
}
|
|
118
119
|
}, {
|
|
119
|
-
key: "
|
|
120
|
-
value: function
|
|
120
|
+
key: "getProp",
|
|
121
|
+
value: function getProp(propName) {
|
|
121
122
|
var _this$__props5;
|
|
122
123
|
return (_this$__props5 = this.__props) === null || _this$__props5 === void 0 ? void 0 : _this$__props5[propName];
|
|
123
124
|
}
|
|
124
125
|
}, {
|
|
125
|
-
key: "
|
|
126
|
-
value: function
|
|
126
|
+
key: "updateProps",
|
|
127
|
+
value: function updateProps(props) {
|
|
127
128
|
var writable = this.getWritable();
|
|
128
129
|
writable.__props = _objectSpread(_objectSpread({}, writable.__props), props);
|
|
129
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useLexicalComposerContext","Select","insertNodeAtCursor","updateDomStyle","BaseDecoratorNode","jsx","_jsx","SelectNode","_BaseDecoratorNode","_inherits","_super","_createSuper","props","_props$defaultValue","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","__value","defaultValue","undefined","_createClass","key","value","exportJSON","_objectSpread","_get","_getPrototypeOf","prototype","__props","type","getType","version","createDOM","_this$__props","span","document","createElement","containerStyle","updateDOM","decorate","SelectComponent","node","isInline","getTextContent","_this$__props2","_this2","_this$__props4","content","valueContent","String","textContentMode","_this$__props3","option","options","find","opt","label","spaceAround","concat","getValue","setValue","writable","getWritable","getPropValue","propName","_this$__props5","setProps","clone","getKey","importJSON","serializedNode","$createSelectNode","_ref","underlyingProps","getUnderlyingProps","selectProps","_objectWithoutProperties","_excluded","_useLexicalComposerCo","_useLexicalComposerCo2","_slicedToArray","editor","handleChange","update","_node$__props","_node$__props$onChang","onChange","handleClear","_node$__props2","_node$__props2$onClea","onClear","$isSelectNode","$insertSelectNode","selectNode","paddingLeft","paddingRight"],"sources":["../../../../src/components/Lexical/nodes/SelectNode.tsx"],"sourcesContent":["import { type CSSProperties, type ReactNode, useCallback } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { Select } from 'antd';\nimport type { SelectProps } from 'antd';\nimport type { BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { LexicalEditor, LexicalNode, SerializedLexicalNode, Spread } from 'lexical';\nimport { insertNodeAtCursor, updateDomStyle } from '../helpers';\nimport type { BaseDecoratorNodeProps } from './base';\nimport { BaseDecoratorNode } from './base';\n\n/**\n * - EN: Props for SelectNode, extending antd Select props plus behavior flags.\n * - CN: SelectNode 的属性,基于 antd Select 属性并附加行为标记。\n */\nexport interface SelectNodeProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> extends SelectProps<ValueType, OptionType>,\n BaseDecoratorNodeProps {\n /**\n * - EN: When reading editor textContent, whether to use option label or value. Default `value`.\n * - CN: 在获取 editor 的 textContent 时,使用选项的 label 还是 value。默认 `value`。\n * - label: use option label as text\n * - value: use option value as text\n */\n textContentMode?: 'label' | 'value';\n /**\n * - EN: Add a space around textContent. Default `true`.\n * - CN: 是否在 textContent 两边添加一个空格,默认 `true`。\n */\n spaceAround?: boolean;\n /**\n * - EN: Container DOM style.\n * - CN: 容器样式。\n */\n containerStyle?: CSSProperties;\n}\n\nexport class SelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> extends BaseDecoratorNode<ReactNode, SelectNodeProps<ValueType, OptionType>> {\n __value: ValueType | undefined;\n\n constructor(props?: SelectNodeProps<ValueType, OptionType> & { key?: string }) {\n super(props);\n this.__value = props?.defaultValue ?? undefined;\n }\n static getType(): string {\n return 'antd.Select';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static clone<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(\n node: SelectNode<ValueType, OptionType>\n ): SelectNode<ValueType, OptionType> {\n return new SelectNode<ValueType, OptionType>({ ...node.__props, key: node.getKey() });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static importJSON<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(\n serializedNode: SerializedSelectNode<ValueType, OptionType>\n ): SelectNode<ValueType, OptionType> {\n return $createSelectNode(serializedNode.props);\n }\n\n exportJSON(): SerializedSelectNode<ValueType, OptionType> {\n return {\n ...super.exportJSON(),\n props: this.__props,\n type: this.getType(),\n version: 1,\n };\n }\n\n createDOM(): HTMLElement {\n const span = document.createElement('span');\n updateDomStyle(span, this.__props?.containerStyle);\n return span;\n }\n\n updateDOM(): false {\n return false;\n }\n\n decorate(): ReactNode {\n return <SelectComponent node={this} />;\n }\n\n isInline(): boolean {\n return true;\n }\n\n getTextContent(): string {\n let content: string;\n const valueContent = this.__value ? String(this.__value) : '';\n if (this.__props?.textContentMode === 'label') {\n const option = this.__props?.options?.find((opt) => opt.value === this.__value);\n content = option?.label ? String(option.label) : valueContent;\n } else {\n content = valueContent;\n }\n if (this.__props?.spaceAround !== false) {\n return ` ${content} `;\n }\n return content;\n }\n\n getValue(): ValueType | undefined {\n return this.__value;\n }\n\n setValue(value: ValueType | undefined): void {\n const writable = this.getWritable();\n writable.__value = value;\n }\n\n getPropValue(\n propName: keyof SelectNodeProps<ValueType, OptionType>\n ): SelectNodeProps<ValueType, OptionType>[typeof propName] {\n return this.__props?.[propName];\n }\n\n setProps(props: Partial<SelectNodeProps<ValueType, OptionType>>): void {\n const writable = this.getWritable();\n writable.__props = {\n ...writable.__props,\n ...props,\n };\n }\n}\n\n/**\n * - EN: React decorator component rendered for SelectNode.\n * - CN: SelectNode 对应的 React 装饰组件。\n *\n * @param node The bound SelectNode instance | 关联的 SelectNode 实例\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction SelectComponent<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>({\n node,\n}: SelectComponentProps<ValueType, OptionType>): ReactNode {\n const underlyingProps = node.getUnderlyingProps(node.__props);\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { textContentMode, spaceAround, containerStyle, ...selectProps } = underlyingProps;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n const [editor] = useLexicalComposerContext();\n\n const handleChange = useCallback<NonNullable<SelectNodeProps<ValueType, OptionType>['onChange']>>(\n (value, options) => {\n editor.update(() => {\n node.setValue(value);\n node.__props?.onChange?.(value, options);\n });\n },\n [editor, node]\n );\n\n const handleClear = useCallback(() => {\n editor.update(() => {\n node.setValue(undefined);\n node.__props?.onClear?.();\n });\n }, [editor, node]);\n\n return <Select {...selectProps} value={node.getValue()} onChange={handleChange} onClear={handleClear} />;\n}\n\n/**\n * - EN: Factory to create a SelectNode.\n * - CN: 创建 SelectNode 的工厂函数。\n *\n * @param props Props for the Select node | Select 节点的属性\n */\nexport function $createSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n>(props?: SelectNodeProps<ValueType, OptionType>): SelectNode<ValueType, OptionType> {\n return new SelectNode<ValueType, OptionType>(props);\n}\n\n/**\n * - EN: Type guard to check whether a node is SelectNode.\n * - CN: 判断节点是否为 SelectNode 的类型守卫。\n *\n * @param node Node to test | 要检测的节点\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function $isSelectNode(node: LexicalNode | null | undefined): node is SelectNode<any, any> {\n return node instanceof SelectNode;\n}\n\n/**\n * - EN: Insert a SelectNode at the current cursor position.\n * - CN: 在当前光标位置插入一个 SelectNode。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param props Props for the Select node | Select 节点的属性\n */\nexport function $insertSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n>(editor: LexicalEditor, props: SelectNodeProps<ValueType, OptionType>): void {\n editor.update(() => {\n const selectNode = $createSelectNode<ValueType, OptionType>({\n ...props,\n containerStyle: {\n paddingLeft: '8px',\n paddingRight: '8px',\n ...props.containerStyle,\n },\n });\n insertNodeAtCursor(editor, selectNode);\n });\n}\n\n/**\n * - EN: Props passed to the Select decorator component.\n * - CN: 传递给 Select 装饰组件的属性。\n */\ninterface SelectComponentProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> {\n node: SelectNode<ValueType, OptionType>;\n}\ntype SerializedSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> = Spread<\n {\n props?: SelectNodeProps<ValueType, OptionType>;\n },\n SerializedLexicalNode\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useLexicalComposerContext","Select","insertNodeAtCursor","shallowEqual","updateDomStyle","BaseDecoratorNode","jsx","_jsx","SelectNode","_BaseDecoratorNode","_inherits","_super","_createSuper","props","_props$defaultValue","_this","_classCallCheck","call","_defineProperty","_assertThisInitialized","__value","defaultValue","undefined","_createClass","key","value","exportJSON","_objectSpread","_get","_getPrototypeOf","prototype","__props","type","getType","version","createDOM","_this$__props","span","document","createElement","containerStyle","updateDOM","prevNode","dom","propsChanged","decorate","SelectComponent","node","isInline","getTextContent","_this$__props2","_this2","_this$__props4","content","valueContent","String","textContentMode","_this$__props3","option","options","find","opt","label","spaceAround","concat","getValue","setValue","writable","getWritable","getProp","propName","_this$__props5","updateProps","clone","getKey","importJSON","serializedNode","$createSelectNode","_ref","underlyingProps","getUnderlyingProps","selectProps","_objectWithoutProperties","_excluded","_useLexicalComposerCo","_useLexicalComposerCo2","_slicedToArray","editor","handleChange","update","_node$__props","_node$__props$onChang","onChange","handleClear","_node$__props2","_node$__props2$onClea","onClear","$isSelectNode","$insertSelectNode","selectNode","paddingLeft","paddingRight"],"sources":["../../../../src/components/Lexical/nodes/SelectNode.tsx"],"sourcesContent":["import { type CSSProperties, type ReactNode, useCallback } from 'react';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { Select } from 'antd';\nimport type { SelectProps } from 'antd';\nimport type { BaseOptionType, DefaultOptionType } from 'antd/es/select';\nimport type { LexicalEditor, LexicalNode, SerializedLexicalNode, Spread } from 'lexical';\nimport { insertNodeAtCursor, shallowEqual, updateDomStyle } from '../helpers';\nimport type { BaseDecoratorNodeProps } from './base';\nimport { BaseDecoratorNode } from './base';\n\n/**\n * - EN: Props for SelectNode, extending antd Select props plus behavior flags.\n * - CN: SelectNode 的属性,基于 antd Select 属性并附加行为标记。\n */\nexport interface SelectNodeProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> extends SelectProps<ValueType, OptionType>,\n BaseDecoratorNodeProps {\n /**\n * - EN: When reading editor textContent, whether to use option label or value. Default `value`.\n * - CN: 在获取 editor 的 textContent 时,使用选项的 label 还是 value。默认 `value`。\n * - label: use option label as text\n * - value: use option value as text\n */\n textContentMode?: 'label' | 'value';\n /**\n * - EN: Add a space around textContent. Default `true`.\n * - CN: 是否在 textContent 两边添加一个空格,默认 `true`。\n */\n spaceAround?: boolean;\n /**\n * - EN: Container DOM style.\n * - CN: 容器样式。\n */\n containerStyle?: CSSProperties;\n}\n\nexport class SelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> extends BaseDecoratorNode<ReactNode, SelectNodeProps<ValueType, OptionType>> {\n __value: ValueType | undefined;\n\n constructor(props?: SelectNodeProps<ValueType, OptionType> & { key?: string }) {\n super(props);\n this.__value = props?.defaultValue ?? undefined;\n }\n static getType(): string {\n return 'antd.Select';\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static clone<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(\n node: SelectNode<ValueType, OptionType>\n ): SelectNode<ValueType, OptionType> {\n return new SelectNode<ValueType, OptionType>({ ...node.__props, key: node.getKey() });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static importJSON<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>(\n serializedNode: SerializedSelectNode<ValueType, OptionType>\n ): SelectNode<ValueType, OptionType> {\n return $createSelectNode(serializedNode.props);\n }\n\n exportJSON(): SerializedSelectNode<ValueType, OptionType> {\n return {\n ...super.exportJSON(),\n props: this.__props,\n type: this.getType(),\n version: 1,\n };\n }\n\n createDOM(): HTMLElement {\n const span = document.createElement('span');\n updateDomStyle(span, this.__props?.containerStyle);\n return span;\n }\n\n updateDOM(prevNode: this, dom: HTMLElement): boolean {\n const propsChanged = !shallowEqual(prevNode.__props, this.__props);\n return propsChanged;\n }\n\n decorate(): ReactNode {\n return <SelectComponent node={this} />;\n }\n\n isInline(): boolean {\n return true;\n }\n\n getTextContent(): string {\n let content: string;\n const valueContent = this.__value ? String(this.__value) : '';\n if (this.__props?.textContentMode === 'label') {\n const option = this.__props?.options?.find((opt) => opt.value === this.__value);\n content = option?.label ? String(option.label) : valueContent;\n } else {\n content = valueContent;\n }\n if (this.__props?.spaceAround !== false) {\n return ` ${content} `;\n }\n return content;\n }\n\n getValue(): ValueType | undefined {\n return this.__value;\n }\n\n setValue(value: ValueType | undefined): void {\n const writable = this.getWritable();\n writable.__value = value;\n }\n\n getProp(\n propName: keyof SelectNodeProps<ValueType, OptionType>\n ): SelectNodeProps<ValueType, OptionType>[typeof propName] {\n return this.__props?.[propName];\n }\n\n updateProps(props: Partial<SelectNodeProps<ValueType, OptionType>>): void {\n const writable = this.getWritable();\n writable.__props = {\n ...writable.__props,\n ...props,\n };\n }\n}\n\n/**\n * - EN: React decorator component rendered for SelectNode.\n * - CN: SelectNode 对应的 React 装饰组件。\n *\n * @param node The bound SelectNode instance | 关联的 SelectNode 实例\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction SelectComponent<ValueType = any, OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType>({\n node,\n}: SelectComponentProps<ValueType, OptionType>): ReactNode {\n const underlyingProps = node.getUnderlyingProps(node.__props);\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { textContentMode, spaceAround, containerStyle, ...selectProps } = underlyingProps;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n const [editor] = useLexicalComposerContext();\n\n const handleChange = useCallback<NonNullable<SelectNodeProps<ValueType, OptionType>['onChange']>>(\n (value, options) => {\n editor.update(() => {\n node.setValue(value);\n node.__props?.onChange?.(value, options);\n });\n },\n [editor, node]\n );\n\n const handleClear = useCallback(() => {\n editor.update(() => {\n node.setValue(undefined);\n node.__props?.onClear?.();\n });\n }, [editor, node]);\n\n return <Select {...selectProps} value={node.getValue()} onChange={handleChange} onClear={handleClear} />;\n}\n\n/**\n * - EN: Factory to create a SelectNode.\n * - CN: 创建 SelectNode 的工厂函数。\n *\n * @param props Props for the Select node | Select 节点的属性\n */\nexport function $createSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n>(props?: SelectNodeProps<ValueType, OptionType>): SelectNode<ValueType, OptionType> {\n return new SelectNode<ValueType, OptionType>(props);\n}\n\n/**\n * - EN: Type guard to check whether a node is SelectNode.\n * - CN: 判断节点是否为 SelectNode 的类型守卫。\n *\n * @param node Node to test | 要检测的节点\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function $isSelectNode(node: LexicalNode | null | undefined): node is SelectNode<any, any> {\n return node instanceof SelectNode;\n}\n\n/**\n * - EN: Insert a SelectNode at the current cursor position.\n * - CN: 在当前光标位置插入一个 SelectNode。\n *\n * @param editor LexicalEditor instance | LexicalEditor 实例\n * @param props Props for the Select node | Select 节点的属性\n */\nexport function $insertSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n>(editor: LexicalEditor, props: SelectNodeProps<ValueType, OptionType>): void {\n editor.update(() => {\n const selectNode = $createSelectNode<ValueType, OptionType>({\n ...props,\n containerStyle: {\n paddingLeft: '8px',\n paddingRight: '8px',\n ...props.containerStyle,\n },\n });\n insertNodeAtCursor(editor, selectNode);\n });\n}\n\n/**\n * - EN: Props passed to the Select decorator component.\n * - CN: 传递给 Select 装饰组件的属性。\n */\ninterface SelectComponentProps<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> {\n node: SelectNode<ValueType, OptionType>;\n}\ntype SerializedSelectNode<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ValueType = any,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,\n> = Spread<\n {\n props?: SelectNodeProps<ValueType, OptionType>;\n },\n SerializedLexicalNode\n>;\n"],"mappings":"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"}
|
|
@@ -74,6 +74,8 @@ export declare class BaseElementNode<P extends BaseElementProps> extends Element
|
|
|
74
74
|
canBeEmpty(): boolean;
|
|
75
75
|
canInsertTextBefore(): boolean;
|
|
76
76
|
canInsertTextAfter(): boolean;
|
|
77
|
+
getProp(propName: keyof P): P[typeof propName];
|
|
78
|
+
updateProps(props: Partial<P>): void;
|
|
77
79
|
/**
|
|
78
80
|
* - EN: Strip element-specific flags and return DOM props.
|
|
79
81
|
* - CN: 去除元素特有的标记并返回 DOM 属性。
|
|
@@ -92,6 +94,8 @@ export declare class BaseDecoratorNode<T, P extends BaseDecoratorNodeProps> exte
|
|
|
92
94
|
constructor(props?: P & {
|
|
93
95
|
key?: string;
|
|
94
96
|
});
|
|
97
|
+
getProp(propName: keyof P): P[typeof propName];
|
|
98
|
+
updateProps(props: Partial<P>): void;
|
|
95
99
|
/**
|
|
96
100
|
* - EN: Strip decorator-specific flags and return DOM props.
|
|
97
101
|
* - CN: 去除装饰器特有的标记并返回 DOM 属性。
|
|
@@ -4,6 +4,8 @@ var _excluded = ["canBeRemoved", "canBeReplaced"],
|
|
|
4
4
|
_excluded4 = ["key"];
|
|
5
5
|
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); }
|
|
6
6
|
function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError("Cannot destructure " + obj); }
|
|
7
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
9
|
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
8
10
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
9
11
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
@@ -138,6 +140,18 @@ export var BaseElementNode = /*#__PURE__*/function (_ElementNode) {
|
|
|
138
140
|
var _this$__props$canInse2, _this$__props5;
|
|
139
141
|
return (_this$__props$canInse2 = (_this$__props5 = this.__props) === null || _this$__props5 === void 0 ? void 0 : _this$__props5.canInsertTextAfter) !== null && _this$__props$canInse2 !== void 0 ? _this$__props$canInse2 : true;
|
|
140
142
|
}
|
|
143
|
+
}, {
|
|
144
|
+
key: "getProp",
|
|
145
|
+
value: function getProp(propName) {
|
|
146
|
+
var _this$__props6;
|
|
147
|
+
return (_this$__props6 = this.__props) === null || _this$__props6 === void 0 ? void 0 : _this$__props6[propName];
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
key: "updateProps",
|
|
151
|
+
value: function updateProps(props) {
|
|
152
|
+
var writable = this.getWritable();
|
|
153
|
+
writable.__props = _objectSpread(_objectSpread({}, writable.__props), props);
|
|
154
|
+
}
|
|
141
155
|
|
|
142
156
|
/**
|
|
143
157
|
* - EN: Strip element-specific flags and return DOM props.
|
|
@@ -195,14 +209,26 @@ export var BaseDecoratorNode = /*#__PURE__*/function (_DecoratorNode) {
|
|
|
195
209
|
});
|
|
196
210
|
return _this3;
|
|
197
211
|
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* - EN: Strip decorator-specific flags and return DOM props.
|
|
201
|
-
* - CN: 去除装饰器特有的标记并返回 DOM 属性。
|
|
202
|
-
*
|
|
203
|
-
* @param props Decorator props including flags | 含标记的装饰器属性
|
|
204
|
-
*/
|
|
205
212
|
_createClass(BaseDecoratorNode, [{
|
|
213
|
+
key: "getProp",
|
|
214
|
+
value: function getProp(propName) {
|
|
215
|
+
var _this$__props7;
|
|
216
|
+
return (_this$__props7 = this.__props) === null || _this$__props7 === void 0 ? void 0 : _this$__props7[propName];
|
|
217
|
+
}
|
|
218
|
+
}, {
|
|
219
|
+
key: "updateProps",
|
|
220
|
+
value: function updateProps(props) {
|
|
221
|
+
var writable = this.getWritable();
|
|
222
|
+
writable.__props = _objectSpread(_objectSpread({}, writable.__props), props);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* - EN: Strip decorator-specific flags and return DOM props.
|
|
227
|
+
* - CN: 去除装饰器特有的标记并返回 DOM 属性。
|
|
228
|
+
*
|
|
229
|
+
* @param props Decorator props including flags | 含标记的装饰器属性
|
|
230
|
+
*/
|
|
231
|
+
}, {
|
|
206
232
|
key: "getUnderlyingProps",
|
|
207
233
|
value: function getUnderlyingProps(props) {
|
|
208
234
|
var baseProps = this.__base.getUnderlyingProps(props !== null && props !== void 0 ? props : {});
|