@lexical/plain-text 0.44.1-nightly.20260519.0 → 0.45.1-dev.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.
@@ -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.44.1-nightly.20260519.0",
11
- "main": "LexicalPlainText.js",
12
- "types": "index.d.ts",
10
+ "version": "0.45.1-dev.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.44.1-nightly.20260519.0",
39
- "@lexical/dragon": "0.44.1-nightly.20260519.0",
40
- "@lexical/extension": "0.44.1-nightly.20260519.0",
41
- "@lexical/selection": "0.44.1-nightly.20260519.0",
42
- "@lexical/utils": "0.44.1-nightly.20260519.0",
43
- "lexical": "0.44.1-nightly.20260519.0"
44
- }
39
+ "@lexical/clipboard": "0.45.1-dev.0",
40
+ "@lexical/extension": "0.45.1-dev.0",
41
+ "@lexical/selection": "0.45.1-dev.0",
42
+ "@lexical/utils": "0.45.1-dev.0",
43
+ "@lexical/dragon": "0.45.1-dev.0",
44
+ "lexical": "0.45.1-dev.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
+ });
@@ -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