@atlaskit/editor-plugin-block-controls 6.2.0 → 6.3.1

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/pm-plugins/decorations-anchor.js +7 -3
  3. package/dist/cjs/pm-plugins/decorations-drop-target-active.js +2 -1
  4. package/dist/cjs/pm-plugins/decorations-quick-insert-button.js +5 -7
  5. package/dist/cjs/pm-plugins/handle-mouse-over.js +36 -12
  6. package/dist/cjs/pm-plugins/main.js +3 -2
  7. package/dist/cjs/pm-plugins/quick-insert-calculate-position.js +2 -1
  8. package/dist/cjs/pm-plugins/utils/anchor-utils.js +3 -2
  9. package/dist/cjs/ui/block-menu.js +3 -2
  10. package/dist/cjs/ui/drag-handle.js +14 -12
  11. package/dist/cjs/ui/drop-target-layout.js +4 -2
  12. package/dist/cjs/ui/drop-target.js +20 -6
  13. package/dist/cjs/ui/global-styles.js +96 -1
  14. package/dist/cjs/ui/inline-drop-target.js +39 -5
  15. package/dist/cjs/ui/quick-insert-button.js +3 -2
  16. package/dist/cjs/ui/utils/anchor-name.js +4 -0
  17. package/dist/cjs/ui/utils/dom-attr-name.js +53 -0
  18. package/dist/es2019/pm-plugins/decorations-anchor.js +7 -3
  19. package/dist/es2019/pm-plugins/decorations-drop-target-active.js +2 -1
  20. package/dist/es2019/pm-plugins/decorations-quick-insert-button.js +5 -7
  21. package/dist/es2019/pm-plugins/handle-mouse-over.js +30 -12
  22. package/dist/es2019/pm-plugins/main.js +3 -2
  23. package/dist/es2019/pm-plugins/quick-insert-calculate-position.js +2 -1
  24. package/dist/es2019/pm-plugins/utils/anchor-utils.js +3 -2
  25. package/dist/es2019/ui/block-menu.js +3 -2
  26. package/dist/es2019/ui/drag-handle.js +14 -12
  27. package/dist/es2019/ui/drop-target-layout.js +4 -2
  28. package/dist/es2019/ui/drop-target.js +20 -6
  29. package/dist/es2019/ui/global-styles.js +131 -1
  30. package/dist/es2019/ui/inline-drop-target.js +39 -5
  31. package/dist/es2019/ui/quick-insert-button.js +4 -3
  32. package/dist/es2019/ui/utils/anchor-name.js +4 -0
  33. package/dist/es2019/ui/utils/dom-attr-name.js +47 -0
  34. package/dist/esm/pm-plugins/decorations-anchor.js +7 -3
  35. package/dist/esm/pm-plugins/decorations-drop-target-active.js +2 -1
  36. package/dist/esm/pm-plugins/decorations-quick-insert-button.js +5 -7
  37. package/dist/esm/pm-plugins/handle-mouse-over.js +35 -12
  38. package/dist/esm/pm-plugins/main.js +3 -2
  39. package/dist/esm/pm-plugins/quick-insert-calculate-position.js +2 -1
  40. package/dist/esm/pm-plugins/utils/anchor-utils.js +3 -2
  41. package/dist/esm/ui/block-menu.js +3 -2
  42. package/dist/esm/ui/drag-handle.js +14 -12
  43. package/dist/esm/ui/drop-target-layout.js +4 -2
  44. package/dist/esm/ui/drop-target.js +20 -6
  45. package/dist/esm/ui/global-styles.js +96 -1
  46. package/dist/esm/ui/inline-drop-target.js +39 -5
  47. package/dist/esm/ui/quick-insert-button.js +4 -3
  48. package/dist/esm/ui/utils/anchor-name.js +4 -0
  49. package/dist/esm/ui/utils/dom-attr-name.js +47 -0
  50. package/dist/types/pm-plugins/decorations-anchor.d.ts +2 -0
  51. package/dist/types/ui/utils/dom-attr-name.d.ts +5 -0
  52. package/dist/types-ts4.5/pm-plugins/decorations-anchor.d.ts +2 -0
  53. package/dist/types-ts4.5/ui/utils/dom-attr-name.d.ts +5 -0
  54. package/package.json +4 -7
@@ -1,5 +1,6 @@
1
1
  import { expandSelectionBounds } from '@atlaskit/editor-common/selection';
2
2
  import { isEmptyParagraph } from '@atlaskit/editor-common/utils';
3
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
4
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
4
5
  import { getNodeAnchor } from './decorations-common';
5
6
  import { createDropTargetDecoration, createLayoutDropTargetDecoration } from './decorations-drop-target';
@@ -227,7 +228,7 @@ export var getActiveDropTargetDecorations = function getActiveDropTargetDecorati
227
228
  }
228
229
  }
229
230
  }
