@seafile/sdoc-editor 3.0.250 → 3.0.251

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.
@@ -26,7 +26,8 @@ var _event = require("./event");
26
26
  var _helpers2 = require("./helpers");
27
27
  var _sideMenu = _interopRequireDefault(require("./side-menu"));
28
28
  require("./index.css");
29
- var HORIZONTAL_DROP_ZONE_WIDTH = 48;
29
+ // Keep the visual drop indicator narrow, but make the invisible hit area easier to reach.
30
+ var HORIZONTAL_DROP_ZONE_WIDTH = 72;
30
31
  var getSafeNodeEntry = function getSafeNodeEntry(editor, element) {
31
32
  try {
32
33
  return (0, _helpers2.getNodeEntry)(editor, element);
@@ -278,6 +279,7 @@ var SideToolbar = function SideToolbar() {
278
279
  event.stopPropagation();
279
280
  sourceElementRef.current = null;
280
281
  isDraggingEditorElementRef.current = true;
282
+ event.dataTransfer.effectAllowed = 'move';
281
283
  // Create the preview container when dragging more than one listNodes
282
284
  var noDrag = _slate.Path.equals(editor.selection.focus.path, editor.selection.anchor.path);
283
285
  if (showSelectedNodesRef.current && showSelectedNodesRef.current.length > 1 && !noDrag) {
@@ -645,9 +647,8 @@ var SideToolbar = function SideToolbar() {
645
647
  isDraggingEditorElementRef.current = false;
646
648
  }, [clearAllDragStyles]);
647
649
  var handleDragover = (0, _react.useCallback)(function (event) {
648
- var _target;
650
+ var _event$target, _event$target$closest, _target;
649
651
  if (!isEditorDrag()) return;
650
- event.preventDefault();
651
652
  var _getSafeNodeEntry7 = getSafeNodeEntry(editor, sourceElementRef.current),
652
653
  _getSafeNodeEntry8 = (0, _slicedToArray2["default"])(_getSafeNodeEntry7, 2),
653
654
  sourceNode = _getSafeNodeEntry8[0],
@@ -677,6 +678,11 @@ var SideToolbar = function SideToolbar() {
677
678
  clearAllDragStyles();
678
679
  return;
679
680
  }
681
+ var eventEditorContainer = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : (_event$target$closest = _event$target.closest) === null || _event$target$closest === void 0 ? void 0 : _event$target$closest.call(_event$target, '.sdoc-article-container');
682
+ if (eventEditorContainer && eventEditorContainer !== editorContainer) {
683
+ clearAllDragStyles();
684
+ return;
685
+ }
680
686
  var containerRect = editorContainer.getBoundingClientRect();
681
687
 
682
688
  // Current visible area of editor container
@@ -769,6 +775,9 @@ var SideToolbar = function SideToolbar() {
769
775
  previousRect = rect;
770
776
  });
771
777
  if (activeColumn) {
778
+ event.preventDefault();
779
+ event.stopPropagation();
780
+ event.dataTransfer.dropEffect = 'move';
772
781
  activeColumn.classList.add("sdoc-dragging-".concat(activeDirection));
773
782
  activeDragElRef.current = activeColumn;
774
783
  pendingSideDropRef.current = {
@@ -806,11 +815,20 @@ var SideToolbar = function SideToolbar() {
806
815
  };
807
816
  } else {
808
817
  clearAllDragStyles();
818
+ return;
809
819
  }
820
+ event.preventDefault();
821
+ event.stopPropagation();
822
+ event.dataTransfer.dropEffect = 'move';
810
823
  }, [clearAllDragStyles, editor, getEditorContainer, isEditorDrag]);
811
824
  var handleDragLeave = (0, _react.useCallback)(function (event) {
825
+ var _pendingSideDropRef$c;
812
826
  var editorContainer = event.currentTarget;
813
827
  var relatedTarget = event.relatedTarget;
828
+ var pendingDropElement = (_pendingSideDropRef$c = pendingSideDropRef.current) === null || _pendingSideDropRef$c === void 0 ? void 0 : _pendingSideDropRef$c.element;
829
+
830
+ // Preserve a pending move within this editor until drop or dragend.
831
+ if (pendingDropElement && editorContainer.contains(pendingDropElement)) return;
814
832
 
815
833
  // Ignore dragleave events from descendants. Some browsers report a null
816
834
  // relatedTarget when moving between block elements, so clearing here
@@ -892,20 +910,14 @@ var SideToolbar = function SideToolbar() {
892
910
  return true;
893
911
  }, [editor]);
894
912
  var handleDropCapture = (0, _react.useCallback)(function (event) {
895
- if (!isEditorDrag() || !pendingSideDropRef.current) return;
913
+ if (!isEditorDrag()) return;
896
914
 
897
- // Stop the normal block drop before mutating Slate. The actual target and
898
- // direction were recorded during dragover, so this path does not depend
899
- // on the final drop event target or on a final dragover being delivered.
900
- event.preventDefault();
901
- event.stopPropagation();
902
- var handled = handleDrop();
903
- if (!handled) {
904
- resetDragState();
905
- return;
906
- }
915
+ // Recheck the final position and stop the normal block drop for side hits.
916
+ handleDragover(event);
917
+ if (!pendingSideDropRef.current) return;
918
+ handleDrop();
907
919
  resetDragState();
908
- }, [handleDrop, isEditorDrag, resetDragState]);
920
+ }, [handleDragover, handleDrop, isEditorDrag, resetDragState]);
909
921
  var handleDragEnd = (0, _react.useCallback)(function () {
910
922
  // dragend also fires when the user cancels a drag or releases outside the
911
923
  // editor. Only a confirmed drop event may mutate the Slate document.
@@ -916,17 +928,18 @@ var SideToolbar = function SideToolbar() {
916
928
  var editorContainer = getEditorContainer();
917
929
  if (!editorContainer) return undefined;
918
930
 
919
- // Keep drag events scoped to the current editor container. Capture phase
920
- // still lets this handler run before block-level handlers in the editor.
921
- editorContainer.addEventListener('dragover', handleDragover, true);
931
+ // Side hit areas can extend outside the editor container. Accept them at
932
+ // document level, while the handlers still validate this editor's drag.
933
+ var dragEventTarget = editorContainer.ownerDocument;
934
+ dragEventTarget.addEventListener('dragover', handleDragover, true);
922
935
  editorContainer.addEventListener('dragend', handleDragEnd, true);
923
936
  editorContainer.addEventListener('dragleave', handleDragLeave, true);
924
- editorContainer.addEventListener('drop', handleDropCapture, true);
937
+ dragEventTarget.addEventListener('drop', handleDropCapture, true);
925
938
  return function () {
926
- editorContainer.removeEventListener('dragover', handleDragover, true);
939
+ dragEventTarget.removeEventListener('dragover', handleDragover, true);
927
940
  editorContainer.removeEventListener('dragend', handleDragEnd, true);
928
941
  editorContainer.removeEventListener('dragleave', handleDragLeave, true);
929
- editorContainer.removeEventListener('drop', handleDropCapture, true);
942
+ dragEventTarget.removeEventListener('drop', handleDropCapture, true);
930
943
  };
931
944
  }, [getEditorContainer, handleDragEnd, handleDragLeave, handleDragover, handleDropCapture]);
932
945
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !_commonUtils.isMobile && /*#__PURE__*/_react["default"].createElement("div", {
@@ -943,7 +956,6 @@ var SideToolbar = function SideToolbar() {
943
956
  onMouseDown: onMouseDown,
944
957
  draggable: true,
945
958
  onDragStart: dragStart,
946
- onDragEnd: handleDragEnd,
947
959
  className: "sdoc-side-op-icon",
948
960
  onClick: onShowSideMenuToggle,
949
961
  onMouseEnter: onMouseEnter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.250",
3
+ "version": "3.0.251",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "9c4af0de615f973e844f37e346f7f0d7aeeaf41f"
74
+ "gitHead": "fff8d3dc8f019c7a0f0168e906ed6091e11ad0ab"
75
75
  }