diff --git a/.flowconfig b/.flowconfig index 12292fed31d..f0b1054338d 100644 --- a/.flowconfig +++ b/.flowconfig @@ -18,11 +18,6 @@ exact_by_default=true module.name_mapper='^lexical$' -> '/packages/lexical/flow/Lexical.js.flow' -module.name_mapper='^lexical/LinkNode' -> '/packages/lexical/flow/LexicalLinkNode.js.flow' -module.name_mapper='^lexical/AutoLinkNode' -> '/packages/lexical/flow/LexicalAutoLinkNode.js.flow' -module.name_mapper='^lexical/OverflowNode' -> '/packages/lexical/flow/LexicalOverflowNode.js.flow' -module.name_mapper='^lexical/ExtendedNodes' -> '/packages/lexical/flow/LexicalExtendedNodes.js.flow' - module.name_mapper='^@lexical/list' -> '/packages/lexical-list/flow/LexicalList.js.flow' module.name_mapper='^@lexical/table' -> '/packages/lexical-table/flow/LexicalTable.js.flow' module.name_mapper='^@lexical/file' -> '/packages/lexical-file/flow/LexicalFile.js.flow' @@ -35,6 +30,8 @@ module.name_mapper='^@lexical/code' -> '/packages/lexical-code/src module.name_mapper='^@lexical/plain-text' -> '/packages/lexical-plain-text/src/index.js' module.name_mapper='^@lexical/rich-text' -> '/packages/lexical-rich-text/src/index.js' module.name_mapper='^@lexical/dragon' -> '/packages/lexical-dragon/src/index.js' +module.name_mapper='^@lexical/link' -> '/packages/lexical-link/src/index.js' +module.name_mapper='^@lexical/overflow' -> '/packages/lexical-overflow/src/index.js' module.name_mapper='^@lexical/react/DEPRECATED_useLexicalEditor' -> '/packages/lexical-react/src/DEPRECATED_useLexicalEditor.js' module.name_mapper='^@lexical/react/DEPRECATED_useLexicalRichText' -> '/packages/lexical-react/src/DEPRECATED_useLexicalRichText.js' diff --git a/jest.config.js b/jest.config.js index 39fba2dc1a4..59c3467b136 100644 --- a/jest.config.js +++ b/jest.config.js @@ -27,8 +27,11 @@ module.exports = { '^@lexical/dragon$': '/packages/lexical-dragon/src/index.js', '^@lexical/file$': '/packages/lexical-file/src/index.js', '^@lexical/hashtag$': '/packages/lexical-hashtag/src/index.js', + '^@lexical/link$': '/packages/lexical-link/src/index.js', '^@lexical/list$': '/packages/lexical-list/src/index.js', '^@lexical/offset$': '/packages/lexical-offset/src/index.js', + '^@lexical/overflow$': + '/packages/lexical-overflow/src/index.js', '^@lexical/plain-text$': '/packages/lexical-plain-text/src/index.js', '^@lexical/react/DEPRECATED_useLexicalRichText$': @@ -68,14 +71,6 @@ module.exports = { '^@lexical/utils$': '/packages/lexical-utils/src/index.js', '^@lexical/yjs$': '/packages/lexical-yjs/src/index.js', '^lexical$': '/packages/lexical/src/index.js', - '^lexical/AutoLinkNode$': - '/packages/lexical/src/nodes/extended/LexicalAutoLinkNode.js', - '^lexical/ExtendedNodes$': - '/packages/lexical/src/nodes/extended/LexicalExtendedNodes.js', - '^lexical/LinkNode$': - '/packages/lexical/src/nodes/extended/LexicalLinkNode.js', - '^lexical/OverflowNode$': - '/packages/lexical/src/nodes/extended/LexicalOverflowNode.js', '^shared/canUseDOM$': '/packages/shared/src/canUseDOM.js', '^shared/environment$': '/packages/shared/src/environment.js', '^shared/getDOMSelection$': diff --git a/package-lock.json b/package-lock.json index 9caba8bee98..2e6cce5eeeb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4616,6 +4616,10 @@ "resolved": "packages/lexical-hashtag", "link": true }, + "node_modules/@lexical/link": { + "resolved": "packages/lexical-link", + "link": true + }, "node_modules/@lexical/list": { "resolved": "packages/lexical-list", "link": true @@ -4624,6 +4628,10 @@ "resolved": "packages/lexical-offset", "link": true }, + "node_modules/@lexical/overflow": { + "resolved": "packages/lexical-overflow", + "link": true + }, "node_modules/@lexical/plain-text": { "resolved": "packages/lexical-plain-text", "link": true @@ -31753,6 +31761,7 @@ } }, "packages/lexical-dragon": { + "name": "@lexical/dragon", "version": "0.1.16", "license": "MIT", "peerDependencies": { @@ -31778,6 +31787,16 @@ "lexical": "0.1.16" } }, + "packages/lexical-link": { + "version": "0.1.16", + "license": "MIT", + "dependencies": { + "@lexical/utils": "0.1.16" + }, + "peerDependencies": { + "lexical": "0.1.16" + } + }, "packages/lexical-list": { "name": "@lexical/list", "version": "0.1.16", @@ -31797,10 +31816,20 @@ "lexical": "0.1.16" } }, + "packages/lexical-overflow": { + "version": "0.1.16", + "license": "MIT", + "peerDependencies": { + "lexical": "0.1.16" + } + }, "packages/lexical-plain-text": { + "name": "@lexical/plain-text", "version": "0.1.16", "license": "MIT", "peerDependencies": { + "@lexical/clipboard": "0.1.16", + "@lexical/selection": "0.1.16", "lexical": "0.1.16" } }, @@ -31812,7 +31841,9 @@ "@lexical/code": "0.1.16", "@lexical/file": "0.1.16", "@lexical/hashtag": "0.1.16", + "@lexical/link": "0.1.16", "@lexical/list": "0.1.16", + "@lexical/overflow": "0.1.16", "@lexical/plain-text": "0.1.16", "@lexical/react": "0.1.16", "@lexical/rich-text": "0.1.16", @@ -31843,7 +31874,9 @@ "@lexical/code": "0.1.16", "@lexical/dragon": "0.1.16", "@lexical/hashtag": "0.1.16", + "@lexical/link": "0.1.16", "@lexical/list": "0.1.16", + "@lexical/overflow": "0.1.16", "@lexical/plain-text": "0.1.16", "@lexical/rich-text": "0.1.16", "@lexical/selection": "0.1.16", @@ -31859,9 +31892,13 @@ } }, "packages/lexical-rich-text": { + "name": "@lexical/rich-text", "version": "0.1.16", "license": "MIT", "peerDependencies": { + "@lexical/clipboard": "0.1.16", + "@lexical/selection": "0.1.16", + "@lexical/utils": "0.1.16", "lexical": "0.1.16" } }, @@ -35685,6 +35722,12 @@ "@lexical/utils": "0.1.16" } }, + "@lexical/link": { + "version": "file:packages/lexical-link", + "requires": { + "@lexical/utils": "0.1.16" + } + }, "@lexical/list": { "version": "file:packages/lexical-list", "requires": { @@ -35694,6 +35737,9 @@ "@lexical/offset": { "version": "file:packages/lexical-offset" }, + "@lexical/overflow": { + "version": "file:packages/lexical-overflow" + }, "@lexical/plain-text": { "version": "file:packages/lexical-plain-text" }, @@ -35704,7 +35750,9 @@ "@lexical/code": "0.1.16", "@lexical/dragon": "0.1.16", "@lexical/hashtag": "0.1.16", + "@lexical/link": "0.1.16", "@lexical/list": "0.1.16", + "@lexical/overflow": "0.1.16", "@lexical/plain-text": "0.1.16", "@lexical/rich-text": "0.1.16", "@lexical/selection": "0.1.16", @@ -36308,7 +36356,7 @@ "open": "^8.3.0", "pirates": "^4.0.1", "pixelmatch": "^5.2.1", - "playwright-core": "=1.17.0-next-alpha-nov-5-2021", + "playwright-core": "1.16.0-next-alpha-trueadm-fork", "pngjs": "^5.0.0", "rimraf": "^3.0.2", "source-map-support": "^0.4.18", @@ -46980,7 +47028,9 @@ "@lexical/code": "0.1.16", "@lexical/file": "0.1.16", "@lexical/hashtag": "0.1.16", + "@lexical/link": "0.1.16", "@lexical/list": "0.1.16", + "@lexical/overflow": "0.1.16", "@lexical/plain-text": "0.1.16", "@lexical/react": "0.1.16", "@lexical/rich-text": "0.1.16", diff --git a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalCodeNode.test.js b/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.js similarity index 97% rename from packages/lexical/src/nodes/extended/__tests__/unit/LexicalCodeNode.test.js rename to packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.js index 5341f491b8b..31e04690fef 100644 --- a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalCodeNode.test.js +++ b/packages/lexical-code/src/__tests__/unit/LexicalCodeNode.test.js @@ -13,8 +13,7 @@ import { $getRoot, $getSelection, } from 'lexical'; - -import {initializeUnitTest} from '../../../../../../lexical/src/__tests__/utils'; +import {initializeUnitTest} from 'lexical/src/__tests__/utils'; // No idea why we suddenly need to do this, but it fixes the tests // with latest experimental React version. diff --git a/packages/lexical-hashtag/package.json b/packages/lexical-hashtag/package.json index 79cd4b92443..3f0cd7f02db 100644 --- a/packages/lexical-hashtag/package.json +++ b/packages/lexical-hashtag/package.json @@ -9,7 +9,6 @@ "lexical", "editor", "rich-text", - "table", "hashtag" ], "license": "MIT", diff --git a/packages/lexical/flow/LexicalExtendedNodes.js.flow b/packages/lexical-link/LexicalLink.js similarity index 64% rename from packages/lexical/flow/LexicalExtendedNodes.js.flow rename to packages/lexical-link/LexicalLink.js index ee8dce10e85..5cd5c91325a 100644 --- a/packages/lexical/flow/LexicalExtendedNodes.js.flow +++ b/packages/lexical-link/LexicalLink.js @@ -4,9 +4,9 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @flow strict + * */ -import type {LexicalNode} from 'lexical'; +'use strict'; -declare export default Array>; +module.exports = require('./dist/LexicalLink.js'); diff --git a/packages/lexical-link/README.md b/packages/lexical-link/README.md new file mode 100644 index 00000000000..d33283a8836 --- /dev/null +++ b/packages/lexical-link/README.md @@ -0,0 +1,5 @@ +# `@lexical/link` + +This package contains the functionality for Lexical links. + +More documentation coming soon. diff --git a/packages/lexical-link/package.json b/packages/lexical-link/package.json new file mode 100644 index 00000000000..a0f589fb149 --- /dev/null +++ b/packages/lexical-link/package.json @@ -0,0 +1,28 @@ +{ + "name": "@lexical/link", + "author": { + "name": "Dominic Gannaway", + "email": "dg@domgan.com" + }, + "description": "This package contains the functionality for Lexical links.", + "keywords": [ + "lexical", + "editor", + "rich-text", + "link" + ], + "license": "MIT", + "version": "0.1.16", + "main": "LexicalLink.js", + "peerDependencies": { + "lexical": "0.1.16" + }, + "dependencies": { + "@lexical/utils": "0.1.16" + }, + "repository": { + "type": "git", + "url": "https://github.com/facebook/lexical", + "directory": "packages/lexical-link" + } +} diff --git a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalLinkNode.test.js b/packages/lexical-link/src/__tests__/unit/LexicalLinkNode.test.js similarity index 96% rename from packages/lexical/src/nodes/extended/__tests__/unit/LexicalLinkNode.test.js rename to packages/lexical-link/src/__tests__/unit/LexicalLinkNode.test.js index d1a2f5a104e..1770b771e58 100644 --- a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalLinkNode.test.js +++ b/packages/lexical-link/src/__tests__/unit/LexicalLinkNode.test.js @@ -6,9 +6,8 @@ * */ -import {$createLinkNode, $isLinkNode, LinkNode} from 'lexical/LinkNode'; - -import {initializeUnitTest} from '../../../../../../lexical/src/__tests__/utils'; +import {$createLinkNode, $isLinkNode, LinkNode} from '@lexical/link'; +import {initializeUnitTest} from 'lexical/src/__tests__/utils'; const editorConfig = Object.freeze({ theme: { diff --git a/packages/lexical/src/nodes/extended/LexicalLinkNode.js b/packages/lexical-link/src/index.js similarity index 73% rename from packages/lexical/src/nodes/extended/LexicalLinkNode.js rename to packages/lexical-link/src/index.js index c43fe3804b5..8c1e07f4e57 100644 --- a/packages/lexical/src/nodes/extended/LexicalLinkNode.js +++ b/packages/lexical-link/src/index.js @@ -1,5 +1,5 @@ /** - * Copyright (c) Meta Platforms, Inc. and affiliates. + * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. @@ -116,3 +116,34 @@ export function $createLinkNode(url: string): LinkNode { export function $isLinkNode(node: ?LexicalNode): boolean %checks { return node instanceof LinkNode; } + +// Custom node type to override `canInsertTextAfter` that will +// allow typing within the link +export class AutoLinkNode extends LinkNode { + static getType(): string { + return 'autolink'; + } + + // $FlowFixMe[incompatible-extend] + static clone(node: AutoLinkNode): AutoLinkNode { + return new AutoLinkNode(node.__url, node.__key); + } + + insertNewAfter(selection: RangeSelection): null | ElementNode { + const element = this.getParentOrThrow().insertNewAfter(selection); + if ($isElementNode(element)) { + const linkNode = $createAutoLinkNode(this.__url); + element.append(linkNode); + return linkNode; + } + return null; + } +} + +export function $createAutoLinkNode(url: string): AutoLinkNode { + return new AutoLinkNode(url); +} + +export function $isAutoLinkNode(node: ?LexicalNode): boolean %checks { + return node instanceof AutoLinkNode; +} diff --git a/packages/lexical/ExtendedNodes.d.ts b/packages/lexical-overflow/LexicalOverflow.js similarity index 54% rename from packages/lexical/ExtendedNodes.d.ts rename to packages/lexical-overflow/LexicalOverflow.js index 2cc99008953..ab15aa8000e 100644 --- a/packages/lexical/ExtendedNodes.d.ts +++ b/packages/lexical-overflow/LexicalOverflow.js @@ -4,10 +4,9 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * + * */ -import {Class} from 'utility-types'; -import type {LexicalNode} from 'lexical'; -declare const ExtendedNodes: Array>; +'use strict'; -export default ExtendedNodes; +module.exports = require('./dist/LexicalOverflow.js'); diff --git a/packages/lexical-overflow/README.md b/packages/lexical-overflow/README.md new file mode 100644 index 00000000000..29964af7106 --- /dev/null +++ b/packages/lexical-overflow/README.md @@ -0,0 +1,3 @@ +# `@lexical/overflow` + +This package contains selection overflow helpers and nodes for Lexical. diff --git a/packages/lexical-overflow/package.json b/packages/lexical-overflow/package.json new file mode 100644 index 00000000000..a27242cc960 --- /dev/null +++ b/packages/lexical-overflow/package.json @@ -0,0 +1,25 @@ +{ + "name": "@lexical/overflow", + "author": { + "name": "Dominic Gannaway", + "email": "dg@domgan.com" + }, + "description": "This package contains selection overflow helpers and nodes for Lexical.", + "keywords": [ + "lexical", + "editor", + "rich-text", + "overflow" + ], + "license": "MIT", + "version": "0.1.16", + "main": "LexicalOverflow.js", + "peerDependencies": { + "lexical": "0.1.16" + }, + "repository": { + "type": "git", + "url": "https://github.com/facebook/lexical", + "directory": "packages/lexical-overflow" + } +} diff --git a/packages/lexical/src/nodes/extended/LexicalOverflowNode.js b/packages/lexical-overflow/src/index.js similarity index 100% rename from packages/lexical/src/nodes/extended/LexicalOverflowNode.js rename to packages/lexical-overflow/src/index.js diff --git a/packages/lexical-playground/package.json b/packages/lexical-playground/package.json index ee2066d8a6d..898c5ded49a 100644 --- a/packages/lexical-playground/package.json +++ b/packages/lexical-playground/package.json @@ -22,6 +22,8 @@ "@lexical/plain-text": "0.1.16", "@lexical/rich-text": "0.1.16", "@lexical/code": "0.1.16", + "@lexical/link": "0.1.16", + "@lexical/overflow": "0.1.16", "link-preview-generator": "1.0.7", "@excalidraw/excalidraw": "0.11.0", "yjs": ">=13.5.22", diff --git a/packages/lexical-playground/src/nodes/PlaygroundNodes.js b/packages/lexical-playground/src/nodes/PlaygroundNodes.js index 1294714d0b9..899e1508a96 100644 --- a/packages/lexical-playground/src/nodes/PlaygroundNodes.js +++ b/packages/lexical-playground/src/nodes/PlaygroundNodes.js @@ -9,8 +9,14 @@ import type {LexicalNode} from 'lexical'; +import {CodeHighlightNode, CodeNode} from '@lexical/code'; +import {HashtagNode} from '@lexical/hashtag'; +import {AutoLinkNode, LinkNode} from '@lexical/link'; +import {ListItemNode, ListNode} from '@lexical/list'; +import {OverflowNode} from '@lexical/overflow'; import {HorizontalRuleNode} from '@lexical/react/LexicalHorizontalRuleNode'; -import ExtendedNodes from 'lexical/ExtendedNodes'; +import {HeadingNode, QuoteNode} from '@lexical/rich-text'; +import {TableCellNode, TableNode, TableRowNode} from '@lexical/table'; import {EmojiNode} from './EmojiNode'; import {EquationNode} from './EquationNode'; @@ -24,7 +30,19 @@ import {TweetNode} from './TweetNode.jsx'; import {TypeaheadNode} from './TypeaheadNode'; const PlaygroundNodes: Array> = [ - ...ExtendedNodes, + HeadingNode, + ListNode, + ListItemNode, + QuoteNode, + CodeNode, + TableNode, + TableCellNode, + TableRowNode, + HashtagNode, + CodeHighlightNode, + AutoLinkNode, + LinkNode, + OverflowNode, PollNode, StickyNode, ImageNode, diff --git a/packages/lexical-playground/src/plugins/CharacterStylesPopupPlugin.jsx b/packages/lexical-playground/src/plugins/CharacterStylesPopupPlugin.jsx index 75b248991ac..2939a6fa22a 100644 --- a/packages/lexical-playground/src/plugins/CharacterStylesPopupPlugin.jsx +++ b/packages/lexical-playground/src/plugins/CharacterStylesPopupPlugin.jsx @@ -9,11 +9,11 @@ import type {ElementNode, LexicalEditor, RangeSelection} from 'lexical'; +import {$isLinkNode} from '@lexical/link'; import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; import withSubscriptions from '@lexical/react/withSubscriptions'; import {$isAtNodeEnd} from '@lexical/selection'; import {$getSelection, $isRangeSelection, $isTextNode, TextNode} from 'lexical'; -import {$isLinkNode} from 'lexical/LinkNode'; import React, {useCallback, useEffect, useRef, useState} from 'react'; // $FlowFixMe import {createPortal} from 'react-dom'; @@ -119,8 +119,7 @@ function FloatingCharacterStylesEditor({ editor.execCommand('formatText', 'bold'); }} className={'popup-item spaced ' + (isBold ? 'active' : '')} - aria-label="Format Bold" - > + aria-label="Format Bold"> diff --git a/packages/lexical-playground/src/plugins/ToolbarPlugin.jsx b/packages/lexical-playground/src/plugins/ToolbarPlugin.jsx index 4f0a852619f..cfbc16b259c 100644 --- a/packages/lexical-playground/src/plugins/ToolbarPlugin.jsx +++ b/packages/lexical-playground/src/plugins/ToolbarPlugin.jsx @@ -21,6 +21,7 @@ import { getCodeLanguages, getDefaultCodeLanguage, } from '@lexical/code'; +import {$isLinkNode} from '@lexical/link'; import {$isListNode, ListNode} from '@lexical/list'; import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; import withSubscriptions from '@lexical/react/withSubscriptions'; @@ -43,7 +44,6 @@ import { $getSelection, $isRangeSelection, } from 'lexical'; -import {$isLinkNode} from 'lexical/LinkNode'; import * as React from 'react'; import {useCallback, useEffect, useMemo, useRef, useState} from 'react'; // $FlowFixMe diff --git a/packages/lexical-playground/vite.config.js b/packages/lexical-playground/vite.config.js index d94dd61dc40..d59f509ce00 100644 --- a/packages/lexical-playground/vite.config.js +++ b/packages/lexical-playground/vite.config.js @@ -69,6 +69,14 @@ const moduleResolution = [ find: '@lexical/dragon', replacement: path.resolve('../lexical-dragon/src/index.js'), }, + { + find: '@lexical/link', + replacement: path.resolve('../lexical-link/src/index.js'), + }, + { + find: '@lexical/overflow', + replacement: path.resolve('../lexical-overflow/src/index.js'), + }, { find: '@lexical/yjs', replacement: path.resolve('../lexical-yjs/src/index.js'), @@ -76,25 +84,6 @@ const moduleResolution = [ {find: 'shared', replacement: path.resolve('../shared/src')}, ]; -// Lexical Node -[ - 'ExtendedNodes', - 'LinkNode', - 'CodeNode', - 'HeadingNode', - 'QuoteNode', - 'CodeHighlightNode', - 'AutoLinkNode', - 'OverflowNode', -].forEach((module) => { - moduleResolution.push({ - find: `lexical/${module}`, - replacement: path.resolve( - `../lexical/src/nodes/extended/Lexical${module}.js`, - ), - }); -}); - // Lexical React [ 'LexicalTreeView', diff --git a/packages/lexical-react/package.json b/packages/lexical-react/package.json index 069e2b24cce..112ac558979 100644 --- a/packages/lexical-react/package.json +++ b/packages/lexical-react/package.json @@ -25,7 +25,9 @@ "@lexical/plain-text": "0.1.16", "@lexical/rich-text": "0.1.16", "@lexical/code": "0.1.16", - "@lexical/text": "0.1.16" + "@lexical/text": "0.1.16", + "@lexical/link": "0.1.16", + "@lexical/overflow": "0.1.16" }, "peerDependencies": { "lexical": "0.1.16", diff --git a/packages/lexical-react/src/LexicalAutoLinkPlugin.js b/packages/lexical-react/src/LexicalAutoLinkPlugin.js index 103fc8457e0..141cb896f24 100644 --- a/packages/lexical-react/src/LexicalAutoLinkPlugin.js +++ b/packages/lexical-react/src/LexicalAutoLinkPlugin.js @@ -9,6 +9,12 @@ import type {ElementNode, LexicalEditor, LexicalNode} from 'lexical'; +import { + $createAutoLinkNode, + $isAutoLinkNode, + $isLinkNode, + AutoLinkNode, +} from '@lexical/link'; import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; import withSubscriptions from '@lexical/react/withSubscriptions'; import { @@ -18,12 +24,6 @@ import { $isTextNode, TextNode, } from 'lexical'; -import { - $createAutoLinkNode, - $isAutoLinkNode, - AutoLinkNode, -} from 'lexical/AutoLinkNode'; -import {$isLinkNode} from 'lexical/LinkNode'; import {useEffect} from 'react'; import invariant from 'shared/invariant'; diff --git a/packages/lexical-react/src/LexicalLinkPlugin.js b/packages/lexical-react/src/LexicalLinkPlugin.js index 691774d4b15..ccc478ab101 100644 --- a/packages/lexical-react/src/LexicalLinkPlugin.js +++ b/packages/lexical-react/src/LexicalLinkPlugin.js @@ -9,9 +9,9 @@ import type {CommandListenerEditorPriority} from 'lexical'; +import {$createLinkNode, $isLinkNode} from '@lexical/link'; import {useLexicalComposerContext} from '@lexical/react/LexicalComposerContext'; import {$getSelection, $setSelection} from 'lexical'; -import {$createLinkNode, $isLinkNode} from 'lexical/LinkNode'; import {useEffect} from 'react'; const EditorPriority: CommandListenerEditorPriority = 0; diff --git a/packages/lexical-react/src/__tests__/unit/PlainRichTextPlugin.test.js b/packages/lexical-react/src/__tests__/unit/PlainRichTextPlugin.test.js index d94c9958097..a2af03d9dad 100644 --- a/packages/lexical-react/src/__tests__/unit/PlainRichTextPlugin.test.js +++ b/packages/lexical-react/src/__tests__/unit/PlainRichTextPlugin.test.js @@ -7,10 +7,16 @@ * @flow strict */ +import {CodeHighlightNode, CodeNode} from '@lexical/code'; +import {HashtagNode} from '@lexical/hashtag'; +import {AutoLinkNode, LinkNode} from '@lexical/link'; +import {ListItemNode, ListNode} from '@lexical/list'; +import {OverflowNode} from '@lexical/overflow'; import LexicalContentEditable from '@lexical/react/LexicalContentEditable'; +import {HeadingNode, QuoteNode} from '@lexical/rich-text'; +import {TableCellNode, TableNode, TableRowNode} from '@lexical/table'; import {$rootTextContentCurry} from '@lexical/text'; import {$createParagraphNode, $createTextNode, $getRoot} from 'lexical'; -import ExtendedNodes from 'lexical/ExtendedNodes'; import React from 'react'; import {createRoot} from 'react-dom/client'; import ReactTestUtils from 'react-dom/test-utils'; @@ -60,7 +66,24 @@ describe('LexicalNodeHelpers tests', () => { diff --git a/packages/lexical-react/src/__tests__/unit/useLexicalCharacterLimit.test.js b/packages/lexical-react/src/__tests__/unit/useLexicalCharacterLimit.test.js index 7f577e1a0d6..25934895b16 100644 --- a/packages/lexical-react/src/__tests__/unit/useLexicalCharacterLimit.test.js +++ b/packages/lexical-react/src/__tests__/unit/useLexicalCharacterLimit.test.js @@ -9,6 +9,11 @@ import type {LexicalEditor, NodeKey} from 'lexical'; +import { + $createOverflowNode, + $isOverflowNode, + OverflowNode, +} from '@lexical/overflow'; import { $createParagraphNode, $createTextNode, @@ -16,11 +21,6 @@ import { $getRoot, $getSelection, } from 'lexical'; -import { - $createOverflowNode, - $isOverflowNode, - OverflowNode, -} from 'lexical/OverflowNode'; import {initializeUnitTest} from '../../../../lexical/src/__tests__/utils'; import {mergePrevious} from '../../DEPRECATED_useLexicalCharacterLimit'; diff --git a/packages/lexical-react/src/shared/useCharacterLimit.js b/packages/lexical-react/src/shared/useCharacterLimit.js index 0a0a88f65fe..2eca3c9db2b 100644 --- a/packages/lexical-react/src/shared/useCharacterLimit.js +++ b/packages/lexical-react/src/shared/useCharacterLimit.js @@ -9,6 +9,11 @@ import type {LexicalEditor, LexicalNode} from 'lexical'; +import { + $createOverflowNode, + $isOverflowNode, + OverflowNode, +} from '@lexical/overflow'; import withSubscriptions from '@lexical/react/withSubscriptions'; import {$rootTextContentCurry} from '@lexical/text'; import {$dfs} from '@lexical/utils'; @@ -19,11 +24,6 @@ import { $isTextNode, $setSelection, } from 'lexical'; -import { - $createOverflowNode, - $isOverflowNode, - OverflowNode, -} from 'lexical/OverflowNode'; import {useEffect} from 'react'; import invariant from 'shared/invariant'; diff --git a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalHeadingNode.test.js b/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.js similarity index 98% rename from packages/lexical/src/nodes/extended/__tests__/unit/LexicalHeadingNode.test.js rename to packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.js index ce9bcae52ce..2f6ccc5a5eb 100644 --- a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalHeadingNode.test.js +++ b/packages/lexical-rich-text/src/__tests__/unit/LexicalHeadingNode.test.js @@ -12,8 +12,7 @@ import { HeadingNode, } from '@lexical/rich-text'; import {$createTextNode, $getRoot, ParagraphNode} from 'lexical'; - -import {initializeUnitTest} from '../../../../../../lexical/src/__tests__/utils'; +import {initializeUnitTest} from 'lexical/src/__tests__/utils'; // No idea why we suddenly need to do this, but it fixes the tests // with latest experimental React version. diff --git a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalQuoteNode.test.js b/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.js similarity index 97% rename from packages/lexical/src/nodes/extended/__tests__/unit/LexicalQuoteNode.test.js rename to packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.js index ad0cf1ee9d5..c225ec760c0 100644 --- a/packages/lexical/src/nodes/extended/__tests__/unit/LexicalQuoteNode.test.js +++ b/packages/lexical-rich-text/src/__tests__/unit/LexicalQuoteNode.test.js @@ -8,8 +8,7 @@ import {$createQuoteNode} from '@lexical/rich-text'; import {$getRoot, ParagraphNode} from 'lexical'; - -import {initializeUnitTest} from '../../../../../../lexical/src/__tests__/utils'; +import {initializeUnitTest} from 'lexical/src/__tests__/utils'; const editorConfig = Object.freeze({ theme: { diff --git a/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.js b/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.js index 95fcc3d013f..2c315822f12 100644 --- a/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.js +++ b/packages/lexical-selection/src/__tests__/unit/LexicalSelection.test.js @@ -6,6 +6,7 @@ * */ +import {$createLinkNode} from '@lexical/link'; import {$createListItemNode, $createListNode} from '@lexical/list'; import DEPRECATED_useLexicalRichText from '@lexical/react/DEPRECATED_useLexicalRichText'; import { @@ -16,7 +17,6 @@ import { $getSelection, Selection, } from 'lexical'; -import {$createLinkNode} from 'lexical/LinkNode'; import { $createTestDecoratorNode, $createTestElementNode, diff --git a/packages/lexical-utils/src/__tests__/unit/LexicalEventHelpers.test.js b/packages/lexical-utils/src/__tests__/unit/LexicalEventHelpers.test.js index c5bdef8b905..b6dedd5d992 100644 --- a/packages/lexical-utils/src/__tests__/unit/LexicalEventHelpers.test.js +++ b/packages/lexical-utils/src/__tests__/unit/LexicalEventHelpers.test.js @@ -7,15 +7,20 @@ * @flow strict */ +import {CodeHighlightNode, CodeNode} from '@lexical/code'; +import {HashtagNode} from '@lexical/hashtag'; +import {AutoLinkNode, LinkNode} from '@lexical/link'; +import {ListItemNode, ListNode} from '@lexical/list'; +import {OverflowNode} from '@lexical/overflow'; import useLexicalRichText from '@lexical/react/DEPRECATED_useLexicalRichText'; +import {HeadingNode, QuoteNode} from '@lexical/rich-text'; import { applySelectionInputs, pasteHTML, setNativeSelectionWithPaths, } from '@lexical/selection/src/__tests__/utils'; +import {TableCellNode, TableNode, TableRowNode} from '@lexical/table'; import {createEditor} from 'lexical'; -import ExtendedNodes from 'lexical/ExtendedNodes'; -import {LinkNode} from 'lexical/LinkNode'; import React from 'react'; import {createRoot} from 'react-dom/client'; import ReactTestUtils from 'react-dom/test-utils'; @@ -51,7 +56,22 @@ describe('LexicalEventHelpers', () => { const editor = React.useMemo( () => createEditor({ - nodes: [LinkNode, ...ExtendedNodes], + nodes: [ + LinkNode, + HeadingNode, + ListNode, + ListItemNode, + QuoteNode, + CodeNode, + TableNode, + TableCellNode, + TableRowNode, + HashtagNode, + CodeHighlightNode, + AutoLinkNode, + LinkNode, + OverflowNode, + ], theme: { code: 'editor-code', heading: { diff --git a/packages/lexical/AutoLinkNode.d.ts b/packages/lexical/AutoLinkNode.d.ts deleted file mode 100644 index 2a1de7cae52..00000000000 --- a/packages/lexical/AutoLinkNode.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {LexicalNode, RangeSelection} from 'lexical'; -import {LinkNode} from 'lexical/LinkNode'; -export declare class AutoLinkNode extends LinkNode { - getType(): string; - // $FlowFixMe[incompatible-extend] - clone(node: AutoLinkNode): AutoLinkNode; - insertNewAfter(selection: RangeSelection): null | LexicalNode; - // $FlowFixMe[incompatible-extend] - canInsertTextAfter(): true; -} -export function $createAutoLinkNode(url: string): AutoLinkNode; -export function $isAutoLinkNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/CodeHighlightNode.d.ts b/packages/lexical/CodeHighlightNode.d.ts deleted file mode 100644 index 3c96ae333c9..00000000000 --- a/packages/lexical/CodeHighlightNode.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type { - EditorConfig, - EditorThemeClasses, - LexicalNode, - NodeKey, -} from 'lexical'; -import {TextNode} from 'lexical'; -export declare class CodeHighlightNode extends TextNode { - __highlightType: string | null | undefined; - constructor(text: string, highlightType?: string, key?: NodeKey); - getType(): string; - clone(node: CodeHighlightNode): CodeHighlightNode; - createDOM(config: EditorConfig): HTMLElement; - updateDOM( // $FlowFixMe - prevNode: CodeHighlightNode, - dom: HTMLElement, - config: EditorConfig, - ): boolean; - setFormat(format: number): CodeHighlightNode; -} -declare function getHighlightThemeClass( - theme: EditorThemeClasses, - highlightType: string | null | undefined, -): string | null | undefined; -export function $createCodeHighlightNode( - text: string, - highlightType?: string, -): CodeHighlightNode; -export function $isCodeHighlightNode( - node: LexicalNode | null | undefined, -): boolean; diff --git a/packages/lexical/CodeNode.d.ts b/packages/lexical/CodeNode.d.ts deleted file mode 100644 index 5f77cac590c..00000000000 --- a/packages/lexical/CodeNode.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type { - EditorConfig, - LexicalNode, - NodeKey, - ParagraphNode, - RangeSelection, -} from 'lexical'; -import type {CodeHighlightNode} from 'lexical/CodeHighlightNode'; -import {ElementNode} from 'lexical'; -export declare class CodeNode extends ElementNode { - getType(): string; - clone(node: CodeNode): CodeNode; - constructor(key?: NodeKey); - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: CodeNode, dom: HTMLElement): boolean; - insertNewAfter( - selection: RangeSelection, - ): null | ParagraphNode | CodeHighlightNode; - canInsertTab(): true; - collapseAtStart(): true; - setLanguage(language: string): void; - getLanguage(): string | void; -} -export function $createCodeNode(): CodeNode; -export function $isCodeNode(node: LexicalNode | null | undefined): boolean; -export function getFirstCodeHighlightNodeOfLine( - anchor: LexicalNode, -): CodeHighlightNode | null | undefined; -export function getLastCodeHighlightNodeOfLine( - anchor: LexicalNode, -): CodeHighlightNode | null | undefined; diff --git a/packages/lexical/HashtagNode.d.ts b/packages/lexical/HashtagNode.d.ts deleted file mode 100644 index 76d8ad12339..00000000000 --- a/packages/lexical/HashtagNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {EditorConfig, LexicalNode, NodeKey} from 'lexical'; -import {TextNode} from 'lexical'; -export declare class HashtagNode extends TextNode { - getType(): string; - clone(node: HashtagNode): HashtagNode; - constructor(text: string, key?: NodeKey); - createDOM(config: EditorConfig): HTMLElement; - setTextContent(text: string): TextNode; - canInsertTextBefore(): boolean; -} -export function $toggleHashtag(node: TextNode): TextNode; -export function $createHashtagNode(text?: string): TextNode; -export function $isHashtagNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/HeadingNode.d.ts b/packages/lexical/HeadingNode.d.ts deleted file mode 100644 index 53c2a3f4e24..00000000000 --- a/packages/lexical/HeadingNode.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {EditorConfig, LexicalNode, NodeKey, ParagraphNode} from 'lexical'; -import {ElementNode} from 'lexical'; -type HeadingTagType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5'; -export declare class HeadingNode extends ElementNode { - __tag: HeadingTagType; - getType(): string; - clone(node: HeadingNode): HeadingNode; - constructor(tag: HeadingTagType, key?: NodeKey); - getTag(): HeadingTagType; - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: HeadingNode, dom: HTMLElement): boolean; - insertNewAfter(): ParagraphNode; - collapseAtStart(): true; -} -export function $createHeadingNode(headingTag: HeadingTagType): HeadingNode; -export function $isHeadingNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/LinkNode.d.ts b/packages/lexical/LinkNode.d.ts deleted file mode 100644 index 1c90f308fcb..00000000000 --- a/packages/lexical/LinkNode.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {EditorConfig, LexicalNode, NodeKey, RangeSelection} from 'lexical'; -import {ElementNode} from 'lexical'; -export declare class LinkNode extends ElementNode { - __url: string; - getType(): string; - clone(node: LinkNode): LinkNode; - constructor(url: string, key?: NodeKey); - createDOM(config: EditorConfig): HTMLElement; - updateDOM( - prevNode: LinkNode, // $FlowFixMe DOM - dom: HTMLAnchorElement, - config: EditorConfig, - ): boolean; - getURL(): string; - setURL(url: string): void; - insertNewAfter(selection: RangeSelection): null | LexicalNode; - canInsertTextBefore(): false; - canInsertTextAfter(): boolean; - canBeEmpty(): false; - isInline(): true; -} -export function $createLinkNode(url: string): LinkNode; -export function $isLinkNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/OverflowNode.d.ts b/packages/lexical/OverflowNode.d.ts deleted file mode 100644 index 7fd2902b254..00000000000 --- a/packages/lexical/OverflowNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {EditorConfig, LexicalNode, NodeKey, RangeSelection} from 'lexical'; -import {ElementNode} from 'lexical'; -export declare class OverflowNode extends ElementNode { - getType(): string; - clone(node: OverflowNode): OverflowNode; - constructor(key?: NodeKey); - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: OverflowNode, dom: HTMLElement): boolean; - insertNewAfter(selection: RangeSelection): null | ElementNode; - excludeFromCopy(): boolean; -} -export function $createOverflowNode(): OverflowNode; -export function $isOverflowNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/QuoteNode.d.ts b/packages/lexical/QuoteNode.d.ts deleted file mode 100644 index ec7ab1ae4e7..00000000000 --- a/packages/lexical/QuoteNode.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - */ - -import type {EditorConfig, LexicalNode, NodeKey, ParagraphNode} from 'lexical'; -import {ElementNode} from 'lexical'; -export declare class QuoteNode extends ElementNode { - getType(): string; - clone(node: QuoteNode): QuoteNode; - constructor(key?: NodeKey); - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: QuoteNode, dom: HTMLElement): boolean; - insertNewAfter(): ParagraphNode; - collapseAtStart(): true; -} -export function $createQuoteNode(): QuoteNode; -export function $isQuoteNode(node: LexicalNode | null | undefined): boolean; diff --git a/packages/lexical/flow/LexicalAutoLinkNode.js.flow b/packages/lexical/flow/LexicalAutoLinkNode.js.flow deleted file mode 100644 index 7dea8cb9a81..00000000000 --- a/packages/lexical/flow/LexicalAutoLinkNode.js.flow +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {LexicalNode, RangeSelection} from 'lexical'; - -import {LinkNode} from 'lexical/LinkNode'; - -declare export class AutoLinkNode extends LinkNode { - static getType(): string; - // $FlowFixMe[incompatible-extend] - static clone(node: AutoLinkNode): AutoLinkNode; - insertNewAfter(selection: RangeSelection): null | LexicalNode; - // $FlowFixMe[incompatible-extend] - canInsertTextAfter(): true; -} -declare export function $createAutoLinkNode(url: string): AutoLinkNode; -declare export function $isAutoLinkNode( - node: ?LexicalNode, -): boolean %checks(node instanceof AutoLinkNode); diff --git a/packages/lexical/flow/LexicalHeadingNode.js.flow b/packages/lexical/flow/LexicalHeadingNode.js.flow deleted file mode 100644 index 3209b7340cd..00000000000 --- a/packages/lexical/flow/LexicalHeadingNode.js.flow +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {EditorConfig, LexicalNode, NodeKey, ParagraphNode} from 'lexical'; - -import {ElementNode} from 'lexical'; - -type HeadingTagType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5'; -declare export class HeadingNode extends ElementNode { - __tag: HeadingTagType; - static getType(): string; - static clone(node: HeadingNode): HeadingNode; - constructor(tag: HeadingTagType, key?: NodeKey): void; - getTag(): HeadingTagType; - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: HeadingNode, dom: HTMLElement): boolean; - insertNewAfter(): ParagraphNode; - collapseAtStart(): true; -} -declare export function $createHeadingNode( - headingTag: HeadingTagType, -): HeadingNode; - -declare export function $isHeadingNode( - node: ?LexicalNode, -): boolean %checks(node instanceof HeadingNode); diff --git a/packages/lexical/flow/LexicalLinkNode.js.flow b/packages/lexical/flow/LexicalLinkNode.js.flow deleted file mode 100644 index 6d56b5bf32b..00000000000 --- a/packages/lexical/flow/LexicalLinkNode.js.flow +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {EditorConfig, LexicalNode, NodeKey, RangeSelection} from 'lexical'; - -import {ElementNode} from 'lexical'; - -declare export class LinkNode extends ElementNode { - __url: string; - static getType(): string; - static clone(node: LinkNode): LinkNode; - constructor(url: string, key?: NodeKey): void; - createDOM(config: EditorConfig): HTMLElement; - updateDOM( - prevNode: LinkNode, - // $FlowFixMe DOM - dom: HTMLAnchorElement, - config: EditorConfig, - ): boolean; - getURL(): string; - setURL(url: string): void; - insertNewAfter(selection: RangeSelection): null | LexicalNode; - canInsertTextBefore(): false; - canInsertTextAfter(): boolean; - canBeEmpty(): false; - isInline(): true; -} -declare export function $createLinkNode(url: string): LinkNode; -declare export function $isLinkNode( - node: ?LexicalNode, -): boolean %checks(node instanceof LinkNode); diff --git a/packages/lexical/flow/LexicalOverflowNode.js.flow b/packages/lexical/flow/LexicalOverflowNode.js.flow deleted file mode 100644 index e26428d889f..00000000000 --- a/packages/lexical/flow/LexicalOverflowNode.js.flow +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {EditorConfig, LexicalNode, NodeKey, RangeSelection} from 'lexical'; - -import {ElementNode} from 'lexical'; - -declare export class OverflowNode extends ElementNode { - static getType(): string; - static clone(node: OverflowNode): OverflowNode; - constructor(key?: NodeKey): void; - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: OverflowNode, dom: HTMLElement): boolean; - insertNewAfter(selection: RangeSelection): null | ElementNode; - excludeFromCopy(): boolean; -} -declare export function $createOverflowNode(): OverflowNode; -declare export function $isOverflowNode( - node: ?LexicalNode, -): boolean %checks(node instanceof OverflowNode); diff --git a/packages/lexical/flow/LexicalQuoteNode.js.flow b/packages/lexical/flow/LexicalQuoteNode.js.flow deleted file mode 100644 index 2a4815f9881..00000000000 --- a/packages/lexical/flow/LexicalQuoteNode.js.flow +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - * @format - */ - -import type {EditorConfig, LexicalNode, NodeKey, ParagraphNode} from 'lexical'; - -import {ElementNode} from 'lexical'; - -declare export class QuoteNode extends ElementNode { - static getType(): string; - static clone(node: QuoteNode): QuoteNode; - constructor(key?: NodeKey): void; - createDOM(config: EditorConfig): HTMLElement; - updateDOM(prevNode: QuoteNode, dom: HTMLElement): boolean; - insertNewAfter(): ParagraphNode; - collapseAtStart(): true; -} -declare export function $createQuoteNode(): QuoteNode; -declare export function $isQuoteNode( - node: ?LexicalNode, -): boolean %checks(node instanceof QuoteNode); diff --git a/packages/lexical/src/LexicalConstants.js b/packages/lexical/src/LexicalConstants.js index dfb222dc8c5..3d311a75b05 100644 --- a/packages/lexical/src/LexicalConstants.js +++ b/packages/lexical/src/LexicalConstants.js @@ -7,8 +7,8 @@ * @flow strict */ -import type {ElementFormatType} from './nodes/base/LexicalElementNode'; -import type {TextFormatType, TextModeType} from './nodes/base/LexicalTextNode'; +import type {ElementFormatType} from './nodes/LexicalElementNode'; +import type {TextFormatType, TextModeType} from './nodes/LexicalTextNode'; // DOM export const DOM_ELEMENT_TYPE = 1; diff --git a/packages/lexical/src/LexicalEditor.js b/packages/lexical/src/LexicalEditor.js index abede2487d3..6ada4dc57a2 100644 --- a/packages/lexical/src/LexicalEditor.js +++ b/packages/lexical/src/LexicalEditor.js @@ -9,7 +9,6 @@ import type {EditorState} from './LexicalEditorState'; import type {DOMConversion, LexicalNode, NodeKey} from './LexicalNode'; -import type {Node as ReactNode} from 'react'; import getDOMSelection from 'shared/getDOMSelection'; import invariant from 'shared/invariant'; @@ -31,9 +30,9 @@ import { generateRandomKey, markAllNodesAsDirty, } from './LexicalUtils'; -import {LineBreakNode} from './nodes/base/LexicalLineBreakNode'; -import {ParagraphNode} from './nodes/base/LexicalParagraphNode'; -import {RootNode} from './nodes/base/LexicalRootNode'; +import {LineBreakNode} from './nodes/LexicalLineBreakNode'; +import {ParagraphNode} from './nodes/LexicalParagraphNode'; +import {RootNode} from './nodes/LexicalRootNode'; export type EditorThemeClassName = string; @@ -122,7 +121,7 @@ export type UpdateListener = ({ prevEditorState: EditorState, tags: Set, }) => void; -export type DecoratorListener = (decorator: {[NodeKey]: ReactNode}) => void; +export type DecoratorListener = (decorator: {[NodeKey]: mixed}) => void; export type RootListener = ( rootElement: null | HTMLElement, prevRootElement: null | HTMLElement, @@ -311,8 +310,8 @@ export class LexicalEditor { _updating: boolean; _listeners: Listeners; _nodes: RegisteredNodes; - _decorators: {[NodeKey]: ReactNode}; - _pendingDecorators: null | {[NodeKey]: ReactNode}; + _decorators: {[NodeKey]: mixed}; + _pendingDecorators: null | {[NodeKey]: mixed}; _config: EditorConfig<{...}>; _dirtyType: 0 | 1 | 2; _cloneNotNeeded: Set; @@ -489,7 +488,7 @@ export class LexicalEditor { execCommand(type: string, payload?: CommandPayload): boolean { return triggerCommandListeners(this, type, payload); } - getDecorators(): {[NodeKey]: ReactNode} { + getDecorators(): {[NodeKey]: mixed} { return this._decorators; } getRootElement(): null | HTMLElement { diff --git a/packages/lexical/src/LexicalEditorState.js b/packages/lexical/src/LexicalEditorState.js index 0712fc20531..68db0c23bae 100644 --- a/packages/lexical/src/LexicalEditorState.js +++ b/packages/lexical/src/LexicalEditorState.js @@ -22,7 +22,7 @@ import { $isRangeSelection, } from './LexicalSelection'; import {readEditorState} from './LexicalUpdates'; -import {$createRootNode} from './nodes/base/LexicalRootNode'; +import {$createRootNode} from './nodes/LexicalRootNode'; export type ParsedEditorState = { _nodeMap: Array<[NodeKey, ParsedNode]>, diff --git a/packages/lexical/src/LexicalEvents.js b/packages/lexical/src/LexicalEvents.js index 6a759b5c8a1..1c8b66deff3 100644 --- a/packages/lexical/src/LexicalEvents.js +++ b/packages/lexical/src/LexicalEvents.js @@ -9,8 +9,8 @@ import type {LexicalEditor} from './LexicalEditor'; import type {RangeSelection} from './LexicalSelection'; -import type {ElementNode} from './nodes/base/LexicalElementNode'; -import type {TextNode} from './nodes/base/LexicalTextNode'; +import type {ElementNode} from './nodes/LexicalElementNode'; +import type {TextNode} from './nodes/LexicalTextNode'; import {CAN_USE_BEFORE_INPUT, IS_FIREFOX} from 'shared/environment'; import getDOMSelection from 'shared/getDOMSelection'; diff --git a/packages/lexical/src/LexicalParsing.js b/packages/lexical/src/LexicalParsing.js index aa7e3f1f38d..2099838a64e 100644 --- a/packages/lexical/src/LexicalParsing.js +++ b/packages/lexical/src/LexicalParsing.js @@ -13,7 +13,7 @@ import type { DecoratorArray, DecoratorMap, DecoratorStateValue, -} from './nodes/base/LexicalDecoratorNode'; +} from './nodes/LexicalDecoratorNode'; import invariant from 'shared/invariant'; @@ -27,7 +27,7 @@ import { createDecoratorArray, createDecoratorEditor, createDecoratorMap, -} from './nodes/base/LexicalDecoratorNode'; +} from './nodes/LexicalDecoratorNode'; export type NodeParserState = { originalSelection: null | ParsedSelection, diff --git a/packages/lexical/src/LexicalReconciler.js b/packages/lexical/src/LexicalReconciler.js index 924adde7b7f..f10be47775d 100644 --- a/packages/lexical/src/LexicalReconciler.js +++ b/packages/lexical/src/LexicalReconciler.js @@ -7,7 +7,7 @@ * @flow strict */ - import type { +import type { EditorConfig, IntentionallyMarkedAsDirtyElement, LexicalEditor, @@ -21,8 +21,7 @@ import type { NodeSelection, RangeSelection, } from './LexicalSelection'; -import type {ElementNode} from './nodes/base/LexicalElementNode'; -import type {Node as ReactNode} from 'react'; +import type {ElementNode} from './nodes/LexicalElementNode'; import getDOMSelection from 'shared/getDOMSelection'; import invariant from 'shared/invariant'; @@ -552,7 +551,7 @@ function reconcileNode( return dom; } -function reconcileDecorator(key: NodeKey, decorator: ReactNode): void { +function reconcileDecorator(key: NodeKey, decorator: mixed): void { let pendingDecorators = activeEditor._pendingDecorators; const currentDecorators = activeEditor._decorators; diff --git a/packages/lexical/src/LexicalSelection.js b/packages/lexical/src/LexicalSelection.js index 104dea0492e..26ee6f60698 100644 --- a/packages/lexical/src/LexicalSelection.js +++ b/packages/lexical/src/LexicalSelection.js @@ -11,8 +11,8 @@ import type {LexicalEditor} from './LexicalEditor'; import type {EditorState} from './LexicalEditorState'; import type {LexicalNode, NodeKey} from './LexicalNode'; import type {ParsedSelection} from './LexicalParsing'; -import type {ElementNode} from './nodes/base/LexicalElementNode'; -import type {TextFormatType} from './nodes/base/LexicalTextNode'; +import type {ElementNode} from './nodes/LexicalElementNode'; +import type {TextFormatType} from './nodes/LexicalTextNode'; import getDOMSelection from 'shared/getDOMSelection'; import invariant from 'shared/invariant'; diff --git a/packages/lexical/src/LexicalUtils.js b/packages/lexical/src/LexicalUtils.js index 198931d69a4..db50e6aab69 100644 --- a/packages/lexical/src/LexicalUtils.js +++ b/packages/lexical/src/LexicalUtils.js @@ -24,9 +24,8 @@ import type { PointType, RangeSelection, } from './LexicalSelection'; -import type {RootNode} from './nodes/base/LexicalRootNode'; -import type {TextFormatType, TextNode} from './nodes/base/LexicalTextNode'; -import type {Node as ReactNode} from 'react'; +import type {RootNode} from './nodes/LexicalRootNode'; +import type {TextFormatType, TextNode} from './nodes/LexicalTextNode'; import {IS_APPLE} from 'shared/environment'; import getDOMSelection from 'shared/getDOMSelection'; @@ -334,7 +333,7 @@ export function $getNearestNodeFromDOMNode( return null; } -export function cloneDecorators(editor: LexicalEditor): {[NodeKey]: ReactNode} { +export function cloneDecorators(editor: LexicalEditor): {[NodeKey]: mixed} { const currentDecorators = editor._decorators; const pendingDecorators = Object.assign({}, currentDecorators); editor._pendingDecorators = pendingDecorators; diff --git a/packages/lexical/src/__tests__/unit/LexicalEditorState.test.js b/packages/lexical/src/__tests__/unit/LexicalEditorState.test.js index 242afa1ae94..282ba0e1ffd 100644 --- a/packages/lexical/src/__tests__/unit/LexicalEditorState.test.js +++ b/packages/lexical/src/__tests__/unit/LexicalEditorState.test.js @@ -21,7 +21,7 @@ import { } from 'lexical'; import {EditorState} from '../../LexicalEditorState'; -import {$createRootNode} from '../../nodes/base/LexicalRootNode'; +import {$createRootNode} from '../../nodes/LexicalRootNode'; import {initializeUnitTest} from '../utils'; // No idea why we suddenly need to do this, but it fixes the tests diff --git a/packages/lexical/src/__tests__/utils/index.js b/packages/lexical/src/__tests__/utils/index.js index 4fdc5b1f614..2bcdb741093 100644 --- a/packages/lexical/src/__tests__/utils/index.js +++ b/packages/lexical/src/__tests__/utils/index.js @@ -8,8 +8,14 @@ import type {LexicalEditor} from 'lexical'; +import {CodeHighlightNode, CodeNode} from '@lexical/code'; +import {HashtagNode} from '@lexical/hashtag'; +import {AutoLinkNode, LinkNode} from '@lexical/link'; +import {ListItemNode, ListNode} from '@lexical/list'; +import {OverflowNode} from '@lexical/overflow'; +import {HeadingNode, QuoteNode} from '@lexical/rich-text'; +import {TableCellNode, TableNode, TableRowNode} from '@lexical/table'; import {createEditor, DecoratorNode, ElementNode, TextNode} from 'lexical'; -import ExtendedNodes from 'lexical/ExtendedNodes'; import React from 'react'; import {createRoot} from 'react-dom/client'; import ReactTestUtils from 'react-dom/test-utils'; @@ -30,7 +36,19 @@ export function createTestEditor(config = {}): LexicalEditor { }, ...config, nodes: [ - ...ExtendedNodes, + HeadingNode, + ListNode, + ListItemNode, + QuoteNode, + CodeNode, + TableNode, + TableCellNode, + TableRowNode, + HashtagNode, + CodeHighlightNode, + AutoLinkNode, + LinkNode, + OverflowNode, TestElementNode, TestSegmentedNode, TestExcludeFromCopyElementNode, diff --git a/packages/lexical/src/index.js b/packages/lexical/src/index.js index ecef97d381b..2cc4df9f3e5 100644 --- a/packages/lexical/src/index.js +++ b/packages/lexical/src/index.js @@ -39,26 +39,22 @@ import { isDecoratorArray, isDecoratorEditor, isDecoratorMap, -} from './nodes/base/LexicalDecoratorNode'; -import {$isElementNode, ElementNode} from './nodes/base/LexicalElementNode'; -import {$isGridCellNode, GridCellNode} from './nodes/base/LexicalGridCellNode'; -import {$isGridNode, GridNode} from './nodes/base/LexicalGridNode'; -import {$isGridRowNode, GridRowNode} from './nodes/base/LexicalGridRowNode'; +} from './nodes/LexicalDecoratorNode'; +import {$isElementNode, ElementNode} from './nodes/LexicalElementNode'; +import {$isGridCellNode, GridCellNode} from './nodes/LexicalGridCellNode'; +import {$isGridNode, GridNode} from './nodes/LexicalGridNode'; +import {$isGridRowNode, GridRowNode} from './nodes/LexicalGridRowNode'; import { $createLineBreakNode, $isLineBreakNode, -} from './nodes/base/LexicalLineBreakNode'; +} from './nodes/LexicalLineBreakNode'; import { $createParagraphNode, $isParagraphNode, ParagraphNode, -} from './nodes/base/LexicalParagraphNode'; -import {$isRootNode} from './nodes/base/LexicalRootNode'; -import { - $createTextNode, - $isTextNode, - TextNode, -} from './nodes/base/LexicalTextNode'; +} from './nodes/LexicalParagraphNode'; +import {$isRootNode} from './nodes/LexicalRootNode'; +import {$createTextNode, $isTextNode, TextNode} from './nodes/LexicalTextNode'; export { $createGridSelection, diff --git a/packages/lexical/src/nodes/base/LexicalDecoratorNode.js b/packages/lexical/src/nodes/LexicalDecoratorNode.js similarity index 94% rename from packages/lexical/src/nodes/base/LexicalDecoratorNode.js rename to packages/lexical/src/nodes/LexicalDecoratorNode.js index 400c8bbfbc6..d4fb0665ab9 100644 --- a/packages/lexical/src/nodes/base/LexicalDecoratorNode.js +++ b/packages/lexical/src/nodes/LexicalDecoratorNode.js @@ -7,16 +7,15 @@ * @flow strict */ -import type {LexicalEditor} from '../../LexicalEditor'; -import type {EditorState} from '../../LexicalEditorState'; -import type {NodeKey} from '../../LexicalNode'; -import type {Node as ReactNode} from 'react'; +import type {LexicalEditor} from '../LexicalEditor'; +import type {EditorState} from '../LexicalEditorState'; +import type {NodeKey} from '../LexicalNode'; import invariant from 'shared/invariant'; -import {LexicalNode} from '../../LexicalNode'; -import {getActiveEditor} from '../../LexicalUpdates'; -import {createUID} from '../../LexicalUtils'; +import {LexicalNode} from '../LexicalNode'; +import {getActiveEditor} from '../LexicalUpdates'; +import {createUID} from '../LexicalUtils'; export type DecoratorStateValue = | DecoratorMap @@ -285,7 +284,7 @@ export class DecoratorNode extends LexicalNode { } } - decorate(editor: LexicalEditor): ReactNode { + decorate(editor: LexicalEditor): mixed { invariant(false, 'decorate: base method not extended'); } diff --git a/packages/lexical/src/nodes/base/LexicalElementNode.js b/packages/lexical/src/nodes/LexicalElementNode.js similarity index 97% rename from packages/lexical/src/nodes/base/LexicalElementNode.js rename to packages/lexical/src/nodes/LexicalElementNode.js index b66e144885c..3d00e387dbd 100644 --- a/packages/lexical/src/nodes/base/LexicalElementNode.js +++ b/packages/lexical/src/nodes/LexicalElementNode.js @@ -7,26 +7,26 @@ * @flow strict */ -import type {NodeKey} from '../../LexicalNode'; -import type {PointType, RangeSelection} from '../../LexicalSelection'; +import type {NodeKey} from '../LexicalNode'; +import type {PointType, RangeSelection} from '../LexicalSelection'; import invariant from 'shared/invariant'; -import {$isRootNode, $isTextNode, TextNode} from '../../'; -import {ELEMENT_TYPE_TO_FORMAT} from '../../LexicalConstants'; -import {LexicalNode} from '../../LexicalNode'; +import {$isRootNode, $isTextNode, TextNode} from '../'; +import {ELEMENT_TYPE_TO_FORMAT} from '../LexicalConstants'; +import {LexicalNode} from '../LexicalNode'; import { $getSelection, $isRangeSelection, internalMakeRangeSelection, moveSelectionPointToSibling, -} from '../../LexicalSelection'; -import {errorOnReadOnly, getActiveEditor} from '../../LexicalUpdates'; +} from '../LexicalSelection'; +import {errorOnReadOnly, getActiveEditor} from '../LexicalUpdates'; import { $getNodeByKey, internalMarkNodeAsDirty, internalMarkSiblingsAsDirty, -} from '../../LexicalUtils'; +} from '../LexicalUtils'; export type ElementFormatType = 'left' | 'center' | 'right' | 'justify'; diff --git a/packages/lexical/src/nodes/base/LexicalGridCellNode.js b/packages/lexical/src/nodes/LexicalGridCellNode.js similarity index 100% rename from packages/lexical/src/nodes/base/LexicalGridCellNode.js rename to packages/lexical/src/nodes/LexicalGridCellNode.js diff --git a/packages/lexical/src/nodes/base/LexicalGridNode.js b/packages/lexical/src/nodes/LexicalGridNode.js similarity index 88% rename from packages/lexical/src/nodes/base/LexicalGridNode.js rename to packages/lexical/src/nodes/LexicalGridNode.js index 47d34528c40..847a70eb2fb 100644 --- a/packages/lexical/src/nodes/base/LexicalGridNode.js +++ b/packages/lexical/src/nodes/LexicalGridNode.js @@ -7,7 +7,7 @@ * @flow strict */ -import type {LexicalNode} from '../../LexicalNode'; +import type {LexicalNode} from '../LexicalNode'; import {ElementNode} from './LexicalElementNode'; diff --git a/packages/lexical/src/nodes/base/LexicalGridRowNode.js b/packages/lexical/src/nodes/LexicalGridRowNode.js similarity index 89% rename from packages/lexical/src/nodes/base/LexicalGridRowNode.js rename to packages/lexical/src/nodes/LexicalGridRowNode.js index 3d8c3e4a7f5..d1b02a04d93 100644 --- a/packages/lexical/src/nodes/base/LexicalGridRowNode.js +++ b/packages/lexical/src/nodes/LexicalGridRowNode.js @@ -7,7 +7,7 @@ * @flow strict */ -import type {LexicalNode} from '../../LexicalNode'; +import type {LexicalNode} from '../LexicalNode'; import {ElementNode} from './LexicalElementNode'; diff --git a/packages/lexical/src/nodes/base/LexicalLineBreakNode.js b/packages/lexical/src/nodes/LexicalLineBreakNode.js similarity index 94% rename from packages/lexical/src/nodes/base/LexicalLineBreakNode.js rename to packages/lexical/src/nodes/LexicalLineBreakNode.js index b4cee5cce69..2c31099f34c 100644 --- a/packages/lexical/src/nodes/base/LexicalLineBreakNode.js +++ b/packages/lexical/src/nodes/LexicalLineBreakNode.js @@ -11,9 +11,9 @@ import type { DOMConversionMap, DOMConversionOutput, NodeKey, -} from '../../LexicalNode'; +} from '../LexicalNode'; -import {LexicalNode} from '../../LexicalNode'; +import {LexicalNode} from '../LexicalNode'; export class LineBreakNode extends LexicalNode { static getType(): string { diff --git a/packages/lexical/src/nodes/base/LexicalParagraphNode.js b/packages/lexical/src/nodes/LexicalParagraphNode.js similarity index 94% rename from packages/lexical/src/nodes/base/LexicalParagraphNode.js rename to packages/lexical/src/nodes/LexicalParagraphNode.js index 21b3634efe0..cfbf9628b15 100644 --- a/packages/lexical/src/nodes/base/LexicalParagraphNode.js +++ b/packages/lexical/src/nodes/LexicalParagraphNode.js @@ -7,15 +7,15 @@ * @flow strict */ -import type {EditorConfig, EditorThemeClasses} from '../../LexicalEditor'; +import type {EditorConfig, EditorThemeClasses} from '../LexicalEditor'; import type { DOMConversionMap, DOMConversionOutput, LexicalNode, NodeKey, -} from '../../LexicalNode'; +} from '../LexicalNode'; -import {getCachedClassNameArray} from '../../LexicalUtils'; +import {getCachedClassNameArray} from '../LexicalUtils'; import {ElementNode} from './LexicalElementNode'; import {$isTextNode} from './LexicalTextNode'; diff --git a/packages/lexical/src/nodes/base/LexicalRootNode.js b/packages/lexical/src/nodes/LexicalRootNode.js similarity index 92% rename from packages/lexical/src/nodes/base/LexicalRootNode.js rename to packages/lexical/src/nodes/LexicalRootNode.js index adae75358f2..3585959d232 100644 --- a/packages/lexical/src/nodes/base/LexicalRootNode.js +++ b/packages/lexical/src/nodes/LexicalRootNode.js @@ -7,12 +7,12 @@ * @flow strict */ -import type {LexicalNode} from '../../LexicalNode'; +import type {LexicalNode} from '../LexicalNode'; import invariant from 'shared/invariant'; -import {NO_DIRTY_NODES} from '../../LexicalConstants'; -import {getActiveEditor, isCurrentlyReadOnlyMode} from '../../LexicalUpdates'; +import {NO_DIRTY_NODES} from '../LexicalConstants'; +import {getActiveEditor, isCurrentlyReadOnlyMode} from '../LexicalUpdates'; import {$isDecoratorNode} from './LexicalDecoratorNode'; import {$isElementNode, ElementNode} from './LexicalElementNode'; diff --git a/packages/lexical/src/nodes/base/LexicalTextNode.js b/packages/lexical/src/nodes/LexicalTextNode.js similarity index 98% rename from packages/lexical/src/nodes/base/LexicalTextNode.js rename to packages/lexical/src/nodes/LexicalTextNode.js index e318620ddf7..cc33368148d 100644 --- a/packages/lexical/src/nodes/base/LexicalTextNode.js +++ b/packages/lexical/src/nodes/LexicalTextNode.js @@ -7,17 +7,17 @@ * @flow strict */ -import type {EditorConfig, TextNodeThemeClasses} from '../../LexicalEditor'; +import type {EditorConfig, TextNodeThemeClasses} from '../LexicalEditor'; import type { DOMConversionMap, DOMConversionOutput, NodeKey, -} from '../../LexicalNode'; +} from '../LexicalNode'; import type { GridSelection, NodeSelection, RangeSelection, -} from '../../LexicalSelection'; +} from '../LexicalSelection'; import invariant from 'shared/invariant'; @@ -35,23 +35,23 @@ import { TEXT_MODE_TO_TYPE, TEXT_TYPE_TO_FORMAT, ZERO_WIDTH_CHAR, -} from '../../LexicalConstants'; -import {LexicalNode} from '../../LexicalNode'; +} from '../LexicalConstants'; +import {LexicalNode} from '../LexicalNode'; import { $getSelection, $isRangeSelection, $updateElementSelectionOnCreateDeleteNode, adjustPointOffsetForMergedSibling, internalMakeRangeSelection, -} from '../../LexicalSelection'; -import {errorOnReadOnly} from '../../LexicalUpdates'; +} from '../LexicalSelection'; +import {errorOnReadOnly} from '../LexicalUpdates'; import { $getCompositionKey, $setCompositionKey, getCachedClassNameArray, internalMarkSiblingsAsDirty, toggleTextFormatType, -} from '../../LexicalUtils'; +} from '../LexicalUtils'; export type TextFormatType = | 'bold' diff --git a/packages/lexical/src/nodes/base/__tests__/LexicalParagraphNode.test.js b/packages/lexical/src/nodes/__tests__/LexicalParagraphNode.test.js similarity index 98% rename from packages/lexical/src/nodes/base/__tests__/LexicalParagraphNode.test.js rename to packages/lexical/src/nodes/__tests__/LexicalParagraphNode.test.js index b711e79ba5c..0716ea4a66a 100644 --- a/packages/lexical/src/nodes/base/__tests__/LexicalParagraphNode.test.js +++ b/packages/lexical/src/nodes/__tests__/LexicalParagraphNode.test.js @@ -13,7 +13,7 @@ import { ParagraphNode, } from 'lexical'; -import {initializeUnitTest} from '../../../__tests__/utils'; +import {initializeUnitTest} from '../../__tests__/utils'; const editorConfig = Object.freeze({ theme: { diff --git a/packages/lexical/src/nodes/base/__tests__/unit/LexicalElementNode.test.js b/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.js similarity index 99% rename from packages/lexical/src/nodes/base/__tests__/unit/LexicalElementNode.test.js rename to packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.js index 30ea64fce57..fafdc23b2b9 100644 --- a/packages/lexical/src/nodes/base/__tests__/unit/LexicalElementNode.test.js +++ b/packages/lexical/src/nodes/__tests__/unit/LexicalElementNode.test.js @@ -14,7 +14,7 @@ import ReactTestUtils from 'react-dom/test-utils'; import { $createTestElementNode, createTestEditor, -} from '../../../../__tests__/utils'; +} from '../../../__tests__/utils'; // No idea why we suddenly need to do this, but it fixes the tests // with latest experimental React version. diff --git a/packages/lexical/src/nodes/base/__tests__/unit/LexicalLineBreakNode.test.js b/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.js similarity index 96% rename from packages/lexical/src/nodes/base/__tests__/unit/LexicalLineBreakNode.test.js rename to packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.js index c6f284b4a5d..4faffdc5e11 100644 --- a/packages/lexical/src/nodes/base/__tests__/unit/LexicalLineBreakNode.test.js +++ b/packages/lexical/src/nodes/__tests__/unit/LexicalLineBreakNode.test.js @@ -8,7 +8,7 @@ import {$createLineBreakNode, $isLineBreakNode} from 'lexical'; -import {initializeUnitTest} from '../../../../__tests__/utils'; +import {initializeUnitTest} from '../../../__tests__/utils'; // No idea why we suddenly need to do this, but it fixes the tests // with latest experimental React version. diff --git a/packages/lexical/src/nodes/base/__tests__/unit/LexicalRootNode.test.js b/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.js similarity index 98% rename from packages/lexical/src/nodes/base/__tests__/unit/LexicalRootNode.test.js rename to packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.js index 8f0ba6c09c9..d71f06cce2a 100644 --- a/packages/lexical/src/nodes/base/__tests__/unit/LexicalRootNode.test.js +++ b/packages/lexical/src/nodes/__tests__/unit/LexicalRootNode.test.js @@ -16,7 +16,7 @@ import { import { $createTestDecoratorNode, initializeUnitTest, -} from '../../../../__tests__/utils'; +} from '../../../__tests__/utils'; import {$createRootNode} from '../../LexicalRootNode'; // No idea why we suddenly need to do this, but it fixes the tests diff --git a/packages/lexical/src/nodes/base/__tests__/unit/LexicalTextNode.test.js b/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.js similarity index 99% rename from packages/lexical/src/nodes/base/__tests__/unit/LexicalTextNode.test.js rename to packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.js index 3f0501e8e91..e6ce97ea1d8 100644 --- a/packages/lexical/src/nodes/base/__tests__/unit/LexicalTextNode.test.js +++ b/packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.js @@ -22,19 +22,19 @@ import ReactTestUtils from 'react-dom/test-utils'; import { $createTestSegmentedNode, createTestEditor, -} from '../../../../__tests__/utils'; +} from '../../../__tests__/utils'; import { IS_BOLD, IS_CODE, IS_ITALIC, IS_STRIKETHROUGH, IS_UNDERLINE, -} from '../../../../LexicalConstants'; +} from '../../../LexicalConstants'; import { $getCompositionKey, $setCompositionKey, getEditorStateTextContent, -} from '../../../../LexicalUtils'; +} from '../../../LexicalUtils'; // No idea why we suddenly need to do this, but it fixes the tests // with latest experimental React version. diff --git a/packages/lexical/src/nodes/extended/LexicalAutoLinkNode.js b/packages/lexical/src/nodes/extended/LexicalAutoLinkNode.js deleted file mode 100644 index 3b80d62d332..00000000000 --- a/packages/lexical/src/nodes/extended/LexicalAutoLinkNode.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {ElementNode, LexicalNode, RangeSelection} from 'lexical'; - -import {$isElementNode} from 'lexical'; -import {LinkNode} from 'lexical/LinkNode'; - -// Custom node type to override `canInsertTextAfter` that will -// allow typing within the link -export class AutoLinkNode extends LinkNode { - static getType(): string { - return 'autolink'; - } - - // $FlowFixMe[incompatible-extend] - static clone(node: AutoLinkNode): AutoLinkNode { - return new AutoLinkNode(node.__url, node.__key); - } - - insertNewAfter(selection: RangeSelection): null | ElementNode { - const element = this.getParentOrThrow().insertNewAfter(selection); - if ($isElementNode(element)) { - const linkNode = $createAutoLinkNode(this.__url); - element.append(linkNode); - return linkNode; - } - return null; - } -} - -export function $createAutoLinkNode(url: string): AutoLinkNode { - return new AutoLinkNode(url); -} - -export function $isAutoLinkNode(node: ?LexicalNode): boolean %checks { - return node instanceof AutoLinkNode; -} diff --git a/packages/lexical/src/nodes/extended/LexicalExtendedNodes.js b/packages/lexical/src/nodes/extended/LexicalExtendedNodes.js deleted file mode 100644 index e952793aab7..00000000000 --- a/packages/lexical/src/nodes/extended/LexicalExtendedNodes.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict - */ - -import type {LexicalNode} from 'lexical'; - -import {CodeHighlightNode, CodeNode} from '@lexical/code'; -import {HashtagNode} from '@lexical/hashtag'; -import {ListItemNode, ListNode} from '@lexical/list'; -import {HeadingNode, QuoteNode} from '@lexical/rich-text'; -import {TableCellNode, TableNode, TableRowNode} from '@lexical/table'; -import {AutoLinkNode} from 'lexical/AutoLinkNode'; -import {LinkNode} from 'lexical/LinkNode'; -import {OverflowNode} from 'lexical/OverflowNode'; - -const LexicalExtendedNodes: Array> = [ - HeadingNode, - ListNode, - ListItemNode, - QuoteNode, - CodeNode, - TableNode, - TableCellNode, - TableRowNode, - HashtagNode, - CodeHighlightNode, - AutoLinkNode, - LinkNode, - OverflowNode, -]; - -export default LexicalExtendedNodes; diff --git a/scripts/build.js b/scripts/build.js index 9a7739a25df..183e43c9877 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -61,6 +61,8 @@ if (isClean) { fs.removeSync(path.resolve('./packages/lexical-dragon/dist')); fs.removeSync(path.resolve('./packages/lexical-plain-text/dist')); fs.removeSync(path.resolve('./packages/lexical-rich-text/dist')); + fs.removeSync(path.resolve('./packages/lexical-overflow/dist')); + fs.removeSync(path.resolve('./packages/lexical-link/dist')); fs.removeSync(path.resolve('./packages/lexical-yjs/dist')); } @@ -70,8 +72,10 @@ const wwwMappings = { '@lexical/dragon': 'LexicalDragon', '@lexical/file': 'LexicalFile', '@lexical/hashtag': 'LexicalHashtag', + '@lexical/link': 'LexicalLink', '@lexical/list': 'LexicalList', '@lexical/offset': 'LexicalOffset', + '@lexical/overflow': 'LexicalOverflow', '@lexical/plain-text': 'LexicalPlainText', '@lexical/rich-text': 'LexicalRichText', '@lexical/selection': 'LexicalSelection', @@ -83,16 +87,6 @@ const wwwMappings = { 'react-dom': 'ReactDOMComet', }; -const lexicalNodes = fs - .readdirSync(path.resolve('./packages/lexical/src/nodes/extended')) - .map((str) => path.basename(str, '.js')) - .filter((str) => !str.includes('__tests__') && !str.includes('test-utils')); -const lexicalNodesExternals = lexicalNodes.map((node) => { - const external = `lexical/${node.replace('Lexical', '')}`; - wwwMappings[external] = node; - return external; -}); - const lexicalShared = fs .readdirSync(path.resolve('./packages/shared/src')) .map((str) => path.basename(str, '.js')); @@ -129,11 +123,12 @@ const externals = [ '@lexical/plain-text', '@lexical/rich-text', '@lexical/dragon', + '@lexical/overflow', + '@lexical/link', 'react-dom', 'react', 'yjs', 'y-websocket', - ...lexicalNodesExternals, ...lexicalReactModuleExternals, ...Object.values(wwwMappings), ]; @@ -433,6 +428,28 @@ const packages = [ outputPath: './packages/lexical-dragon/dist/', sourcePath: './packages/lexical-dragon/src/', }, + { + modules: [ + { + outputFileName: 'LexicalLink', + sourceFileName: 'index.js', + }, + ], + name: 'Lexical Link', + outputPath: './packages/lexical-link/dist/', + sourcePath: './packages/lexical-link/src/', + }, + { + modules: [ + { + outputFileName: 'LexicalOverflow', + sourceFileName: 'index.js', + }, + ], + name: 'Lexical Overflow', + outputPath: './packages/lexical-overflow/dist/', + sourcePath: './packages/lexical-overflow/src/', + }, { modules: [ { @@ -455,16 +472,6 @@ const packages = [ outputPath: './packages/lexical-rich-text/dist/', sourcePath: './packages/lexical-rich-text/src/', }, - { - modules: lexicalNodes.map((module) => ({ - name: module, - outputFileName: module, - sourceFileName: module, - })), - name: 'Lexical Core Nodes', - outputPath: './packages/lexical/dist/', - sourcePath: './packages/lexical/src/nodes/extended/', - }, { modules: lexicalShared.map((module) => ({ name: module, diff --git a/scripts/npm/packages.js b/scripts/npm/packages.js index 8b4b2ea984d..fcc439ecc70 100644 --- a/scripts/npm/packages.js +++ b/scripts/npm/packages.js @@ -27,6 +27,8 @@ const DEFAULT_PKGS = [ 'lexical-rich-text', 'lexical-utils', 'lexical-dragon', + 'lexical-overflow', + 'lexical-link', 'lexical-text', ]; diff --git a/scripts/updateVersion.js b/scripts/updateVersion.js index b77ea41c076..aef233cc80d 100644 --- a/scripts/updateVersion.js +++ b/scripts/updateVersion.js @@ -15,8 +15,10 @@ const packages = { '@lexical/dragon': 'lexical-dragon', '@lexical/file': 'lexical-file', '@lexical/hashtag': 'lexical-hashtag', + '@lexical/link': 'lexical-link', '@lexical/list': 'lexical-list', '@lexical/offset': 'lexical-offset', + '@lexical/overflow': 'lexical-overflow', '@lexical/plain-text': 'lexical-plain-text', '@lexical/react': 'lexical-react', '@lexical/rich-text': 'lexical-rich-text',