@lexical/plain-text 0.44.1-nightly.20260519.0 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LexicalPlainText.dev.js → dist/LexicalPlainText.dev.js} +3 -36
- package/{LexicalPlainText.dev.mjs → dist/LexicalPlainText.dev.mjs} +3 -36
- package/dist/LexicalPlainText.prod.js +9 -0
- package/dist/LexicalPlainText.prod.mjs +9 -0
- package/package.json +34 -20
- package/src/index.ts +434 -0
- package/LexicalPlainText.prod.js +0 -9
- package/LexicalPlainText.prod.mjs +0 -9
- /package/{LexicalPlainText.js → dist/LexicalPlainText.js} +0 -0
- /package/{LexicalPlainText.js.flow → dist/LexicalPlainText.js.flow} +0 -0
- /package/{LexicalPlainText.mjs → dist/LexicalPlainText.mjs} +0 -0
- /package/{LexicalPlainText.node.mjs → dist/LexicalPlainText.node.mjs} +0 -0
- /package/{index.d.ts → dist/index.d.ts} +0 -0
|
@@ -15,39 +15,6 @@ var selection = require('@lexical/selection');
|
|
|
15
15
|
var utils = require('@lexical/utils');
|
|
16
16
|
var lexical = require('lexical');
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
20
|
-
*
|
|
21
|
-
* This source code is licensed under the MIT license found in the
|
|
22
|
-
* LICENSE file in the root directory of this source tree.
|
|
23
|
-
*
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
const CAN_USE_DOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
30
|
-
*
|
|
31
|
-
* This source code is licensed under the MIT license found in the
|
|
32
|
-
* LICENSE file in the root directory of this source tree.
|
|
33
|
-
*
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
const documentMode = CAN_USE_DOM && 'documentMode' in document ? document.documentMode : null;
|
|
37
|
-
const IS_APPLE = CAN_USE_DOM && /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
|
38
|
-
const CAN_USE_BEFORE_INPUT = CAN_USE_DOM && 'InputEvent' in window && !documentMode ? 'getTargetRanges' in new window.InputEvent('input') : false;
|
|
39
|
-
const IS_IOS = CAN_USE_DOM && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
40
|
-
const IS_ANDROID = CAN_USE_DOM && /Android/.test(navigator.userAgent);
|
|
41
|
-
|
|
42
|
-
// Exclude Android — Android WebView's UA contains "Version/X.X ... Safari/537.36"
|
|
43
|
-
// which falsely matches the Safari regex, activating wrong composition code paths.
|
|
44
|
-
const IS_SAFARI = CAN_USE_DOM && /Version\/[\d.]+.*Safari/.test(navigator.userAgent) && !IS_ANDROID;
|
|
45
|
-
|
|
46
|
-
// Keep these in case we need to use them in the future.
|
|
47
|
-
// export const IS_WINDOWS: boolean = CAN_USE_DOM && /Win/.test(navigator.platform);
|
|
48
|
-
const IS_CHROME = CAN_USE_DOM && /^(?=.*Chrome).*/i.test(navigator.userAgent);
|
|
49
|
-
const IS_APPLE_WEBKIT = CAN_USE_DOM && /AppleWebKit\/[\d.]+/.test(navigator.userAgent) && IS_APPLE && !IS_CHROME;
|
|
50
|
-
|
|
51
18
|
/**
|
|
52
19
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
53
20
|
*
|
|
@@ -189,7 +156,7 @@ function registerPlainText(editor) {
|
|
|
189
156
|
|
|
190
157
|
// Exception handling for iOS native behavior instead of Lexical's behavior when using Korean on iOS devices.
|
|
191
158
|
// more details - https://github.com/facebook/lexical/issues/5841
|
|
192
|
-
if (IS_IOS && navigator.language === 'ko-KR') {
|
|
159
|
+
if (lexical.IS_IOS && navigator.language === 'ko-KR') {
|
|
193
160
|
return false;
|
|
194
161
|
}
|
|
195
162
|
event.preventDefault();
|
|
@@ -214,7 +181,7 @@ function registerPlainText(editor) {
|
|
|
214
181
|
// This can also cause a strange performance issue in
|
|
215
182
|
// Safari, where there is a noticeable pause due to
|
|
216
183
|
// preventing the key down of enter.
|
|
217
|
-
if ((IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) && CAN_USE_BEFORE_INPUT) {
|
|
184
|
+
if ((lexical.IS_IOS || lexical.IS_SAFARI || lexical.IS_APPLE_WEBKIT) && lexical.CAN_USE_BEFORE_INPUT) {
|
|
218
185
|
return false;
|
|
219
186
|
}
|
|
220
187
|
event.preventDefault();
|
|
@@ -264,7 +231,7 @@ function registerPlainText(editor) {
|
|
|
264
231
|
*/
|
|
265
232
|
const PlainTextExtension = lexical.defineExtension({
|
|
266
233
|
conflictsWith: ['@lexical/rich-text'],
|
|
267
|
-
dependencies: [dragon.DragonExtension, extension.NormalizeInlineElementsExtension],
|
|
234
|
+
dependencies: [dragon.DragonExtension, extension.NormalizeInlineElementsExtension, extension.NormalizeTripleClickSelectionExtension],
|
|
268
235
|
name: '@lexical/plain-text',
|
|
269
236
|
register: registerPlainText
|
|
270
237
|
});
|
|
@@ -8,43 +8,10 @@
|
|
|
8
8
|
|
|
9
9
|
import { $insertDataTransferForPlainText, $handlePlainTextDrop, $writeDragSourceToDataTransfer, $getHtmlContent } from '@lexical/clipboard';
|
|
10
10
|
import { DragonExtension } from '@lexical/dragon';
|
|
11
|
-
import { NormalizeInlineElementsExtension } from '@lexical/extension';
|
|
11
|
+
import { NormalizeInlineElementsExtension, NormalizeTripleClickSelectionExtension } from '@lexical/extension';
|
|
12
12
|
import { $shouldOverrideDefaultCharacterSelection, $moveCharacter } from '@lexical/selection';
|
|
13
13
|
import { mergeRegister, objectKlassEquals } from '@lexical/utils';
|
|
14
|
-
import { defineExtension, DELETE_CHARACTER_COMMAND, $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, DELETE_WORD_COMMAND, DELETE_LINE_COMMAND, CONTROLLED_TEXT_INSERTION_COMMAND, REMOVE_TEXT_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND, KEY_ENTER_COMMAND, SELECT_ALL_COMMAND, $selectAll, COPY_COMMAND, CUT_COMMAND, PASTE_COMMAND, DROP_COMMAND, DRAGSTART_COMMAND, PASTE_TAG } from 'lexical';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the MIT license found in the
|
|
20
|
-
* LICENSE file in the root directory of this source tree.
|
|
21
|
-
*
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const CAN_USE_DOM = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined';
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the MIT license found in the
|
|
30
|
-
* LICENSE file in the root directory of this source tree.
|
|
31
|
-
*
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
const documentMode = CAN_USE_DOM && 'documentMode' in document ? document.documentMode : null;
|
|
35
|
-
const IS_APPLE = CAN_USE_DOM && /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
|
36
|
-
const CAN_USE_BEFORE_INPUT = CAN_USE_DOM && 'InputEvent' in window && !documentMode ? 'getTargetRanges' in new window.InputEvent('input') : false;
|
|
37
|
-
const IS_IOS = CAN_USE_DOM && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
|
38
|
-
const IS_ANDROID = CAN_USE_DOM && /Android/.test(navigator.userAgent);
|
|
39
|
-
|
|
40
|
-
// Exclude Android — Android WebView's UA contains "Version/X.X ... Safari/537.36"
|
|
41
|
-
// which falsely matches the Safari regex, activating wrong composition code paths.
|
|
42
|
-
const IS_SAFARI = CAN_USE_DOM && /Version\/[\d.]+.*Safari/.test(navigator.userAgent) && !IS_ANDROID;
|
|
43
|
-
|
|
44
|
-
// Keep these in case we need to use them in the future.
|
|
45
|
-
// export const IS_WINDOWS: boolean = CAN_USE_DOM && /Win/.test(navigator.platform);
|
|
46
|
-
const IS_CHROME = CAN_USE_DOM && /^(?=.*Chrome).*/i.test(navigator.userAgent);
|
|
47
|
-
const IS_APPLE_WEBKIT = CAN_USE_DOM && /AppleWebKit\/[\d.]+/.test(navigator.userAgent) && IS_APPLE && !IS_CHROME;
|
|
14
|
+
import { defineExtension, DELETE_CHARACTER_COMMAND, $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, DELETE_WORD_COMMAND, DELETE_LINE_COMMAND, CONTROLLED_TEXT_INSERTION_COMMAND, REMOVE_TEXT_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_BACKSPACE_COMMAND, IS_IOS, KEY_DELETE_COMMAND, KEY_ENTER_COMMAND, IS_SAFARI, IS_APPLE_WEBKIT, CAN_USE_BEFORE_INPUT, SELECT_ALL_COMMAND, $selectAll, COPY_COMMAND, CUT_COMMAND, PASTE_COMMAND, DROP_COMMAND, DRAGSTART_COMMAND, PASTE_TAG } from 'lexical';
|
|
48
15
|
|
|
49
16
|
/**
|
|
50
17
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
@@ -262,7 +229,7 @@ function registerPlainText(editor) {
|
|
|
262
229
|
*/
|
|
263
230
|
const PlainTextExtension = defineExtension({
|
|
264
231
|
conflictsWith: ['@lexical/rich-text'],
|
|
265
|
-
dependencies: [DragonExtension, NormalizeInlineElementsExtension],
|
|
232
|
+
dependencies: [DragonExtension, NormalizeInlineElementsExtension, NormalizeTripleClickSelectionExtension],
|
|
266
233
|
name: '@lexical/plain-text',
|
|
267
234
|
register: registerPlainText
|
|
268
235
|
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
"use strict";var e=require("@lexical/clipboard"),t=require("@lexical/dragon"),n=require("@lexical/extension"),r=require("@lexical/selection"),i=require("@lexical/utils"),a=require("lexical");function o(t,n){n.update(()=>{if(null!==t){const r=i.objectKlassEquals(t,KeyboardEvent)?null:t.clipboardData,o=a.$getSelection();if(null!==o&&!o.isCollapsed()&&null!=r){t.preventDefault();const i=e.$getHtmlContent(n);null!==i&&r.setData("text/html",i),r.setData("text/plain",o.getTextContent())}}})}function l(t){const n=i.mergeRegister(t.registerCommand(a.DELETE_CHARACTER_COMMAND,e=>{const t=a.$getSelection();return!!a.$isRangeSelection(t)&&(t.deleteCharacter(e),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.DELETE_WORD_COMMAND,e=>{const t=a.$getSelection();return!!a.$isRangeSelection(t)&&(t.deleteWord(e),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.DELETE_LINE_COMMAND,e=>{const t=a.$getSelection();return!!a.$isRangeSelection(t)&&(t.deleteLine(e),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.CONTROLLED_TEXT_INSERTION_COMMAND,t=>{const n=a.$getSelection();if(!a.$isRangeSelection(n))return!1;if("string"==typeof t)n.insertText(t);else{const r=t.dataTransfer;if(null!=r)e.$insertDataTransferForPlainText(r,n);else{const e=t.data;e&&n.insertText(e)}}return!0},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.REMOVE_TEXT_COMMAND,()=>{const e=a.$getSelection();return!!a.$isRangeSelection(e)&&(e.removeText(),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.INSERT_LINE_BREAK_COMMAND,e=>{const t=a.$getSelection();return!!a.$isRangeSelection(t)&&(t.insertLineBreak(e),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.INSERT_PARAGRAPH_COMMAND,()=>{const e=a.$getSelection();return!!a.$isRangeSelection(e)&&(e.insertLineBreak(),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.KEY_ARROW_LEFT_COMMAND,e=>{const t=a.$getSelection();if(!a.$isRangeSelection(t))return!1;const n=e,i=n.shiftKey;return!!r.$shouldOverrideDefaultCharacterSelection(t,!0)&&(n.preventDefault(),r.$moveCharacter(t,i,!0),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.KEY_ARROW_RIGHT_COMMAND,e=>{const t=a.$getSelection();if(!a.$isRangeSelection(t))return!1;const n=e,i=n.shiftKey;return!!r.$shouldOverrideDefaultCharacterSelection(t,!1)&&(n.preventDefault(),r.$moveCharacter(t,i,!1),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.KEY_BACKSPACE_COMMAND,e=>{const n=a.$getSelection();return!!a.$isRangeSelection(n)&&((!a.IS_IOS||"ko-KR"!==navigator.language)&&(e.preventDefault(),t.dispatchCommand(a.DELETE_CHARACTER_COMMAND,!0)))},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.KEY_DELETE_COMMAND,e=>{const n=a.$getSelection();return!!a.$isRangeSelection(n)&&(e.preventDefault(),t.dispatchCommand(a.DELETE_CHARACTER_COMMAND,!1))},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.KEY_ENTER_COMMAND,e=>{const n=a.$getSelection();if(!a.$isRangeSelection(n))return!1;if(null!==e){if((a.IS_IOS||a.IS_SAFARI||a.IS_APPLE_WEBKIT)&&a.CAN_USE_BEFORE_INPUT)return!1;e.preventDefault()}return t.dispatchCommand(a.INSERT_LINE_BREAK_COMMAND,!1)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.SELECT_ALL_COMMAND,()=>(a.$selectAll(),!0),a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.COPY_COMMAND,e=>{const n=a.$getSelection();return!!a.$isRangeSelection(n)&&(o(e,t),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.CUT_COMMAND,e=>{const n=a.$getSelection();return!!a.$isRangeSelection(n)&&(function(e,t){o(e,t),t.update(()=>{const e=a.$getSelection();a.$isRangeSelection(e)&&e.removeText()})}(e,t),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.PASTE_COMMAND,n=>{const r=a.$getSelection();return!!a.$isRangeSelection(r)&&(function(t,n){t.preventDefault(),n.update(()=>{const n=a.$getSelection(),r=i.objectKlassEquals(t,ClipboardEvent)?t.clipboardData:null;null!=r&&a.$isRangeSelection(n)&&e.$insertDataTransferForPlainText(r,n)},{tag:a.PASTE_TAG})}(n,t),!0)},a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.DROP_COMMAND,n=>e.$handlePlainTextDrop(n,t),a.COMMAND_PRIORITY_EDITOR),t.registerCommand(a.DRAGSTART_COMMAND,n=>{const r=a.$getSelection();return!!a.$isRangeSelection(r)&&(r.isCollapsed()||null===n.dataTransfer||e.$writeDragSourceToDataTransfer(n.dataTransfer,t),!0)},a.COMMAND_PRIORITY_EDITOR));return n}const s=a.defineExtension({conflictsWith:["@lexical/rich-text"],dependencies:[t.DragonExtension,n.NormalizeInlineElementsExtension,n.NormalizeTripleClickSelectionExtension],name:"@lexical/plain-text",register:l});exports.PlainTextExtension=s,exports.registerPlainText=l;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import{$insertDataTransferForPlainText as e,$handlePlainTextDrop as t,$writeDragSourceToDataTransfer as r,$getHtmlContent as n}from"@lexical/clipboard";import{DragonExtension as a}from"@lexical/dragon";import{NormalizeInlineElementsExtension as o,NormalizeTripleClickSelectionExtension as i}from"@lexical/extension";import{$shouldOverrideDefaultCharacterSelection as s,$moveCharacter as l}from"@lexical/selection";import{mergeRegister as m,objectKlassEquals as c}from"@lexical/utils";import{defineExtension as u,DELETE_CHARACTER_COMMAND as d,$getSelection as f,$isRangeSelection as p,COMMAND_PRIORITY_EDITOR as g,DELETE_WORD_COMMAND as C,DELETE_LINE_COMMAND as x,CONTROLLED_TEXT_INSERTION_COMMAND as v,REMOVE_TEXT_COMMAND as D,INSERT_LINE_BREAK_COMMAND as h,INSERT_PARAGRAPH_COMMAND as T,KEY_ARROW_LEFT_COMMAND as b,KEY_ARROW_RIGHT_COMMAND as y,KEY_BACKSPACE_COMMAND as K,IS_IOS as k,KEY_DELETE_COMMAND as L,KEY_ENTER_COMMAND as B,IS_SAFARI as E,IS_APPLE_WEBKIT as W,CAN_USE_BEFORE_INPUT as R,SELECT_ALL_COMMAND as j,$selectAll as q,COPY_COMMAND as w,CUT_COMMAND as z,PASTE_COMMAND as A,DROP_COMMAND as F,DRAGSTART_COMMAND as G,PASTE_TAG as H}from"lexical";function I(e,t){t.update(()=>{if(null!==e){const r=c(e,KeyboardEvent)?null:e.clipboardData,a=f();if(null!==a&&!a.isCollapsed()&&null!=r){e.preventDefault();const o=n(t);null!==o&&r.setData("text/html",o),r.setData("text/plain",a.getTextContent())}}})}function J(n){return m(n.registerCommand(d,e=>{const t=f();return!!p(t)&&(t.deleteCharacter(e),!0)},g),n.registerCommand(C,e=>{const t=f();return!!p(t)&&(t.deleteWord(e),!0)},g),n.registerCommand(x,e=>{const t=f();return!!p(t)&&(t.deleteLine(e),!0)},g),n.registerCommand(v,t=>{const r=f();if(!p(r))return!1;if("string"==typeof t)r.insertText(t);else{const n=t.dataTransfer;if(null!=n)e(n,r);else{const e=t.data;e&&r.insertText(e)}}return!0},g),n.registerCommand(D,()=>{const e=f();return!!p(e)&&(e.removeText(),!0)},g),n.registerCommand(h,e=>{const t=f();return!!p(t)&&(t.insertLineBreak(e),!0)},g),n.registerCommand(T,()=>{const e=f();return!!p(e)&&(e.insertLineBreak(),!0)},g),n.registerCommand(b,e=>{const t=f();if(!p(t))return!1;const r=e,n=r.shiftKey;return!!s(t,!0)&&(r.preventDefault(),l(t,n,!0),!0)},g),n.registerCommand(y,e=>{const t=f();if(!p(t))return!1;const r=e,n=r.shiftKey;return!!s(t,!1)&&(r.preventDefault(),l(t,n,!1),!0)},g),n.registerCommand(K,e=>{const t=f();return!!p(t)&&((!k||"ko-KR"!==navigator.language)&&(e.preventDefault(),n.dispatchCommand(d,!0)))},g),n.registerCommand(L,e=>{const t=f();return!!p(t)&&(e.preventDefault(),n.dispatchCommand(d,!1))},g),n.registerCommand(B,e=>{const t=f();if(!p(t))return!1;if(null!==e){if((k||E||W)&&R)return!1;e.preventDefault()}return n.dispatchCommand(h,!1)},g),n.registerCommand(j,()=>(q(),!0),g),n.registerCommand(w,e=>{const t=f();return!!p(t)&&(I(e,n),!0)},g),n.registerCommand(z,e=>{const t=f();return!!p(t)&&(function(e,t){I(e,t),t.update(()=>{const e=f();p(e)&&e.removeText()})}(e,n),!0)},g),n.registerCommand(A,t=>{const r=f();return!!p(r)&&(function(t,r){t.preventDefault(),r.update(()=>{const r=f(),n=c(t,ClipboardEvent)?t.clipboardData:null;null!=n&&p(r)&&e(n,r)},{tag:H})}(t,n),!0)},g),n.registerCommand(F,e=>t(e,n),g),n.registerCommand(G,e=>{const t=f();return!!p(t)&&(t.isCollapsed()||null===e.dataTransfer||r(e.dataTransfer,n),!0)},g))}const M=u({conflictsWith:["@lexical/rich-text"],dependencies:[a,o,i],name:"@lexical/plain-text",register:J});export{M as PlainTextExtension,J as registerPlainText};
|
package/package.json
CHANGED
|
@@ -7,39 +7,53 @@
|
|
|
7
7
|
"plain-text"
|
|
8
8
|
],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
11
|
-
"main": "LexicalPlainText.js",
|
|
12
|
-
"types": "index.d.ts",
|
|
10
|
+
"version": "0.45.0",
|
|
11
|
+
"main": "./dist/LexicalPlainText.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "git+https://github.com/facebook/lexical.git",
|
|
16
16
|
"directory": "packages/lexical-plain-text"
|
|
17
17
|
},
|
|
18
|
-
"module": "LexicalPlainText.mjs",
|
|
18
|
+
"module": "./dist/LexicalPlainText.mjs",
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"exports": {
|
|
21
21
|
".": {
|
|
22
|
+
"source": "./src/index.ts",
|
|
22
23
|
"import": {
|
|
23
|
-
"types": "./index.d.ts",
|
|
24
|
-
"development": "./LexicalPlainText.dev.mjs",
|
|
25
|
-
"production": "./LexicalPlainText.prod.mjs",
|
|
26
|
-
"node": "./LexicalPlainText.node.mjs",
|
|
27
|
-
"default": "./LexicalPlainText.mjs"
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"development": "./dist/LexicalPlainText.dev.mjs",
|
|
26
|
+
"production": "./dist/LexicalPlainText.prod.mjs",
|
|
27
|
+
"node": "./dist/LexicalPlainText.node.mjs",
|
|
28
|
+
"default": "./dist/LexicalPlainText.mjs"
|
|
28
29
|
},
|
|
29
30
|
"require": {
|
|
30
|
-
"types": "./index.d.ts",
|
|
31
|
-
"development": "./LexicalPlainText.dev.js",
|
|
32
|
-
"production": "./LexicalPlainText.prod.js",
|
|
33
|
-
"default": "./LexicalPlainText.js"
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"development": "./dist/LexicalPlainText.dev.js",
|
|
33
|
+
"production": "./dist/LexicalPlainText.prod.js",
|
|
34
|
+
"default": "./dist/LexicalPlainText.js"
|
|
34
35
|
}
|
|
35
36
|
}
|
|
36
37
|
},
|
|
37
38
|
"dependencies": {
|
|
38
|
-
"@lexical/clipboard": "0.
|
|
39
|
-
"@lexical/
|
|
40
|
-
"@lexical/extension": "0.
|
|
41
|
-
"@lexical/selection": "0.
|
|
42
|
-
"
|
|
43
|
-
"lexical": "0.
|
|
44
|
-
}
|
|
39
|
+
"@lexical/clipboard": "0.45.0",
|
|
40
|
+
"@lexical/utils": "0.45.0",
|
|
41
|
+
"@lexical/extension": "0.45.0",
|
|
42
|
+
"@lexical/selection": "0.45.0",
|
|
43
|
+
"lexical": "0.45.0",
|
|
44
|
+
"@lexical/dragon": "0.45.0"
|
|
45
|
+
},
|
|
46
|
+
"files": [
|
|
47
|
+
"dist",
|
|
48
|
+
"src",
|
|
49
|
+
"!src/__tests__",
|
|
50
|
+
"!src/__bench__",
|
|
51
|
+
"!src/__mocks__",
|
|
52
|
+
"!src/**/*.test.ts",
|
|
53
|
+
"!src/**/*.test.tsx",
|
|
54
|
+
"!src/**/*.bench.ts",
|
|
55
|
+
"!src/**/*.bench.tsx",
|
|
56
|
+
"README.md",
|
|
57
|
+
"LICENSE"
|
|
58
|
+
]
|
|
45
59
|
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type {CommandPayloadType, LexicalEditor} from 'lexical';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
$getHtmlContent,
|
|
13
|
+
$handlePlainTextDrop,
|
|
14
|
+
$insertDataTransferForPlainText,
|
|
15
|
+
$writeDragSourceToDataTransfer,
|
|
16
|
+
} from '@lexical/clipboard';
|
|
17
|
+
import {DragonExtension} from '@lexical/dragon';
|
|
18
|
+
import {
|
|
19
|
+
NormalizeInlineElementsExtension,
|
|
20
|
+
NormalizeTripleClickSelectionExtension,
|
|
21
|
+
} from '@lexical/extension';
|
|
22
|
+
import {
|
|
23
|
+
$moveCharacter,
|
|
24
|
+
$shouldOverrideDefaultCharacterSelection,
|
|
25
|
+
} from '@lexical/selection';
|
|
26
|
+
import {mergeRegister, objectKlassEquals} from '@lexical/utils';
|
|
27
|
+
import {
|
|
28
|
+
$getSelection,
|
|
29
|
+
$isRangeSelection,
|
|
30
|
+
$selectAll,
|
|
31
|
+
CAN_USE_BEFORE_INPUT,
|
|
32
|
+
COMMAND_PRIORITY_EDITOR,
|
|
33
|
+
CONTROLLED_TEXT_INSERTION_COMMAND,
|
|
34
|
+
COPY_COMMAND,
|
|
35
|
+
CUT_COMMAND,
|
|
36
|
+
defineExtension,
|
|
37
|
+
DELETE_CHARACTER_COMMAND,
|
|
38
|
+
DELETE_LINE_COMMAND,
|
|
39
|
+
DELETE_WORD_COMMAND,
|
|
40
|
+
DRAGSTART_COMMAND,
|
|
41
|
+
DROP_COMMAND,
|
|
42
|
+
INSERT_LINE_BREAK_COMMAND,
|
|
43
|
+
INSERT_PARAGRAPH_COMMAND,
|
|
44
|
+
IS_APPLE_WEBKIT,
|
|
45
|
+
IS_IOS,
|
|
46
|
+
IS_SAFARI,
|
|
47
|
+
KEY_ARROW_LEFT_COMMAND,
|
|
48
|
+
KEY_ARROW_RIGHT_COMMAND,
|
|
49
|
+
KEY_BACKSPACE_COMMAND,
|
|
50
|
+
KEY_DELETE_COMMAND,
|
|
51
|
+
KEY_ENTER_COMMAND,
|
|
52
|
+
PASTE_COMMAND,
|
|
53
|
+
PASTE_TAG,
|
|
54
|
+
REMOVE_TEXT_COMMAND,
|
|
55
|
+
SELECT_ALL_COMMAND,
|
|
56
|
+
} from 'lexical';
|
|
57
|
+
|
|
58
|
+
function onCopyForPlainText(
|
|
59
|
+
event: CommandPayloadType<typeof COPY_COMMAND>,
|
|
60
|
+
editor: LexicalEditor,
|
|
61
|
+
): void {
|
|
62
|
+
editor.update(() => {
|
|
63
|
+
if (event !== null) {
|
|
64
|
+
const clipboardData = objectKlassEquals(event, KeyboardEvent)
|
|
65
|
+
? null
|
|
66
|
+
: event.clipboardData;
|
|
67
|
+
const selection = $getSelection();
|
|
68
|
+
|
|
69
|
+
if (
|
|
70
|
+
selection !== null &&
|
|
71
|
+
!selection.isCollapsed() &&
|
|
72
|
+
clipboardData != null
|
|
73
|
+
) {
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
const htmlString = $getHtmlContent(editor);
|
|
76
|
+
|
|
77
|
+
if (htmlString !== null) {
|
|
78
|
+
clipboardData.setData('text/html', htmlString);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
clipboardData.setData('text/plain', selection.getTextContent());
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function onPasteForPlainText(
|
|
88
|
+
event: CommandPayloadType<typeof PASTE_COMMAND>,
|
|
89
|
+
editor: LexicalEditor,
|
|
90
|
+
): void {
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
editor.update(
|
|
93
|
+
() => {
|
|
94
|
+
const selection = $getSelection();
|
|
95
|
+
const clipboardData = objectKlassEquals(event, ClipboardEvent)
|
|
96
|
+
? event.clipboardData
|
|
97
|
+
: null;
|
|
98
|
+
if (clipboardData != null && $isRangeSelection(selection)) {
|
|
99
|
+
$insertDataTransferForPlainText(clipboardData, selection);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
tag: PASTE_TAG,
|
|
104
|
+
},
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function onCutForPlainText(
|
|
109
|
+
event: CommandPayloadType<typeof CUT_COMMAND>,
|
|
110
|
+
editor: LexicalEditor,
|
|
111
|
+
): void {
|
|
112
|
+
onCopyForPlainText(event, editor);
|
|
113
|
+
editor.update(() => {
|
|
114
|
+
const selection = $getSelection();
|
|
115
|
+
|
|
116
|
+
if ($isRangeSelection(selection)) {
|
|
117
|
+
selection.removeText();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function registerPlainText(editor: LexicalEditor): () => void {
|
|
123
|
+
const removeListener = mergeRegister(
|
|
124
|
+
editor.registerCommand<boolean>(
|
|
125
|
+
DELETE_CHARACTER_COMMAND,
|
|
126
|
+
isBackward => {
|
|
127
|
+
const selection = $getSelection();
|
|
128
|
+
|
|
129
|
+
if (!$isRangeSelection(selection)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
selection.deleteCharacter(isBackward);
|
|
134
|
+
return true;
|
|
135
|
+
},
|
|
136
|
+
COMMAND_PRIORITY_EDITOR,
|
|
137
|
+
),
|
|
138
|
+
editor.registerCommand<boolean>(
|
|
139
|
+
DELETE_WORD_COMMAND,
|
|
140
|
+
isBackward => {
|
|
141
|
+
const selection = $getSelection();
|
|
142
|
+
|
|
143
|
+
if (!$isRangeSelection(selection)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
selection.deleteWord(isBackward);
|
|
148
|
+
return true;
|
|
149
|
+
},
|
|
150
|
+
COMMAND_PRIORITY_EDITOR,
|
|
151
|
+
),
|
|
152
|
+
editor.registerCommand<boolean>(
|
|
153
|
+
DELETE_LINE_COMMAND,
|
|
154
|
+
isBackward => {
|
|
155
|
+
const selection = $getSelection();
|
|
156
|
+
|
|
157
|
+
if (!$isRangeSelection(selection)) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
selection.deleteLine(isBackward);
|
|
162
|
+
return true;
|
|
163
|
+
},
|
|
164
|
+
COMMAND_PRIORITY_EDITOR,
|
|
165
|
+
),
|
|
166
|
+
editor.registerCommand<InputEvent | string>(
|
|
167
|
+
CONTROLLED_TEXT_INSERTION_COMMAND,
|
|
168
|
+
eventOrText => {
|
|
169
|
+
const selection = $getSelection();
|
|
170
|
+
|
|
171
|
+
if (!$isRangeSelection(selection)) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (typeof eventOrText === 'string') {
|
|
176
|
+
selection.insertText(eventOrText);
|
|
177
|
+
} else {
|
|
178
|
+
const dataTransfer = eventOrText.dataTransfer;
|
|
179
|
+
|
|
180
|
+
if (dataTransfer != null) {
|
|
181
|
+
$insertDataTransferForPlainText(dataTransfer, selection);
|
|
182
|
+
} else {
|
|
183
|
+
const data = eventOrText.data;
|
|
184
|
+
|
|
185
|
+
if (data) {
|
|
186
|
+
selection.insertText(data);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return true;
|
|
192
|
+
},
|
|
193
|
+
COMMAND_PRIORITY_EDITOR,
|
|
194
|
+
),
|
|
195
|
+
editor.registerCommand(
|
|
196
|
+
REMOVE_TEXT_COMMAND,
|
|
197
|
+
() => {
|
|
198
|
+
const selection = $getSelection();
|
|
199
|
+
|
|
200
|
+
if (!$isRangeSelection(selection)) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
selection.removeText();
|
|
205
|
+
return true;
|
|
206
|
+
},
|
|
207
|
+
COMMAND_PRIORITY_EDITOR,
|
|
208
|
+
),
|
|
209
|
+
editor.registerCommand<boolean>(
|
|
210
|
+
INSERT_LINE_BREAK_COMMAND,
|
|
211
|
+
selectStart => {
|
|
212
|
+
const selection = $getSelection();
|
|
213
|
+
|
|
214
|
+
if (!$isRangeSelection(selection)) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
selection.insertLineBreak(selectStart);
|
|
219
|
+
return true;
|
|
220
|
+
},
|
|
221
|
+
COMMAND_PRIORITY_EDITOR,
|
|
222
|
+
),
|
|
223
|
+
editor.registerCommand(
|
|
224
|
+
INSERT_PARAGRAPH_COMMAND,
|
|
225
|
+
() => {
|
|
226
|
+
const selection = $getSelection();
|
|
227
|
+
|
|
228
|
+
if (!$isRangeSelection(selection)) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
selection.insertLineBreak();
|
|
233
|
+
return true;
|
|
234
|
+
},
|
|
235
|
+
COMMAND_PRIORITY_EDITOR,
|
|
236
|
+
),
|
|
237
|
+
editor.registerCommand<KeyboardEvent>(
|
|
238
|
+
KEY_ARROW_LEFT_COMMAND,
|
|
239
|
+
payload => {
|
|
240
|
+
const selection = $getSelection();
|
|
241
|
+
|
|
242
|
+
if (!$isRangeSelection(selection)) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const event = payload;
|
|
247
|
+
const isHoldingShift = event.shiftKey;
|
|
248
|
+
|
|
249
|
+
if ($shouldOverrideDefaultCharacterSelection(selection, true)) {
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
$moveCharacter(selection, isHoldingShift, true);
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return false;
|
|
256
|
+
},
|
|
257
|
+
COMMAND_PRIORITY_EDITOR,
|
|
258
|
+
),
|
|
259
|
+
editor.registerCommand<KeyboardEvent>(
|
|
260
|
+
KEY_ARROW_RIGHT_COMMAND,
|
|
261
|
+
payload => {
|
|
262
|
+
const selection = $getSelection();
|
|
263
|
+
|
|
264
|
+
if (!$isRangeSelection(selection)) {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const event = payload;
|
|
269
|
+
const isHoldingShift = event.shiftKey;
|
|
270
|
+
|
|
271
|
+
if ($shouldOverrideDefaultCharacterSelection(selection, false)) {
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
$moveCharacter(selection, isHoldingShift, false);
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return false;
|
|
278
|
+
},
|
|
279
|
+
COMMAND_PRIORITY_EDITOR,
|
|
280
|
+
),
|
|
281
|
+
editor.registerCommand<KeyboardEvent>(
|
|
282
|
+
KEY_BACKSPACE_COMMAND,
|
|
283
|
+
event => {
|
|
284
|
+
const selection = $getSelection();
|
|
285
|
+
|
|
286
|
+
if (!$isRangeSelection(selection)) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Exception handling for iOS native behavior instead of Lexical's behavior when using Korean on iOS devices.
|
|
291
|
+
// more details - https://github.com/facebook/lexical/issues/5841
|
|
292
|
+
if (IS_IOS && navigator.language === 'ko-KR') {
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
event.preventDefault();
|
|
297
|
+
return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, true);
|
|
298
|
+
},
|
|
299
|
+
COMMAND_PRIORITY_EDITOR,
|
|
300
|
+
),
|
|
301
|
+
editor.registerCommand<KeyboardEvent>(
|
|
302
|
+
KEY_DELETE_COMMAND,
|
|
303
|
+
event => {
|
|
304
|
+
const selection = $getSelection();
|
|
305
|
+
|
|
306
|
+
if (!$isRangeSelection(selection)) {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
event.preventDefault();
|
|
311
|
+
return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, false);
|
|
312
|
+
},
|
|
313
|
+
COMMAND_PRIORITY_EDITOR,
|
|
314
|
+
),
|
|
315
|
+
editor.registerCommand<KeyboardEvent | null>(
|
|
316
|
+
KEY_ENTER_COMMAND,
|
|
317
|
+
event => {
|
|
318
|
+
const selection = $getSelection();
|
|
319
|
+
|
|
320
|
+
if (!$isRangeSelection(selection)) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (event !== null) {
|
|
325
|
+
// If we have beforeinput, then we can avoid blocking
|
|
326
|
+
// the default behavior. This ensures that the iOS can
|
|
327
|
+
// intercept that we're actually inserting a paragraph,
|
|
328
|
+
// and autocomplete, autocapitalize etc work as intended.
|
|
329
|
+
// This can also cause a strange performance issue in
|
|
330
|
+
// Safari, where there is a noticeable pause due to
|
|
331
|
+
// preventing the key down of enter.
|
|
332
|
+
if (
|
|
333
|
+
(IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) &&
|
|
334
|
+
CAN_USE_BEFORE_INPUT
|
|
335
|
+
) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
event.preventDefault();
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false);
|
|
343
|
+
},
|
|
344
|
+
COMMAND_PRIORITY_EDITOR,
|
|
345
|
+
),
|
|
346
|
+
editor.registerCommand(
|
|
347
|
+
SELECT_ALL_COMMAND,
|
|
348
|
+
() => {
|
|
349
|
+
$selectAll();
|
|
350
|
+
|
|
351
|
+
return true;
|
|
352
|
+
},
|
|
353
|
+
COMMAND_PRIORITY_EDITOR,
|
|
354
|
+
),
|
|
355
|
+
editor.registerCommand(
|
|
356
|
+
COPY_COMMAND,
|
|
357
|
+
event => {
|
|
358
|
+
const selection = $getSelection();
|
|
359
|
+
|
|
360
|
+
if (!$isRangeSelection(selection)) {
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
onCopyForPlainText(event, editor);
|
|
365
|
+
return true;
|
|
366
|
+
},
|
|
367
|
+
COMMAND_PRIORITY_EDITOR,
|
|
368
|
+
),
|
|
369
|
+
editor.registerCommand(
|
|
370
|
+
CUT_COMMAND,
|
|
371
|
+
event => {
|
|
372
|
+
const selection = $getSelection();
|
|
373
|
+
|
|
374
|
+
if (!$isRangeSelection(selection)) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
onCutForPlainText(event, editor);
|
|
379
|
+
return true;
|
|
380
|
+
},
|
|
381
|
+
COMMAND_PRIORITY_EDITOR,
|
|
382
|
+
),
|
|
383
|
+
editor.registerCommand(
|
|
384
|
+
PASTE_COMMAND,
|
|
385
|
+
event => {
|
|
386
|
+
const selection = $getSelection();
|
|
387
|
+
|
|
388
|
+
if (!$isRangeSelection(selection)) {
|
|
389
|
+
return false;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
onPasteForPlainText(event, editor);
|
|
393
|
+
return true;
|
|
394
|
+
},
|
|
395
|
+
COMMAND_PRIORITY_EDITOR,
|
|
396
|
+
),
|
|
397
|
+
editor.registerCommand<DragEvent>(
|
|
398
|
+
DROP_COMMAND,
|
|
399
|
+
event => $handlePlainTextDrop(event, editor),
|
|
400
|
+
COMMAND_PRIORITY_EDITOR,
|
|
401
|
+
),
|
|
402
|
+
editor.registerCommand<DragEvent>(
|
|
403
|
+
DRAGSTART_COMMAND,
|
|
404
|
+
event => {
|
|
405
|
+
const selection = $getSelection();
|
|
406
|
+
if (!$isRangeSelection(selection)) {
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
// Mark the drag source so a drop in a different editor can remove
|
|
410
|
+
// the source range to produce cut-and-paste semantics.
|
|
411
|
+
if (!selection.isCollapsed() && event.dataTransfer !== null) {
|
|
412
|
+
$writeDragSourceToDataTransfer(event.dataTransfer, editor);
|
|
413
|
+
}
|
|
414
|
+
return true;
|
|
415
|
+
},
|
|
416
|
+
COMMAND_PRIORITY_EDITOR,
|
|
417
|
+
),
|
|
418
|
+
);
|
|
419
|
+
return removeListener;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* An extension to register \@lexical/plain-text behavior
|
|
424
|
+
*/
|
|
425
|
+
export const PlainTextExtension = defineExtension({
|
|
426
|
+
conflictsWith: ['@lexical/rich-text'],
|
|
427
|
+
dependencies: [
|
|
428
|
+
DragonExtension,
|
|
429
|
+
NormalizeInlineElementsExtension,
|
|
430
|
+
NormalizeTripleClickSelectionExtension,
|
|
431
|
+
],
|
|
432
|
+
name: '@lexical/plain-text',
|
|
433
|
+
register: registerPlainText,
|
|
434
|
+
});
|
package/LexicalPlainText.prod.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
"use strict";var e=require("@lexical/clipboard"),t=require("@lexical/dragon"),n=require("@lexical/extension"),i=require("@lexical/selection"),r=require("@lexical/utils"),o=require("lexical");const a="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,l=a&&"documentMode"in document?document.documentMode:null,s=a&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),c=!(!a||!("InputEvent"in window)||l)&&"getTargetRanges"in new window.InputEvent("input"),R=a&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,D=a&&/Android/.test(navigator.userAgent),O=a&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent)&&!D,g=a&&/^(?=.*Chrome).*/i.test(navigator.userAgent),C=a&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&s&&!g;function M(t,n){n.update(()=>{if(null!==t){const i=r.objectKlassEquals(t,KeyboardEvent)?null:t.clipboardData,a=o.$getSelection();if(null!==a&&!a.isCollapsed()&&null!=i){t.preventDefault();const r=e.$getHtmlContent(n);null!==r&&i.setData("text/html",r),i.setData("text/plain",a.getTextContent())}}})}function T(t){const n=r.mergeRegister(t.registerCommand(o.DELETE_CHARACTER_COMMAND,e=>{const t=o.$getSelection();return!!o.$isRangeSelection(t)&&(t.deleteCharacter(e),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.DELETE_WORD_COMMAND,e=>{const t=o.$getSelection();return!!o.$isRangeSelection(t)&&(t.deleteWord(e),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.DELETE_LINE_COMMAND,e=>{const t=o.$getSelection();return!!o.$isRangeSelection(t)&&(t.deleteLine(e),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.CONTROLLED_TEXT_INSERTION_COMMAND,t=>{const n=o.$getSelection();if(!o.$isRangeSelection(n))return!1;if("string"==typeof t)n.insertText(t);else{const i=t.dataTransfer;if(null!=i)e.$insertDataTransferForPlainText(i,n);else{const e=t.data;e&&n.insertText(e)}}return!0},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.REMOVE_TEXT_COMMAND,()=>{const e=o.$getSelection();return!!o.$isRangeSelection(e)&&(e.removeText(),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.INSERT_LINE_BREAK_COMMAND,e=>{const t=o.$getSelection();return!!o.$isRangeSelection(t)&&(t.insertLineBreak(e),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.INSERT_PARAGRAPH_COMMAND,()=>{const e=o.$getSelection();return!!o.$isRangeSelection(e)&&(e.insertLineBreak(),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.KEY_ARROW_LEFT_COMMAND,e=>{const t=o.$getSelection();if(!o.$isRangeSelection(t))return!1;const n=e,r=n.shiftKey;return!!i.$shouldOverrideDefaultCharacterSelection(t,!0)&&(n.preventDefault(),i.$moveCharacter(t,r,!0),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.KEY_ARROW_RIGHT_COMMAND,e=>{const t=o.$getSelection();if(!o.$isRangeSelection(t))return!1;const n=e,r=n.shiftKey;return!!i.$shouldOverrideDefaultCharacterSelection(t,!1)&&(n.preventDefault(),i.$moveCharacter(t,r,!1),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.KEY_BACKSPACE_COMMAND,e=>{const n=o.$getSelection();return!!o.$isRangeSelection(n)&&((!R||"ko-KR"!==navigator.language)&&(e.preventDefault(),t.dispatchCommand(o.DELETE_CHARACTER_COMMAND,!0)))},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.KEY_DELETE_COMMAND,e=>{const n=o.$getSelection();return!!o.$isRangeSelection(n)&&(e.preventDefault(),t.dispatchCommand(o.DELETE_CHARACTER_COMMAND,!1))},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.KEY_ENTER_COMMAND,e=>{const n=o.$getSelection();if(!o.$isRangeSelection(n))return!1;if(null!==e){if((R||O||C)&&c)return!1;e.preventDefault()}return t.dispatchCommand(o.INSERT_LINE_BREAK_COMMAND,!1)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.SELECT_ALL_COMMAND,()=>(o.$selectAll(),!0),o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.COPY_COMMAND,e=>{const n=o.$getSelection();return!!o.$isRangeSelection(n)&&(M(e,t),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.CUT_COMMAND,e=>{const n=o.$getSelection();return!!o.$isRangeSelection(n)&&(function(e,t){M(e,t),t.update(()=>{const e=o.$getSelection();o.$isRangeSelection(e)&&e.removeText()})}(e,t),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.PASTE_COMMAND,n=>{const i=o.$getSelection();return!!o.$isRangeSelection(i)&&(function(t,n){t.preventDefault(),n.update(()=>{const n=o.$getSelection(),i=r.objectKlassEquals(t,ClipboardEvent)?t.clipboardData:null;null!=i&&o.$isRangeSelection(n)&&e.$insertDataTransferForPlainText(i,n)},{tag:o.PASTE_TAG})}(n,t),!0)},o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.DROP_COMMAND,n=>e.$handlePlainTextDrop(n,t),o.COMMAND_PRIORITY_EDITOR),t.registerCommand(o.DRAGSTART_COMMAND,n=>{const i=o.$getSelection();return!!o.$isRangeSelection(i)&&(i.isCollapsed()||null===n.dataTransfer||e.$writeDragSourceToDataTransfer(n.dataTransfer,t),!0)},o.COMMAND_PRIORITY_EDITOR));return n}const _=o.defineExtension({conflictsWith:["@lexical/rich-text"],dependencies:[t.DragonExtension,n.NormalizeInlineElementsExtension],name:"@lexical/plain-text",register:T});exports.PlainTextExtension=_,exports.registerPlainText=T;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import{$insertDataTransferForPlainText as e,$handlePlainTextDrop as t,$writeDragSourceToDataTransfer as n,$getHtmlContent as r}from"@lexical/clipboard";import{DragonExtension as o}from"@lexical/dragon";import{NormalizeInlineElementsExtension as i}from"@lexical/extension";import{$shouldOverrideDefaultCharacterSelection as a,$moveCharacter as s}from"@lexical/selection";import{mergeRegister as d,objectKlassEquals as l}from"@lexical/utils";import{defineExtension as m,DELETE_CHARACTER_COMMAND as u,$getSelection as c,$isRangeSelection as g,COMMAND_PRIORITY_EDITOR as f,DELETE_WORD_COMMAND as p,DELETE_LINE_COMMAND as C,CONTROLLED_TEXT_INSERTION_COMMAND as v,REMOVE_TEXT_COMMAND as x,INSERT_LINE_BREAK_COMMAND as w,INSERT_PARAGRAPH_COMMAND as h,KEY_ARROW_LEFT_COMMAND as D,KEY_ARROW_RIGHT_COMMAND as T,KEY_BACKSPACE_COMMAND as A,KEY_DELETE_COMMAND as b,KEY_ENTER_COMMAND as P,SELECT_ALL_COMMAND as y,$selectAll as E,COPY_COMMAND as K,CUT_COMMAND as M,PASTE_COMMAND as k,DROP_COMMAND as L,DRAGSTART_COMMAND as S,PASTE_TAG as W}from"lexical";const B="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,I=B&&"documentMode"in document?document.documentMode:null,R=B&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),V=!(!B||!("InputEvent"in window)||I)&&"getTargetRanges"in new window.InputEvent("input"),j=B&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,q=B&&/Android/.test(navigator.userAgent),z=B&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent)&&!q,F=B&&/^(?=.*Chrome).*/i.test(navigator.userAgent),G=B&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&R&&!F;function H(e,t){t.update(()=>{if(null!==e){const n=l(e,KeyboardEvent)?null:e.clipboardData,o=c();if(null!==o&&!o.isCollapsed()&&null!=n){e.preventDefault();const i=r(t);null!==i&&n.setData("text/html",i),n.setData("text/plain",o.getTextContent())}}})}function J(r){return d(r.registerCommand(u,e=>{const t=c();return!!g(t)&&(t.deleteCharacter(e),!0)},f),r.registerCommand(p,e=>{const t=c();return!!g(t)&&(t.deleteWord(e),!0)},f),r.registerCommand(C,e=>{const t=c();return!!g(t)&&(t.deleteLine(e),!0)},f),r.registerCommand(v,t=>{const n=c();if(!g(n))return!1;if("string"==typeof t)n.insertText(t);else{const r=t.dataTransfer;if(null!=r)e(r,n);else{const e=t.data;e&&n.insertText(e)}}return!0},f),r.registerCommand(x,()=>{const e=c();return!!g(e)&&(e.removeText(),!0)},f),r.registerCommand(w,e=>{const t=c();return!!g(t)&&(t.insertLineBreak(e),!0)},f),r.registerCommand(h,()=>{const e=c();return!!g(e)&&(e.insertLineBreak(),!0)},f),r.registerCommand(D,e=>{const t=c();if(!g(t))return!1;const n=e,r=n.shiftKey;return!!a(t,!0)&&(n.preventDefault(),s(t,r,!0),!0)},f),r.registerCommand(T,e=>{const t=c();if(!g(t))return!1;const n=e,r=n.shiftKey;return!!a(t,!1)&&(n.preventDefault(),s(t,r,!1),!0)},f),r.registerCommand(A,e=>{const t=c();return!!g(t)&&((!j||"ko-KR"!==navigator.language)&&(e.preventDefault(),r.dispatchCommand(u,!0)))},f),r.registerCommand(b,e=>{const t=c();return!!g(t)&&(e.preventDefault(),r.dispatchCommand(u,!1))},f),r.registerCommand(P,e=>{const t=c();if(!g(t))return!1;if(null!==e){if((j||z||G)&&V)return!1;e.preventDefault()}return r.dispatchCommand(w,!1)},f),r.registerCommand(y,()=>(E(),!0),f),r.registerCommand(K,e=>{const t=c();return!!g(t)&&(H(e,r),!0)},f),r.registerCommand(M,e=>{const t=c();return!!g(t)&&(function(e,t){H(e,t),t.update(()=>{const e=c();g(e)&&e.removeText()})}(e,r),!0)},f),r.registerCommand(k,t=>{const n=c();return!!g(n)&&(function(t,n){t.preventDefault(),n.update(()=>{const n=c(),r=l(t,ClipboardEvent)?t.clipboardData:null;null!=r&&g(n)&&e(r,n)},{tag:W})}(t,r),!0)},f),r.registerCommand(L,e=>t(e,r),f),r.registerCommand(S,e=>{const t=c();return!!g(t)&&(t.isCollapsed()||null===e.dataTransfer||n(e.dataTransfer,r),!0)},f))}const N=m({conflictsWith:["@lexical/rich-text"],dependencies:[o,i],name:"@lexical/plain-text",register:J});export{N as PlainTextExtension,J as registerPlainText};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|