230
- defaultActiveAnchorTracker.emit(getNodeAnchor(rootNodeWithPos.node));
231
+ defaultActiveAnchorTracker.emit(expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? api.core.actions.getAnchorIdForNode(rootNodeWithPos.node, rootNodeWithPos.pos) || '' : getNodeAnchor(rootNodeWithPos.node));
231
232
  return {
232
233
  decsToAdd: decsToAdd,
233
234
  decsToRemove: decsToRemove
@@ -58,13 +58,11 @@ export var quickInsertButtonDecoration = function quickInsertButtonDecoration(_r
58
58
  };
59
59
  return Decoration.widget(rootPos, function (view, getPos) {
60
60
  var element = document.createElement('span');
61
- if (fg('platform_editor_controls_patch_15')) {
62
- // inline decoration causes cursor disappear when focusing editor at the first line (e.g. press Tab when title is focused)
63
- element.style.display = 'block';
64
- if (expValEquals('platform_editor_quick_insert_image_wrap_right_fix', 'isEnabled', true)) {
65
- // make sure it does not interfere with elements floating next to each other e.g. paragraph next to image with wrap-right
66
- element.style.clear = 'unset';
67
- }
61
+ // inline decoration causes cursor disappear when focusing editor at the first line (e.g. press Tab when title is focused)
62
+ element.style.display = 'block';
63
+ if (expValEquals('platform_editor_quick_insert_image_wrap_right_fix', 'isEnabled', true)) {
64
+ // make sure it does not interfere with elements floating next to each other e.g. paragraph next to image with wrap-right
65
+ element.style.clear = 'unset';
68
66
  }
69
67
  element.contentEditable = 'false';
70
68
  element.setAttribute('data-blocks-quick-insert-container', 'true');
@@ -1,6 +1,11 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import memoizeOne from 'memoize-one';
1
3
  import { fg } from '@atlaskit/platform-feature-flags';
4
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
2
5
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
3
6
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
7
+ import { getAnchorAttrName, getTypeNameAttrName, getTypeNameFromDom, NODE_ANCHOR_ATTR_NAME } from '../ui/utils/dom-attr-name';
8
+ import { IGNORE_NODE_DESCENDANTS_ADVANCED_LAYOUT, IGNORE_NODES_NEXT } from './decorations-anchor';
4
9
  var isEmptyNestedParagraphOrHeading = function isEmptyNestedParagraphOrHeading(target) {
5
10
  if (target instanceof HTMLHeadingElement || target instanceof HTMLParagraphElement) {
6
11
  var _target$parentElement;
@@ -8,6 +13,24 @@ var isEmptyNestedParagraphOrHeading = function isEmptyNestedParagraphOrHeading(t
8
13
  }
9
14
  return false;
10
15
  };
16
+ var getNodeSelector = function getNodeSelector(ignoreNodes, ignoreNodeDescendants) {
17
+ var baseSelector = "[".concat(NODE_ANCHOR_ATTR_NAME, "]");
18
+ if (ignoreNodes.length === 0 && ignoreNodeDescendants.length === 0) {
19
+ return baseSelector;
20
+ }
21
+ var ignoreNodeSelectorList = ignoreNodes.map(function (node) {
22
+ return "[data-prosemirror-node-name=\"".concat(node, "\"]");
23
+ });
24
+ var ignoreNodeDescendantsSelectorList = ignoreNodeDescendants.map(function (node) {
25
+ return "[data-prosemirror-node-name=\"".concat(node, "\"] [data-node-anchor]");
26
+ });
27
+ var ignoreSelector = [].concat(_toConsumableArray(ignoreNodeSelectorList), _toConsumableArray(ignoreNodeDescendantsSelectorList), ['[data-prosemirror-node-inline="true"]']).join(', ');
28
+ return "".concat(baseSelector, ":not(").concat(ignoreSelector, ")");
29
+ };
30
+ var getDefaultNodeSelector = memoizeOne(function () {
31
+ // we don't show handler for node nested in table
32
+ return getNodeSelector(_toConsumableArray(IGNORE_NODES_NEXT), [].concat(_toConsumableArray(IGNORE_NODE_DESCENDANTS_ADVANCED_LAYOUT), ['table']));
33
+ });
11
34
  export var handleMouseOver = function handleMouseOver(view, event, api) {
12
35
  var _api$blockControls, _api$editorDisabled, _target$classList;
13
36
  var _ref = (api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.sharedState.currentState()) || {},
@@ -37,21 +60,21 @@ export var handleMouseOver = function handleMouseOver(view, event, api) {
37
60
  if (target !== null && target !== void 0 && (_target$classList = target.classList) !== null && _target$classList !== void 0 && _target$classList.contains('ProseMirror')) {
38
61
  return false;
39
62
  }
40
- var rootElement = target === null || target === void 0 ? void 0 : target.closest('[data-drag-handler-anchor-name]');
63
+ var rootElement = target === null || target === void 0 ? void 0 : target.closest(expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? getDefaultNodeSelector() : "[data-drag-handler-anchor-name]");
41
64
  if (rootElement) {
42
65
  var _rootElement$parentEl;
43
66
  // We want to exlude handles from showing for empty paragraph and heading nodes
44
67
  if (isEmptyNestedParagraphOrHeading(rootElement)) {
45
68
  return false;
46
69
  }
47
- if (rootElement.getAttribute('data-drag-handler-node-type') === 'media' && editorExperiment('advanced_layouts', true)) {
48
- rootElement = rootElement.closest('[data-drag-handler-anchor-name][data-drag-handler-node-type="mediaSingle"]');
70
+ if (rootElement.getAttribute(getTypeNameAttrName()) === 'media' && editorExperiment('advanced_layouts', true)) {
71
+ rootElement = rootElement.closest("[".concat(getAnchorAttrName(), "][").concat(getTypeNameAttrName(), "=\"mediaSingle\"]"));
49
72
  if (!rootElement) {
50
73
  return false;
51
74
  }
52
75
  }
53
- var parentElement = (_rootElement$parentEl = rootElement.parentElement) === null || _rootElement$parentEl === void 0 ? void 0 : _rootElement$parentEl.closest('[data-drag-handler-anchor-name]');
54
- var parentElementType = parentElement === null || parentElement === void 0 ? void 0 : parentElement.getAttribute('data-drag-handler-node-type');
76
+ var parentElement = (_rootElement$parentEl = rootElement.parentElement) === null || _rootElement$parentEl === void 0 ? void 0 : _rootElement$parentEl.closest("[".concat(getAnchorAttrName(), "]"));
77
+ var parentElementType = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? getTypeNameFromDom(parentElement) : parentElement === null || parentElement === void 0 ? void 0 : parentElement.getAttribute('data-drag-handler-node-type');
55
78
  if (editorExperiment('advanced_layouts', true)) {
56
79
  // We want to exclude handles from showing for direct descendant of table nodes (i.e. nodes in cells)
57
80
  if (fg('platform_editor_table_drag_handle_shift_fix')) {
@@ -59,8 +82,8 @@ export var handleMouseOver = function handleMouseOver(view, event, api) {
59
82
  rootElement = parentElement;
60
83
  } else if (parentElement && parentElementType === 'tableRow') {
61
84
  var _parentElement$parent;
62
- var grandparentElement = parentElement === null || parentElement === void 0 || (_parentElement$parent = parentElement.parentElement) === null || _parentElement$parent === void 0 ? void 0 : _parentElement$parent.closest('[data-drag-handler-anchor-name]');
63
- var grandparentElementType = grandparentElement === null || grandparentElement === void 0 ? void 0 : grandparentElement.getAttribute('data-drag-handler-node-type');
85
+ var grandparentElement = parentElement === null || parentElement === void 0 || (_parentElement$parent = parentElement.parentElement) === null || _parentElement$parent === void 0 ? void 0 : _parentElement$parent.closest("[".concat(getAnchorAttrName(), "]"));
86
+ var grandparentElementType = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? getTypeNameFromDom(grandparentElement) : grandparentElement === null || grandparentElement === void 0 ? void 0 : grandparentElement.getAttribute('data-drag-handler-node-type');
64
87
  if (grandparentElement && grandparentElementType === 'table') {
65
88
  rootElement = grandparentElement;
66
89
  }
@@ -77,7 +100,7 @@ export var handleMouseOver = function handleMouseOver(view, event, api) {
77
100
 
78
101
  // Ignored via go/ees005
79
102
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
80
- var anchorName = rootElement.getAttribute('data-drag-handler-anchor-name');
103
+ var anchorName = rootElement.getAttribute(getAnchorAttrName());
81
104
  // No need to update handle position if its already there
82
105
  if ((activeNode === null || activeNode === void 0 ? void 0 : activeNode.anchorName) === anchorName) {
83
106
  return false;
@@ -118,13 +141,13 @@ export var handleMouseOver = function handleMouseOver(view, event, api) {
118
141
  if (targetPos !== rootPos) {
119
142
  var rootDOM = view.nodeDOM(rootPos);
120
143
  if (rootDOM instanceof HTMLElement) {
121
- var _rootDOM$getAttribute, _rootDOM$getAttribute2;
122
- rootAnchorName = (_rootDOM$getAttribute = rootDOM.getAttribute('data-drag-handler-anchor-name')) !== null && _rootDOM$getAttribute !== void 0 ? _rootDOM$getAttribute : undefined;
123
- rootNodeType = (_rootDOM$getAttribute2 = rootDOM.getAttribute('data-drag-handler-node-type')) !== null && _rootDOM$getAttribute2 !== void 0 ? _rootDOM$getAttribute2 : undefined;
144
+ var _rootDOM$getAttribute;
145
+ rootAnchorName = (_rootDOM$getAttribute = rootDOM.getAttribute(getAnchorAttrName())) !== null && _rootDOM$getAttribute !== void 0 ? _rootDOM$getAttribute : undefined;
146
+ rootNodeType = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? getTypeNameFromDom(rootDOM) : rootDOM.getAttribute('data-drag-handler-node-type');
124
147
  }
125
148
  }
126
149
  }
127
- var nodeType = rootElement.getAttribute('data-drag-handler-node-type');
150
+ var nodeType = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? getTypeNameFromDom(rootElement) : rootElement.getAttribute('data-drag-handler-node-type');
128
151
  if (nodeType) {
129
152
  if (editorExperiment('platform_editor_controls', 'variant1')) {
130
153
  var _api$core, _api$blockControls2;
@@ -19,6 +19,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
19
19
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
20
20
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
21
21
  import { BLOCK_MENU_ENABLED } from '../ui/consts';
22
+ import { getAnchorAttrName } from '../ui/utils/dom-attr-name';
22
23
  import { findNodeDecs, nodeDecorations } from './decorations-anchor';
23
24
  import { dragHandleDecoration, emptyParagraphNodeDecorations, findHandleDec } from './decorations-drag-handle';
24
25
  import { dropTargetDecorations, findDropTargetDecs } from './decorations-drop-target';
@@ -636,7 +637,7 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
636
637
  event.preventDefault();
637
638
  return false;
638
639
  }
639
- var nodeElement = (_event$target = event.target) === null || _event$target === void 0 || (_event$target$closest = _event$target.closest) === null || _event$target$closest === void 0 ? void 0 : _event$target$closest.call(_event$target, '[data-drag-handler-anchor-name]');
640
+ var nodeElement = (_event$target = event.target) === null || _event$target === void 0 || (_event$target$closest = _event$target.closest) === null || _event$target$closest === void 0 ? void 0 : _event$target$closest.call(_event$target, "[".concat(getAnchorAttrName(), "]"));
640
641
  if (!nodeElement) {
641
642
  return false;
642
643
  }
@@ -677,7 +678,7 @@ export var createPlugin = function createPlugin(api, getIntl, nodeViewPortalProv
677
678
  if (isHTMLElement(event.target)) {
678
679
  var closestParentElement = event.target.closest('[data-drag-handler-anchor-depth="0"]');
679
680
  if (closestParentElement) {
680
- var currentAnchor = closestParentElement.getAttribute('data-drag-handler-anchor-name');
681
+ var currentAnchor = closestParentElement.getAttribute(getAnchorAttrName());
681
682
  if (currentAnchor) {
682
683
  defaultActiveAnchorTracker.emit(currentAnchor);
683
684
  }
@@ -3,6 +3,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
4
  import { rootElementGap, topPositionAdjustment, QUICK_INSERT_DIMENSIONS, QUICK_INSERT_LEFT_OFFSET } from '../ui/consts';
5
5
  import { refreshAnchorName } from '../ui/utils/anchor-name';
6
+ import { getAnchorAttrName } from '../ui/utils/dom-attr-name';
6
7
  import { getControlBottomCSSValue, getControlHeightCSSValue, getNodeHeight, getTopPosition, shouldBeSticky } from './utils/drag-handle-positions';
7
8
  import { getLeftPositionForRootElement } from './utils/widget-positions';
8
9
 
@@ -25,7 +26,7 @@ export var calculatePosition = function calculatePosition(_ref) {
25
26
  view: view,
26
27
  anchorName: rootAnchorName
27
28
  });
28
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(safeAnchorName, "\"]"));
29
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(safeAnchorName, "\"]"));
29
30
  var hasResizer = rootNodeType === 'table' || rootNodeType === 'mediaSingle';
30
31
  var isExtension = rootNodeType === 'extension' || rootNodeType === 'bodiedExtension';
31
32
  var isBlockCard = rootNodeType === 'blockCard';
@@ -4,6 +4,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
5
5
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
6
6
  import memoizeOne from 'memoize-one';
7
+ import { getAnchorAttrName } from '../../ui/utils/dom-attr-name';
7
8
  export var isAnchorSupported = memoizeOne(function () {
8
9
  // directly use CSS would cause failed SSR tests.
9
10
  if (window.CSS && window.CSS.supports) {
@@ -30,9 +31,9 @@ export var AnchorRectCache = /*#__PURE__*/function () {
30
31
  value: function getRects() {
31
32
  if (this.isDirty) {
32
33
  var _this$view;
33
- var anchorElements = ((_this$view = this.view) === null || _this$view === void 0 ? void 0 : _this$view.dom.querySelectorAll('[data-drag-handler-anchor-name]')) || [];
34
+ var anchorElements = ((_this$view = this.view) === null || _this$view === void 0 ? void 0 : _this$view.dom.querySelectorAll("[".concat(getAnchorAttrName(), "]"))) || [];
34
35
  this.anchorRectMap = Array.from(anchorElements).reduce(function (prev, curr) {
35
- var anchorName = curr.getAttribute('data-drag-handler-anchor-name');
36
+ var anchorName = curr.getAttribute(getAnchorAttrName());
36
37
  if (anchorName) {
37
38
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, anchorName, {
38
39
  height: curr.clientHeight,
@@ -7,6 +7,7 @@ import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styl
7
7
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
8
8
  import { getBlockMenuItems, menuItemsCallback } from './block-menu-items';
9
9
  import { BLOCK_MENU_WIDTH } from './consts';
10
+ import { getAnchorAttrName } from './utils/dom-attr-name';
10
11
  var BlockMenuContent = function BlockMenuContent(_ref) {
11
12
  var editorView = _ref.editorView,
12
13
  mountPoint = _ref.mountPoint,
@@ -15,7 +16,7 @@ var BlockMenuContent = function BlockMenuContent(_ref) {
15
16
  api = _ref.api,
16
17
  menuTriggerBy = _ref.menuTriggerBy,
17
18
  formatMessage = _ref.formatMessage;
18
- var activeNodeSelector = "[data-drag-handler-anchor-name=".concat(menuTriggerBy, "]");
19
+ var activeNodeSelector = "[".concat(getAnchorAttrName(), "=").concat(menuTriggerBy, "]");
19
20
  var targetHandleRef = document.querySelector(activeNodeSelector);
20
21
  var items = getBlockMenuItems(formatMessage);
21
22
  var handleOpenChange = useCallback(function (payload) {
@@ -100,7 +101,7 @@ var BlockMenu = function BlockMenu(_ref3) {
100
101
  formatMessage: formatMessage
101
102
  });
102
103
  }
103
- var activeNodeSelector = "[data-drag-handler-anchor-name=".concat(menuTriggerBy, "]");
104
+ var activeNodeSelector = "[".concat(getAnchorAttrName(), "=").concat(menuTriggerBy, "]");
104
105
  var targetHandleRef = document.querySelector(activeNodeSelector);
105
106
  var items = getBlockMenuItems(formatMessage);
106
107
  var handleOpenChange = function handleOpenChange(payload) {
@@ -34,6 +34,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
34
34
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
35
35
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
36
36
  import Tooltip from '@atlaskit/tooltip';
37
+ import { getNodeTypeWithLevel } from '../pm-plugins/decorations-common';
37
38
  import { key } from '../pm-plugins/main';
38
39
  import { getMultiSelectAnalyticsAttributes } from '../pm-plugins/utils/analytics';
39
40
  import { getControlBottomCSSValue, getControlHeightCSSValue, getLeftPosition, getNodeHeight, getTopPosition, shouldBeSticky, shouldMaskNodeControls } from '../pm-plugins/utils/drag-handle-positions';
@@ -42,6 +43,7 @@ import { alignAnchorHeadInDirectionOfPos, expandSelectionHeadToNodeAtPos } from
42
43
  import { BLOCK_MENU_ENABLED, DRAG_HANDLE_BORDER_RADIUS, DRAG_HANDLE_HEIGHT, DRAG_HANDLE_MAX_SHIFT_CLICK_DEPTH, DRAG_HANDLE_ZINDEX, dragHandleGap, nodeMargins, spacingBetweenNodesForPreview, STICKY_CONTROLS_TOP_MARGIN, topPositionAdjustment } from './consts';
43
44
  import { dragPreview } from './drag-preview';
44
45
  import { refreshAnchorName } from './utils/anchor-name';
46
+ import { getAnchorAttrName } from './utils/dom-attr-name';
45
47
  import { VisibilityContainer } from './visibility-container';
46
48
  var iconWrapperStyles = xcss({
47
49
  display: 'flex',
@@ -323,7 +325,7 @@ export var DragHandle = function DragHandle(_ref) {
323
325
  }
324
326
  // blockCard/datasource width is rendered correctly after this decoraton does. We need to observe for changes.
325
327
  if (nodeType === 'blockCard') {
326
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(anchorName, "\"]"));
328
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(anchorName, "\"]"));
327
329
  var container = dom === null || dom === void 0 ? void 0 : dom.querySelector('.datasourceView-content-inner-wrap');
328
330
  if (container) {
329
331
  var resizeObserver = new ResizeObserver(function (entries) {
@@ -542,7 +544,7 @@ export var DragHandle = function DragHandle(_ref) {
542
544
  },
543
545
  render: function render(_ref6) {
544
546
  var container = _ref6.container;
545
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(anchorName, "\"]"));
547
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(anchorName, "\"]"));
546
548
  if (!dom) {
547
549
  return;
548
550
  }
@@ -625,7 +627,7 @@ export var DragHandle = function DragHandle(_ref) {
625
627
  setRecalculatePosition(recalculatePosition);
626
628
  }
627
629
  var pos = getPos();
628
- var $pos = pos && view.state.doc.resolve(pos);
630
+ var $pos = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? typeof pos === 'number' && view.state.doc.resolve(pos) : pos && view.state.doc.resolve(pos);
629
631
  var parentPos = $pos && $pos.depth ? $pos.before() : undefined;
630
632
  var node = parentPos !== undefined ? view.state.doc.nodeAt(parentPos) : undefined;
631
633
  var parentNodeType = node === null || node === void 0 ? void 0 : node.type.name;
@@ -635,7 +637,7 @@ export var DragHandle = function DragHandle(_ref) {
635
637
  view: view,
636
638
  anchorName: anchorName
637
639
  }) : anchorName;
638
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(safeAnchorName, "\"]"));
640
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(safeAnchorName, "\"]"));
639
641
  var hasResizer = nodeType === 'table' || nodeType === 'mediaSingle';
640
642
  var isExtension = nodeType === 'extension' || nodeType === 'bodiedExtension' || nodeType === 'multiBodiedExtension' && fg('platform_editor_multi_body_extension_extensibility');
641
643
  var isBlockCard = nodeType === 'blockCard';
@@ -660,7 +662,7 @@ export var DragHandle = function DragHandle(_ref) {
660
662
  var bottom = editorExperiment('platform_editor_controls', 'variant1') ? getControlBottomCSSValue(safeAnchorName, isSticky, isTopLevelNode, isLayoutColumn) : {};
661
663
  return _objectSpread({
662
664
  left: isEdgeCase ? "calc(anchor(".concat(safeAnchorName, " start) + ").concat(getLeftPosition(dom, nodeType, innerContainer, isMacroInteractionUpdates, parentNodeType), ")") : editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc((anchor(".concat(safeAnchorName, " right) + anchor(").concat(safeAnchorName, " left))/2 - ").concat(DRAG_HANDLE_HEIGHT / 2, "px)") : "calc(anchor(".concat(safeAnchorName, " start) - ").concat(DRAG_HANDLE_WIDTH, "px - ").concat(dragHandleGap(nodeType, parentNodeType), "px)"),
663
- top: editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc(anchor(".concat(safeAnchorName, " top) - ").concat(DRAG_HANDLE_WIDTH, "px)") : "calc(anchor(".concat(safeAnchorName, " start) + ").concat(topPositionAdjustment(nodeType), "px)")
665
+ top: editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc(anchor(".concat(safeAnchorName, " top) - ").concat(DRAG_HANDLE_WIDTH, "px)") : "calc(anchor(".concat(safeAnchorName, " start) + ").concat(expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? $pos && $pos.nodeAfter && getNodeTypeWithLevel($pos.nodeAfter) || nodeType : nodeType, "px)")
664
666
  }, bottom);
665
667
  }
666
668
  var height = editorExperiment('platform_editor_controls', 'variant1') ? getControlHeightCSSValue(getNodeHeight(dom, safeAnchorName, anchorRectCache) || 0, isSticky, isTopLevelNode, "".concat(DRAG_HANDLE_HEIGHT), isLayoutColumn) : {};
@@ -671,7 +673,7 @@ export var DragHandle = function DragHandle(_ref) {
671
673
  }, [anchorName, getPos, view, nodeType, macroInteractionUpdates, anchorRectCache, isTopLevelNode, isLayoutColumn, recalculatePosition]);
672
674
  var calculatePositionOld = useCallback(function () {
673
675
  var pos = getPos();
674
- var $pos = pos && view.state.doc.resolve(pos);
676
+ var $pos = expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? typeof pos === 'number' && view.state.doc.resolve(pos) : pos && view.state.doc.resolve(pos);
675
677
  var parentPos = $pos && $pos.depth ? $pos.before() : undefined;
676
678
  var node = parentPos !== undefined ? view.state.doc.nodeAt(parentPos) : undefined;
677
679
  var parentNodeType = node === null || node === void 0 ? void 0 : node.type.name;
@@ -681,7 +683,7 @@ export var DragHandle = function DragHandle(_ref) {
681
683
  view: view,
682
684
  anchorName: anchorName
683
685
  }) : anchorName;
684
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(safeAnchorName, "\"]"));
686
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(safeAnchorName, "\"]"));
685
687
  var hasResizer = nodeType === 'table' || nodeType === 'mediaSingle';
686
688
  var isExtension = nodeType === 'extension' || nodeType === 'bodiedExtension' || nodeType === 'multiBodiedExtension' && fg('platform_editor_multi_body_extension_extensibility');
687
689
  var isBlockCard = nodeType === 'blockCard' && !!blockCardWidth;
@@ -706,7 +708,7 @@ export var DragHandle = function DragHandle(_ref) {
706
708
  var bottom = editorExperiment('platform_editor_controls', 'variant1') ? getControlBottomCSSValue(safeAnchorName, isSticky, isTopLevelNode, isLayoutColumn) : {};
707
709
  return _objectSpread({
708
710
  left: isEdgeCase ? "calc(anchor(".concat(safeAnchorName, " start) + ").concat(getLeftPosition(dom, nodeType, innerContainer, isMacroInteractionUpdates, parentNodeType), ")") : editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc((anchor(".concat(safeAnchorName, " right) + anchor(").concat(safeAnchorName, " left))/2 - ").concat(DRAG_HANDLE_HEIGHT / 2, "px)") : "calc(anchor(".concat(safeAnchorName, " start) - ").concat(DRAG_HANDLE_WIDTH, "px - ").concat(dragHandleGap(nodeType, parentNodeType), "px)"),
709
- top: editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc(anchor(".concat(safeAnchorName, " top) - ").concat(DRAG_HANDLE_WIDTH, "px)") : "calc(anchor(".concat(safeAnchorName, " start) + ").concat(topPositionAdjustment(nodeType), "px)")
711
+ top: editorExperiment('advanced_layouts', true) && isLayoutColumn ? "calc(anchor(".concat(safeAnchorName, " top) - ").concat(DRAG_HANDLE_WIDTH, "px)") : "calc(anchor(".concat(safeAnchorName, " start) + ").concat(topPositionAdjustment(expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? $pos && $pos.nodeAfter && getNodeTypeWithLevel($pos.nodeAfter) || nodeType : nodeType), "px)")
710
712
  }, bottom);
711
713
  }
712
714
  var height = editorExperiment('platform_editor_controls', 'variant1') ? getControlHeightCSSValue(getNodeHeight(dom, safeAnchorName, anchorRectCache) || 0, isSticky, isTopLevelNode, "".concat(DRAG_HANDLE_HEIGHT), isLayoutColumn) : {};
@@ -721,7 +723,7 @@ export var DragHandle = function DragHandle(_ref) {
721
723
  }
722
724
  var cleanUpTransitionListener;
723
725
  if (nodeType === 'extension' || nodeType === 'embedCard') {
724
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(anchorName, "\"]"));
726
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(anchorName, "\"]"));
725
727
  if (!dom) {
726
728
  return;
727
729
  }
@@ -747,7 +749,7 @@ export var DragHandle = function DragHandle(_ref) {
747
749
  }
748
750
  var cleanUpTransitionListener;
749
751
  if (nodeType === 'extension' || nodeType === 'embedCard') {
750
- var dom = view.dom.querySelector("[data-drag-handler-anchor-name=\"".concat(anchorName, "\"]"));
752
+ var dom = view.dom.querySelector("[".concat(getAnchorAttrName(), "=\"").concat(anchorName, "\"]"));
751
753
  if (!dom) {
752
754
  return;
753
755
  }
@@ -928,7 +930,7 @@ export var DragHandle = function DragHandle(_ref) {
928
930
  });
929
931
  }
930
932
  }, jsx("span", {
931
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles, fg('platform_editor_controls_patch_15') && buttonWrapperStylesPatch]
933
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles, buttonWrapperStylesPatch]
932
934
  }, renderButton()))));
933
935
  };
934
936
  var stickyWithoutTooltip = function stickyWithoutTooltip() {
@@ -942,7 +944,7 @@ export var DragHandle = function DragHandle(_ref) {
942
944
  }, jsx("span", {
943
945
  css: [tooltipContainerStyles, shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
944
946
  }, jsx("span", {
945
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles, fg('platform_editor_controls_patch_15') && buttonWrapperStylesPatch]
947
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles, buttonWrapperStylesPatch]
946
948
  }, renderButton())));
947
949
  };
948
950
  var buttonWithTooltip = function buttonWithTooltip() {
@@ -12,10 +12,12 @@ import { layoutBreakpointWidth } from '@atlaskit/editor-shared-styles';
12
12
  import { DropIndicator } from '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box';
13
13
  import { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
14
14
  import { B200 } from '@atlaskit/theme/colors';
15
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
15
16
  import { getNodeAnchor } from '../pm-plugins/decorations-common';
16
17
  import { useActiveAnchorTracker } from '../pm-plugins/utils/active-anchor-tracker';
17
18
  import { isAnchorSupported } from '../pm-plugins/utils/anchor-utils';
18
19
  import { getInsertLayoutStep, updateSelection } from '../pm-plugins/utils/update-selection';
20
+ import { getAnchorAttrName } from './utils/dom-attr-name';
19
21
 
20
22
  // 8px gap + 16px on left and right
21
23
  var DROP_TARGET_LAYOUT_DROP_ZONE_WIDTH = 40;
@@ -46,7 +48,7 @@ export var DropTargetLayout = function DropTargetLayout(props) {
46
48
  isDraggedOver = _useState2[0],
47
49
  setIsDraggedOver = _useState2[1];
48
50
  var anchorName = getNodeAnchor(parent);
49
- var nextNodeAnchorName = (_ref$current = ref.current) === null || _ref$current === void 0 || (_ref$current = _ref$current.parentElement) === null || _ref$current === void 0 || (_ref$current = _ref$current.nextElementSibling) === null || _ref$current === void 0 ? void 0 : _ref$current.getAttribute('data-drag-handler-anchor-name');
51
+ var nextNodeAnchorName = (_ref$current = ref.current) === null || _ref$current === void 0 || (_ref$current = _ref$current.parentElement) === null || _ref$current === void 0 || (_ref$current = _ref$current.nextElementSibling) === null || _ref$current === void 0 ? void 0 : _ref$current.getAttribute(getAnchorAttrName());
50
52
  var height = '100%';
51
53
  if (nextNodeAnchorName) {
52
54
  if (isAnchorSupported()) {
@@ -120,7 +122,7 @@ export var DropTargetLayout = function DropTargetLayout(props) {
120
122
  }, isDraggedOver ? jsx(DropIndicator, {
121
123
  edge: "right",
122
124
  gap: "-".concat(DROP_TARGET_LAYOUT_DROP_ZONE_WIDTH, "px")
123
- }) : isActiveAnchor && jsx("div", {
125
+ }) : (isActiveAnchor || expValEquals('platform_editor_native_anchor_support', 'isEnabled', true)) && jsx("div", {
124
126
  "data-testid": "block-ctrl-drop-hint"
125
127
  // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
126
128
  ,
@@ -13,6 +13,7 @@ import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks'
13
13
  import { DropIndicator } from '@atlaskit/pragmatic-drag-and-drop-react-drop-indicator/box';
14
14
  import { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
15
15
  import { layers } from '@atlaskit/theme/constants';
16
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
16
17
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
17
18
  import { getNodeAnchor } from '../pm-plugins/decorations-common';
18
19
  import { useActiveAnchorTracker } from '../pm-plugins/utils/active-anchor-tracker';
@@ -71,17 +72,26 @@ var HoverZone = function HoverZone(_ref) {
71
72
  onDragLeave = _ref.onDragLeave,
72
73
  onDrop = _ref.onDrop,
73
74
  node = _ref.node,
75
+ pos = _ref.pos,
74
76
  parent = _ref.parent,
75
77
  editorWidth = _ref.editorWidth,
76
78
  anchorRectCache = _ref.anchorRectCache,
77
79
  position = _ref.position,
78
80
  isNestedDropTarget = _ref.isNestedDropTarget,
79
- dropTargetStyle = _ref.dropTargetStyle;
81
+ dropTargetStyle = _ref.dropTargetStyle,
82
+ api = _ref.api;
80
83
  var ref = useRef(null);
81
84
  var isRemainingheight = dropTargetStyle === 'remainingHeight';
82
85
  var anchorName = useMemo(function () {
86
+ if (expValEquals('platform_editor_native_anchor_support', 'isEnabled', true)) {
87
+ if (node && typeof pos === 'number') {
88
+ var posOffset = position === 'upper' ? -node.nodeSize : 0;
89
+ return (api === null || api === void 0 ? void 0 : api.core.actions.getAnchorIdForNode(node, pos + posOffset)) || '';
90
+ }
91
+ return '';
92
+ }
83
93
  return node ? getNodeAnchor(node) : '';
84
- }, [node]);
94
+ }, [api, node, pos, position]);
85
95
  var _useActiveAnchorTrack = useActiveAnchorTracker(anchorName),
86
96
  _useActiveAnchorTrack2 = _slicedToArray(_useActiveAnchorTrack, 2),
87
97
  _isActive = _useActiveAnchorTrack2[0],
@@ -126,7 +136,7 @@ var HoverZone = function HoverZone(_ref) {
126
136
  // only apply upper drop zone
127
137
  if (isRemainingheight && position === 'upper') {
128
138
  // previous node
129
- var _anchorName = node ? getNodeAnchor(node) : '';
139
+ var _anchorName = node ? expValEquals('platform_editor_native_anchor_support', 'isEnabled', true) ? (api === null || api === void 0 ? void 0 : api.core.actions.getAnchorIdForNode(node, pos || -1)) || '' : getNodeAnchor(node) : '';
130
140
  var top = 'unset';
131
141
  if (_anchorName) {
132
142
  var enabledDropZone = enableDropZone.includes((node === null || node === void 0 ? void 0 : node.type.name) || '');
@@ -154,7 +164,7 @@ var HoverZone = function HoverZone(_ref) {
154
164
  });
155
165
  }
156
166
  return null;
157
- }, [anchorRectCache, isRemainingheight, node, position]);
167
+ }, [anchorRectCache, api, isRemainingheight, node, pos, position]);
158
168
  var isFullHeightInLayout = isRemainingheight && (parent === null || parent === void 0 ? void 0 : parent.type.name) === 'layoutColumn';
159
169
  return jsx("div", {
160
170
  ref: ref
@@ -220,11 +230,13 @@ export var DropTarget = function DropTarget(props) {
220
230
  },
221
231
  onDrop: onDrop,
222
232
  node: prevNode,
233
+ pos: getPos(),
223
234
  editorWidth: lineLength,
224
235
  anchorRectCache: anchorRectCache,
225
236
  position: "upper",
226
237
  isNestedDropTarget: isNestedDropTarget,
227
- dropTargetStyle: dropTargetStyle
238
+ dropTargetStyle: dropTargetStyle,
239
+ api: api
228
240
  }), jsx("div", {
229
241
  // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
230
242
  css: [styleDropTarget, isNestedDropTarget && nestedDropIndicatorStyle]
@@ -246,11 +258,13 @@ export var DropTarget = function DropTarget(props) {
246
258
  },
247
259
  onDrop: onDrop,
248
260
  node: nextNode,
261
+ pos: getPos(),
249
262
  parent: parentNode,
250
263
  editorWidth: lineLength,
251
264
  anchorRectCache: anchorRectCache,
252
265
  position: "lower",
253
- isNestedDropTarget: isNestedDropTarget
266
+ isNestedDropTarget: isNestedDropTarget,
267
+ api: api
254
268
  }), shouldAllowInlineDropTarget(isNestedDropTarget, nextNode, isSameLayout, activeNode) && jsx(Fragment, null, jsx(InlineDropTarget
255
269
  // Ignored via go/ees005
256
270
  // eslint-disable-next-line react/jsx-props-no-spreading