slate-react 0.82.0 → 0.82.1-2022718122533

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.
@@ -1 +1 @@
1
- {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/editable.tsx"],"names":[],"mappings":"AAGA,OAAO,KAON,MAAM,OAAO,CAAA;AAEd,OAAO,EAEL,OAAO,EAEP,SAAS,EAET,KAAK,EACL,IAAI,EAEL,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAOpD,OAAO,EAEL,OAAO,EACP,QAAQ,EAMT,MAAM,cAAc,CAAA;AAwCrB;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,GAAG,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE;QACV,iBAAiB,EAAE,SAAS,CAAA;QAC5B,mBAAmB,CAAC,EAAE,IAAI,CAAA;QAC1B,iBAAiB,CAAC,EAAE,IAAI,CAAA;QACxB,GAAG,CAAC,EAAE,KAAK,CAAA;QACX,GAAG,EAAE,GAAG,CAAA;KACT,CAAA;CACF;AAED;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,EAAE;QACV,iBAAiB,EAAE,IAAI,CAAA;KACxB,CAAA;CACF;AAED;;GAEG;AAEH,oBAAY,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,EAAE,CAAA;IACxC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,GAAG,CAAC,OAAO,CAAA;IAC1D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,GAAG,CAAC,OAAO,CAAA;IACpD,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,GAAG,CAAC,OAAO,CAAA;IAClE,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC3E,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;CACvB,GAAG,KAAK,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAA;AAEhD;;GAEG;AAEH,eAAO,MAAM,QAAQ,UAAW,aAAa,gBAw7C5C,CAAA;AAED;;GAEG;AACH,oBAAY,sBAAsB,GAAG;IACnC,QAAQ,EAAE,GAAG,CAAA;IACb,UAAU,EAAE;QACV,wBAAwB,EAAE,OAAO,CAAA;QACjC,GAAG,CAAC,EAAE,KAAK,CAAA;QACX,eAAe,EAAE,OAAO,CAAA;QACxB,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACzB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;KAC3B,CAAA;CACF,CAAA;AAED;;GAEG;AAEH,eAAO,MAAM,kBAAkB,8BAG5B,sBAAsB,gBAA4C,CAAA;AAErE;;GAEG;AAEH,eAAO,MAAM,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,EAAa,CAAA;AA2BtE;;GAEG;AAEH,eAAO,MAAM,SAAS,WACZ,WAAW,UACX,WAAW,GAAG,IAAI,sBAG3B,CAAA;AAED;;GAEG;AAEH,eAAO,MAAM,iBAAiB,WACpB,WAAW,UACX,WAAW,GAAG,IAAI,sBAM3B,CAAA;AAED;;GAEG;AAEH,eAAO,MAAM,6BAA6B,WAChC,WAAW,UACX,WAAW,GAAG,IAAI,KACzB,OAMF,CAAA;AAED;;GAEG;AAEH,eAAO,MAAM,cAAc,gHAIO,IAAI,GAAG,OAAO,yBAc/C,CAAA;AAED;;GAEG;AAEH,eAAO,MAAM,iBAAiB,uDAEJ,IAAI,GAAG,OAAO,yBAevC,CAAA"}
1
+ {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/editable.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { DebouncedFunc } from 'lodash';
3
3
  import { Point, Range } from 'slate';
4
4
  import { ReactEditor } from '../../plugin/react-editor';
5
5
  export declare type Action = {
6
- at: Point | Range;
6
+ at?: Point | Range;
7
7
  run: () => void;
8
8
  };
9
9
  export declare type CreateAndroidInputManagerOptions = {
@@ -16,14 +16,15 @@ export declare type AndroidInputManager = {
16
16
  scheduleFlush: () => void;
17
17
  hasPendingDiffs: () => boolean;
18
18
  hasPendingAction: () => boolean;
19
+ hasPendingChanges: () => boolean;
19
20
  isFlushing: () => boolean | 'action';
20
21
  handleUserSelect: (range: Range | null) => void;
21
22
  handleCompositionEnd: (event: React.CompositionEvent<HTMLDivElement>) => void;
22
23
  handleCompositionStart: (event: React.CompositionEvent<HTMLDivElement>) => void;
23
24
  handleDOMBeforeInput: (event: InputEvent) => void;
25
+ handleKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;
24
26
  handleDomMutations: (mutations: MutationRecord[]) => void;
25
27
  handleInput: () => void;
26
28
  };
27
- export declare function forceSwiftKeyUpdate(editor: ReactEditor): void;
28
29
  export declare function createAndroidInputManager({ editor, scheduleOnDOMSelectionChange, onDOMSelectionChange, }: CreateAndroidInputManagerOptions): AndroidInputManager;
29
30
  //# sourceMappingURL=android-input-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"android-input-manager.d.ts","sourceRoot":"","sources":["../../packages/slate-react/src/hooks/android-input-manager/android-input-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAsB,KAAK,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAuBvD,oBAAY,MAAM,GAAG;IAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAY3D,oBAAY,gCAAgC,GAAG;IAC7C,MAAM,EAAE,WAAW,CAAA;IAEnB,4BAA4B,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;IACvD,oBAAoB,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;CAChD,CAAA;AAED,oBAAY,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,aAAa,EAAE,MAAM,IAAI,CAAA;IAEzB,eAAe,EAAE,MAAM,OAAO,CAAA;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAA;IAC/B,UAAU,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAA;IAEpC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAC/C,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC7E,sBAAsB,EAAE,CACtB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAC1C,IAAI,CAAA;IACT,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAEjD,kBAAkB,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IACzD,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,QAsBtD;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,4BAA4B,EAC5B,oBAAoB,GACrB,EAAE,gCAAgC,GAAG,mBAAmB,CAwiBxD"}
1
+ {"version":3,"file":"android-input-manager.d.ts","sourceRoot":"","sources":["../../packages/slate-react/src/hooks/android-input-manager/android-input-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAsB,KAAK,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAuBvD,oBAAY,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAY5D,oBAAY,gCAAgC,GAAG;IAC7C,MAAM,EAAE,WAAW,CAAA;IAEnB,4BAA4B,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;IACvD,oBAAoB,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;CAChD,CAAA;AAED,oBAAY,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,aAAa,EAAE,MAAM,IAAI,CAAA;IAEzB,eAAe,EAAE,MAAM,OAAO,CAAA;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAA;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAA;IAChC,UAAU,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAA;IAEpC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAC/C,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC7E,sBAAsB,EAAE,CACtB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAC1C,IAAI,CAAA;IACT,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAEnE,kBAAkB,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IACzD,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,4BAA4B,EAC5B,oBAAoB,GACrB,EAAE,gCAAgC,GAAG,mBAAmB,CA8oBxD"}
package/dist/index.es.js CHANGED
@@ -2264,28 +2264,6 @@ var FLUSH_DELAY = 200; // Replace with `const debug = console.log` to debug
2264
2264
 
2265
2265
  var debug = function debug() {};
2266
2266
 
2267
- function forceSwiftKeyUpdate(editor) {
2268
- var _div$parentElement;
2269
-
2270
- var {
2271
- document
2272
- } = ReactEditor.getWindow(editor);
2273
- var div = document.createElement('div');
2274
- div.setAttribute('contenteditable', 'true');
2275
- div.setAttribute('display', 'none');
2276
- div.setAttribute('position', 'absolute');
2277
- div.setAttribute('top', '0');
2278
- div.setAttribute('left', '0');
2279
- div.textContent = ' ';
2280
- document.body.appendChild(div);
2281
- var range = document.createRange();
2282
- range.selectNodeContents(div);
2283
- var selection = window.getSelection();
2284
- selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
2285
- selection === null || selection === void 0 ? void 0 : selection.addRange(range);
2286
- (_div$parentElement = div.parentElement) === null || _div$parentElement === void 0 ? void 0 : _div$parentElement.removeChild(div);
2287
- ReactEditor.focus(editor);
2288
- }
2289
2267
  function createAndroidInputManager(_ref) {
2290
2268
  var {
2291
2269
  editor,
@@ -2297,7 +2275,7 @@ function createAndroidInputManager(_ref) {
2297
2275
  var flushTimeoutId = null;
2298
2276
  var actionTimeoutId = null;
2299
2277
  var idCounter = 0;
2300
- var isInsertAfterMarkPlaceholder = false;
2278
+ var insertPositionHint = false;
2301
2279
 
2302
2280
  var applyPendingSelection = () => {
2303
2281
  var pendingSelection = EDITOR_TO_PENDING_SELECTION.get(editor);
@@ -2323,16 +2301,18 @@ function createAndroidInputManager(_ref) {
2323
2301
  return;
2324
2302
  }
2325
2303
 
2326
- var target = Point.isPoint(action.at) ? normalizePoint(editor, action.at) : normalizeRange(editor, action.at);
2304
+ if (action.at) {
2305
+ var target = Point.isPoint(action.at) ? normalizePoint(editor, action.at) : normalizeRange(editor, action.at);
2327
2306
 
2328
- if (!target) {
2329
- return;
2330
- }
2307
+ if (!target) {
2308
+ return;
2309
+ }
2331
2310
 
2332
- var targetRange = Editor.range(editor, target);
2311
+ var _targetRange = Editor.range(editor, target);
2333
2312
 
2334
- if (!editor.selection || !Range.equals(editor.selection, targetRange)) {
2335
- Transforms.select(editor, target);
2313
+ if (!editor.selection || !Range.equals(editor.selection, _targetRange)) {
2314
+ Transforms.select(editor, target);
2315
+ }
2336
2316
  }
2337
2317
 
2338
2318
  action.run();
@@ -2383,8 +2363,8 @@ function createAndroidInputManager(_ref) {
2383
2363
  editor.marks = pendingMarks;
2384
2364
  }
2385
2365
 
2386
- if (pendingMarks) {
2387
- isInsertAfterMarkPlaceholder = true;
2366
+ if (pendingMarks && insertPositionHint === false) {
2367
+ insertPositionHint = null;
2388
2368
  }
2389
2369
 
2390
2370
  var range = targetRange(diff);
@@ -2424,7 +2404,7 @@ function createAndroidInputManager(_ref) {
2424
2404
 
2425
2405
  var selection = selectionRef === null || selectionRef === void 0 ? void 0 : selectionRef.unref();
2426
2406
 
2427
- if (selection && (!editor.selection || !Range.equals(selection, editor.selection))) {
2407
+ if (selection && !EDITOR_TO_PENDING_SELECTION.get(editor) && (!editor.selection || !Range.equals(selection, editor.selection))) {
2428
2408
  Transforms.select(editor, selection);
2429
2409
  }
2430
2410
 
@@ -2448,6 +2428,7 @@ function createAndroidInputManager(_ref) {
2448
2428
 
2449
2429
  if (userMarks !== undefined) {
2450
2430
  editor.marks = userMarks;
2431
+ editor.onChange();
2451
2432
  }
2452
2433
  };
2453
2434
 
@@ -2471,19 +2452,20 @@ function createAndroidInputManager(_ref) {
2471
2452
  }
2472
2453
  };
2473
2454
 
2474
- var updatePlaceholderVisibility = () => {
2455
+ var updatePlaceholderVisibility = function updatePlaceholderVisibility() {
2456
+ var forceHide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
2475
2457
  var placeholderElement = EDITOR_TO_PLACEHOLDER_ELEMENT.get(editor);
2476
2458
 
2477
2459
  if (!placeholderElement) {
2478
2460
  return;
2479
2461
  }
2480
2462
 
2481
- if (hasPendingDiffs()) {
2482
- placeholderElement.style.visibility = 'hidden';
2463
+ if (hasPendingDiffs() || forceHide) {
2464
+ placeholderElement.style.display = 'none';
2483
2465
  return;
2484
2466
  }
2485
2467
 
2486
- placeholderElement.style.removeProperty('visibility');
2468
+ placeholderElement.style.removeProperty('display');
2487
2469
  };
2488
2470
 
2489
2471
  var storeDiff = (path, diff) => {
@@ -2521,7 +2503,11 @@ function createAndroidInputManager(_ref) {
2521
2503
  });
2522
2504
  };
2523
2505
 
2524
- var scheduleAction = (at, run) => {
2506
+ var scheduleAction = function scheduleAction(run) {
2507
+ var {
2508
+ at
2509
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2510
+ insertPositionHint = false;
2525
2511
  EDITOR_TO_PENDING_SELECTION.delete(editor);
2526
2512
  scheduleOnDOMSelectionChange.cancel();
2527
2513
  onDOMSelectionChange.cancel();
@@ -2541,7 +2527,7 @@ function createAndroidInputManager(_ref) {
2541
2527
  };
2542
2528
 
2543
2529
  var handleDOMBeforeInput = event => {
2544
- var _targetRange;
2530
+ var _targetRange2;
2545
2531
 
2546
2532
  if (flushTimeoutId) {
2547
2533
  clearTimeout(flushTimeoutId);
@@ -2553,6 +2539,11 @@ function createAndroidInputManager(_ref) {
2553
2539
  } = event;
2554
2540
  var targetRange = null;
2555
2541
  var data = event.dataTransfer || event.data || undefined;
2542
+
2543
+ if (insertPositionHint !== false && type !== 'insertText' && type !== 'insertCompositionText') {
2544
+ insertPositionHint = false;
2545
+ }
2546
+
2556
2547
  var [nativeTargetRange] = event.getTargetRanges();
2557
2548
 
2558
2549
  if (nativeTargetRange) {
@@ -2575,7 +2566,7 @@ function createAndroidInputManager(_ref) {
2575
2566
  });
2576
2567
  }
2577
2568
 
2578
- targetRange = (_targetRange = targetRange) !== null && _targetRange !== void 0 ? _targetRange : editor.selection;
2569
+ targetRange = (_targetRange2 = targetRange) !== null && _targetRange2 !== void 0 ? _targetRange2 : editor.selection;
2579
2570
 
2580
2571
  if (!targetRange) {
2581
2572
  return;
@@ -2611,9 +2602,11 @@ function createAndroidInputManager(_ref) {
2611
2602
  }
2612
2603
 
2613
2604
  var direction = type.endsWith('Backward') ? 'backward' : 'forward';
2614
- return scheduleAction(targetRange, () => Editor.deleteFragment(editor, {
2605
+ return scheduleAction(() => Editor.deleteFragment(editor, {
2615
2606
  direction
2616
- }));
2607
+ }), {
2608
+ at: targetRange
2609
+ });
2617
2610
  }
2618
2611
 
2619
2612
  switch (type) {
@@ -2621,7 +2614,9 @@ function createAndroidInputManager(_ref) {
2621
2614
  case 'deleteByCut':
2622
2615
  case 'deleteByDrag':
2623
2616
  {
2624
- return scheduleAction(targetRange, () => Editor.deleteFragment(editor));
2617
+ return scheduleAction(() => Editor.deleteFragment(editor), {
2618
+ at: targetRange
2619
+ });
2625
2620
  }
2626
2621
 
2627
2622
  case 'deleteContent':
@@ -2643,7 +2638,9 @@ function createAndroidInputManager(_ref) {
2643
2638
  }
2644
2639
  }
2645
2640
 
2646
- return scheduleAction(targetRange, () => Editor.deleteForward(editor));
2641
+ return scheduleAction(() => Editor.deleteForward(editor), {
2642
+ at: targetRange
2643
+ });
2647
2644
  }
2648
2645
 
2649
2646
  case 'deleteContentBackward':
@@ -2666,71 +2663,91 @@ function createAndroidInputManager(_ref) {
2666
2663
  });
2667
2664
  }
2668
2665
 
2669
- return scheduleAction(targetRange, () => Editor.deleteBackward(editor));
2666
+ return scheduleAction(() => Editor.deleteBackward(editor), {
2667
+ at: targetRange
2668
+ });
2670
2669
  }
2671
2670
 
2672
2671
  case 'deleteEntireSoftLine':
2673
2672
  {
2674
- return scheduleAction(targetRange, () => {
2673
+ return scheduleAction(() => {
2675
2674
  Editor.deleteBackward(editor, {
2676
2675
  unit: 'line'
2677
2676
  });
2678
2677
  Editor.deleteForward(editor, {
2679
2678
  unit: 'line'
2680
2679
  });
2680
+ }, {
2681
+ at: targetRange
2681
2682
  });
2682
2683
  }
2683
2684
 
2684
2685
  case 'deleteHardLineBackward':
2685
2686
  {
2686
- return scheduleAction(targetRange, () => Editor.deleteBackward(editor, {
2687
+ return scheduleAction(() => Editor.deleteBackward(editor, {
2687
2688
  unit: 'block'
2688
- }));
2689
+ }), {
2690
+ at: targetRange
2691
+ });
2689
2692
  }
2690
2693
 
2691
2694
  case 'deleteSoftLineBackward':
2692
2695
  {
2693
- return scheduleAction(targetRange, () => Editor.deleteBackward(editor, {
2696
+ return scheduleAction(() => Editor.deleteBackward(editor, {
2694
2697
  unit: 'line'
2695
- }));
2698
+ }), {
2699
+ at: targetRange
2700
+ });
2696
2701
  }
2697
2702
 
2698
2703
  case 'deleteHardLineForward':
2699
2704
  {
2700
- return scheduleAction(targetRange, () => Editor.deleteForward(editor, {
2705
+ return scheduleAction(() => Editor.deleteForward(editor, {
2701
2706
  unit: 'block'
2702
- }));
2707
+ }), {
2708
+ at: targetRange
2709
+ });
2703
2710
  }
2704
2711
 
2705
2712
  case 'deleteSoftLineForward':
2706
2713
  {
2707
- return scheduleAction(targetRange, () => Editor.deleteForward(editor, {
2714
+ return scheduleAction(() => Editor.deleteForward(editor, {
2708
2715
  unit: 'line'
2709
- }));
2716
+ }), {
2717
+ at: targetRange
2718
+ });
2710
2719
  }
2711
2720
 
2712
2721
  case 'deleteWordBackward':
2713
2722
  {
2714
- return scheduleAction(targetRange, () => Editor.deleteBackward(editor, {
2723
+ return scheduleAction(() => Editor.deleteBackward(editor, {
2715
2724
  unit: 'word'
2716
- }));
2725
+ }), {
2726
+ at: targetRange
2727
+ });
2717
2728
  }
2718
2729
 
2719
2730
  case 'deleteWordForward':
2720
2731
  {
2721
- return scheduleAction(targetRange, () => Editor.deleteForward(editor, {
2732
+ return scheduleAction(() => Editor.deleteForward(editor, {
2722
2733
  unit: 'word'
2723
- }));
2734
+ }), {
2735
+ at: targetRange
2736
+ });
2724
2737
  }
2725
2738
 
2726
2739
  case 'insertLineBreak':
2727
2740
  {
2728
- return scheduleAction(targetRange, () => Editor.insertSoftBreak(editor));
2741
+ return scheduleAction(() => Editor.insertSoftBreak(editor), {
2742
+ at: targetRange
2743
+ });
2729
2744
  }
2730
2745
 
2731
2746
  case 'insertParagraph':
2732
2747
  {
2733
- return scheduleAction(targetRange, () => Editor.insertBreak(editor));
2748
+ return scheduleAction(() => Editor.insertBreak(editor), {
2749
+ at: targetRange
2750
+ });
2734
2751
  }
2735
2752
 
2736
2753
  case 'insertCompositionText':
@@ -2743,11 +2760,15 @@ function createAndroidInputManager(_ref) {
2743
2760
  case 'insertText':
2744
2761
  {
2745
2762
  if ((data === null || data === void 0 ? void 0 : data.constructor.name) === 'DataTransfer') {
2746
- return scheduleAction(targetRange, () => ReactEditor.insertData(editor, data));
2763
+ return scheduleAction(() => ReactEditor.insertData(editor, data), {
2764
+ at: targetRange
2765
+ });
2747
2766
  }
2748
2767
 
2749
2768
  if (typeof data === 'string' && data.includes('\n')) {
2750
- return scheduleAction(Range.end(targetRange), () => Editor.insertSoftBreak(editor));
2769
+ return scheduleAction(() => Editor.insertSoftBreak(editor), {
2770
+ at: Range.end(targetRange)
2771
+ });
2751
2772
  }
2752
2773
 
2753
2774
  var text = data !== null && data !== void 0 ? data : ''; // COMPAT: If we are writing inside a placeholder, the ime inserts the text inside
@@ -2758,31 +2779,56 @@ function createAndroidInputManager(_ref) {
2758
2779
  }
2759
2780
 
2760
2781
  if (Path.equals(targetRange.anchor.path, targetRange.focus.path)) {
2761
- // COMPAT: Swiftkey has a weird bug where the target range of the 2nd word
2762
- // inserted after a mark placeholder is inserted with a anchor offset off by 1.
2763
- // So writing 'some text' will result in 'some ttext'. If we force a IME update
2764
- // after inserting the first word, swiftkey will insert with the correct offset
2765
- if (text.endsWith(' ') && isInsertAfterMarkPlaceholder) {
2766
- isInsertAfterMarkPlaceholder = false;
2767
- forceSwiftKeyUpdate(editor);
2768
- return scheduleAction(targetRange, () => Editor.insertText(editor, text));
2769
- }
2770
-
2771
2782
  var [_start2, _end2] = Range.edges(targetRange);
2772
- return storeDiff(_start2.path, {
2783
+ var diff = {
2773
2784
  start: _start2.offset,
2774
2785
  end: _end2.offset,
2775
2786
  text
2776
- });
2787
+ }; // COMPAT: Swiftkey has a weird bug where the target range of the 2nd word
2788
+ // inserted after a mark placeholder is inserted with an anchor offset off by 1.
2789
+ // So writing 'some text' will result in 'some ttext'. Luckily all 'normal' insert
2790
+ // text events are fired with the correct target ranges, only the final 'insertComposition'
2791
+ // isn't, so we can adjust the target range start offset if we are confident this is the
2792
+ // swiftkey insert causing the issue.
2793
+
2794
+ if (text && insertPositionHint && type === 'insertCompositionText') {
2795
+ var hintPosition = insertPositionHint.start + insertPositionHint.text.search(/\S|$/);
2796
+ var diffPosition = diff.start + diff.text.search(/\S|$/);
2797
+
2798
+ if (diffPosition === hintPosition + 1 && diff.end === insertPositionHint.start + insertPositionHint.text.length) {
2799
+ diff.start -= 1;
2800
+ insertPositionHint = null;
2801
+ scheduleFlush();
2802
+ } else {
2803
+ insertPositionHint = false;
2804
+ }
2805
+ } else if (type === 'insertText') {
2806
+ if (insertPositionHint === null) {
2807
+ insertPositionHint = diff;
2808
+ } else if (insertPositionHint && Range.isCollapsed(targetRange) && insertPositionHint.end + insertPositionHint.text.length === _start2.offset) {
2809
+ insertPositionHint = _objectSpread$3(_objectSpread$3({}, insertPositionHint), {}, {
2810
+ text: insertPositionHint.text + text
2811
+ });
2812
+ } else {
2813
+ insertPositionHint = false;
2814
+ }
2815
+ } else {
2816
+ insertPositionHint = false;
2817
+ }
2818
+
2819
+ storeDiff(_start2.path, diff);
2820
+ return;
2777
2821
  }
2778
2822
 
2779
- return scheduleAction(targetRange, () => Editor.insertText(editor, text));
2823
+ return scheduleAction(() => Editor.insertText(editor, text), {
2824
+ at: targetRange
2825
+ });
2780
2826
  }
2781
2827
  }
2782
2828
  };
2783
2829
 
2784
2830
  var hasPendingAction = () => {
2785
- return !!EDITOR_TO_PENDING_ACTION.get(editor) || !!actionTimeoutId;
2831
+ return !!EDITOR_TO_PENDING_ACTION.get(editor);
2786
2832
  };
2787
2833
 
2788
2834
  var hasPendingDiffs = () => {
@@ -2791,6 +2837,10 @@ function createAndroidInputManager(_ref) {
2791
2837
  return !!((_EDITOR_TO_PENDING_DI5 = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI5 !== void 0 && _EDITOR_TO_PENDING_DI5.length);
2792
2838
  };
2793
2839
 
2840
+ var hasPendingChanges = () => {
2841
+ return hasPendingAction() || hasPendingDiffs();
2842
+ };
2843
+
2794
2844
  var isFlushing = () => {
2795
2845
  return flushing;
2796
2846
  };
@@ -2803,10 +2853,19 @@ function createAndroidInputManager(_ref) {
2803
2853
  flushTimeoutId = null;
2804
2854
  }
2805
2855
 
2806
- var pathChanged = range && (!editor.selection || !Path.equals(editor.selection.anchor.path, range === null || range === void 0 ? void 0 : range.anchor.path));
2856
+ var {
2857
+ selection
2858
+ } = editor;
2859
+
2860
+ if (!range) {
2861
+ return;
2862
+ }
2863
+
2864
+ var pathChanged = !selection || !Path.equals(selection.anchor.path, range.anchor.path);
2865
+ var parentPathChanged = !selection || !Path.equals(selection.anchor.path.slice(0, -1), range.anchor.path.slice(0, -1));
2807
2866
 
2808
- if (pathChanged) {
2809
- isInsertAfterMarkPlaceholder = false;
2867
+ if (pathChanged && insertPositionHint || parentPathChanged) {
2868
+ insertPositionHint = false;
2810
2869
  }
2811
2870
 
2812
2871
  if (pathChanged || !hasPendingDiffs()) {
@@ -2820,6 +2879,18 @@ function createAndroidInputManager(_ref) {
2820
2879
  }
2821
2880
  };
2822
2881
 
2882
+ var handleKeyDown = _ => {
2883
+ // COMPAT: Swiftkey closes the keyboard when typing inside a empty node
2884
+ // directly next to a non-contenteditable element (= the placeholder).
2885
+ // The only event fired soon enough for us to allow hiding the placeholder
2886
+ // without swiftkey picking it up is the keydown event, so we have to hide it
2887
+ // here. See https://github.com/ianstormtaylor/slate/pull/4988#issuecomment-1201050535
2888
+ if (!hasPendingDiffs()) {
2889
+ updatePlaceholderVisibility(true);
2890
+ setTimeout(updatePlaceholderVisibility);
2891
+ }
2892
+ };
2893
+
2823
2894
  var scheduleFlush = () => {
2824
2895
  if (!hasPendingAction()) {
2825
2896
  actionTimeoutId = setTimeout(flush);
@@ -2845,11 +2916,13 @@ function createAndroidInputManager(_ref) {
2845
2916
  scheduleFlush,
2846
2917
  hasPendingDiffs,
2847
2918
  hasPendingAction,
2919
+ hasPendingChanges,
2848
2920
  isFlushing,
2849
2921
  handleUserSelect,
2850
2922
  handleCompositionEnd,
2851
2923
  handleCompositionStart,
2852
2924
  handleDOMBeforeInput,
2925
+ handleKeyDown,
2853
2926
  handleDomMutations,
2854
2927
  handleInput
2855
2928
  };
@@ -2942,7 +3015,8 @@ function useTrackUserInput() {
2942
3015
  }
2943
3016
 
2944
3017
  var _excluded$1 = ["autoFocus", "decorate", "onDOMBeforeInput", "placeholder", "readOnly", "renderElement", "renderLeaf", "renderPlaceholder", "scrollSelectionIntoView", "style", "as"],
2945
- _excluded2 = ["text"];
3018
+ _excluded2 = ["text"],
3019
+ _excluded3 = ["text"];
2946
3020
 
2947
3021
  function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2948
3022
 
@@ -3036,7 +3110,7 @@ var Editable = props => {
3036
3110
  });
3037
3111
 
3038
3112
  if (range) {
3039
- if (!ReactEditor.isComposing(editor) && !(androidInputManager !== null && androidInputManager !== void 0 && androidInputManager.hasPendingDiffs()) && !(androidInputManager !== null && androidInputManager !== void 0 && androidInputManager.isFlushing())) {
3113
+ if (!ReactEditor.isComposing(editor) && !(androidInputManager !== null && androidInputManager !== void 0 && androidInputManager.hasPendingChanges()) && !(androidInputManager !== null && androidInputManager !== void 0 && androidInputManager.isFlushing())) {
3040
3114
  Transforms.select(editor, range);
3041
3115
  } else {
3042
3116
  androidInputManager === null || androidInputManager === void 0 ? void 0 : androidInputManager.handleUserSelect(range);
@@ -3549,11 +3623,27 @@ var Editable = props => {
3549
3623
 
3550
3624
  useEffect(() => {
3551
3625
  setTimeout(() => {
3552
- if (marks) {
3553
- EDITOR_TO_PENDING_INSERTION_MARKS.set(editor, marks);
3554
- } else {
3555
- EDITOR_TO_PENDING_INSERTION_MARKS.delete(editor);
3626
+ var {
3627
+ selection
3628
+ } = editor;
3629
+
3630
+ if (selection) {
3631
+ var {
3632
+ anchor: _anchor
3633
+ } = selection;
3634
+
3635
+ var _Node$leaf2 = Node.leaf(editor, _anchor.path),
3636
+ rest = _objectWithoutProperties(_Node$leaf2, _excluded3);
3637
+
3638
+ if (!Text$1.equals(rest, marks, {
3639
+ loose: true
3640
+ })) {
3641
+ EDITOR_TO_PENDING_INSERTION_MARKS.set(editor, marks);
3642
+ return;
3643
+ }
3556
3644
  }
3645
+
3646
+ EDITOR_TO_PENDING_INSERTION_MARKS.delete(editor);
3557
3647
  });
3558
3648
  });
3559
3649
  return /*#__PURE__*/React.createElement(ReadOnlyContext.Provider, {
@@ -3602,8 +3692,8 @@ var Editable = props => {
3602
3692
  event.preventDefault();
3603
3693
 
3604
3694
  if (!ReactEditor.isComposing(editor)) {
3605
- var _text = event.data;
3606
- Editor.insertText(editor, _text);
3695
+ var _text2 = event.data;
3696
+ Editor.insertText(editor, _text2);
3607
3697
  }
3608
3698
  }
3609
3699
  }, [readOnly]),
@@ -3926,6 +4016,7 @@ var Editable = props => {
3926
4016
  }, [readOnly, attributes.onFocus]),
3927
4017
  onKeyDown: useCallback(event => {
3928
4018
  if (!readOnly && hasEditableTarget(editor, event.target)) {
4019
+ androidInputManager === null || androidInputManager === void 0 ? void 0 : androidInputManager.handleKeyDown(event);
3929
4020
  var {
3930
4021
  nativeEvent
3931
4022
  } = event; // COMPAT: The composition end event isn't fired reliably in all browsers,
@@ -4244,7 +4335,12 @@ var DefaultPlaceholder = _ref => {
4244
4335
  attributes,
4245
4336
  children
4246
4337
  } = _ref;
4247
- return /*#__PURE__*/React.createElement("span", Object.assign({}, attributes), children);
4338
+ return (
4339
+ /*#__PURE__*/
4340
+ // COMPAT: Artificially add a line-break to the end on the placeholder element
4341
+ // to prevent Android IMEs to pick up its content in autocorrect and to auto-capitalize the first letter
4342
+ React.createElement("span", Object.assign({}, attributes), children, IS_ANDROID && /*#__PURE__*/React.createElement("br", null))
4343
+ );
4248
4344
  };
4249
4345
  /**
4250
4346
  * A default memoized decorate function.
@@ -4735,7 +4831,7 @@ var withReact = editor => {
4735
4831
 
4736
4832
  var pendingAction = EDITOR_TO_PENDING_ACTION.get(editor);
4737
4833
 
4738
- if (pendingAction) {
4834
+ if (pendingAction !== null && pendingAction !== void 0 && pendingAction.at) {
4739
4835
  var at = Point.isPoint(pendingAction === null || pendingAction === void 0 ? void 0 : pendingAction.at) ? transformPendingPoint(editor, pendingAction.at, op) : transformPendingRange(editor, pendingAction.at, op);
4740
4836
  EDITOR_TO_PENDING_ACTION.set(editor, at ? _objectSpread(_objectSpread({}, pendingAction), {}, {
4741
4837
  at