@atlaskit/editor-plugin-block-controls 3.10.1 → 3.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/editor-plugin-block-controls
2
2
 
3
+ ## 3.10.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#139698](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/139698)
8
+ [`cf8ea53ed0264`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cf8ea53ed0264) -
9
+ Clean-up nested expand feature gate
10
+ - [#142866](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/142866)
11
+ [`b2ff4351e7e00`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b2ff4351e7e00) -
12
+ Fix missing destroy callback for quick insert
13
+ - Updated dependencies
14
+
15
+ ## 3.10.2
16
+
17
+ ### Patch Changes
18
+
19
+ - [#142214](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/142214)
20
+ [`9643cb1c29edb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9643cb1c29edb) -
21
+ [ux] Improve and seperate sticky control masking into own gate
22
+
3
23
  ## 3.10.1
4
24
 
5
25
  ### Patch Changes
@@ -30,7 +30,9 @@ var findHandleDec = exports.findHandleDec = function findHandleDec(decorations,
30
30
  });
31
31
  };
32
32
  var dragHandleDecoration = exports.dragHandleDecoration = function dragHandleDecoration(api, formatMessage, pos, anchorName, nodeType, nodeViewPortalProviderAPI, handleOptions, anchorRectCache) {
33
- (0, _decorationsCommon.unmountDecorations)(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
33
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_fix_widget_destroy')) {
34
+ (0, _decorationsCommon.unmountDecorations)(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
35
+ }
34
36
  var unbind;
35
37
  var key = (0, _uuid.default)();
36
38
  return _view.Decoration.widget(pos, function (view, getPosUnsafe) {
@@ -121,8 +123,12 @@ var dragHandleDecoration = exports.dragHandleDecoration = function dragHandleDec
121
123
  side: -1,
122
124
  type: _decorationsCommon.TYPE_HANDLE_DEC,
123
125
  testid: "".concat(_decorationsCommon.TYPE_HANDLE_DEC, "-").concat((0, _uuid.default)()),
124
- destroy: function destroy() {
125
- return unbind && unbind();
126
+ destroy: function destroy(node) {
127
+ unbind && unbind();
128
+ if ((0, _platformFeatureFlags.fg)('platform_editor_fix_widget_destroy')) {
129
+ // eslint-disable-next-line @atlaskit/editor/no-as-casting
130
+ _reactDom.default.unmountComponentAtNode(node);
131
+ }
126
132
  }
127
133
  });
128
134
  };
@@ -57,6 +57,11 @@ var quickInsertButtonDecoration = exports.quickInsertButtonDecoration = function
57
57
  return element;
58
58
  }, {
59
59
  side: -2,
60
- type: TYPE_QUICK_INSERT
60
+ type: TYPE_QUICK_INSERT,
61
+ destroy: function destroy(_) {
62
+ if ((0, _platformFeatureFlags.fg)('platform_editor_fix_widget_destroy')) {
63
+ nodeViewPortalProviderAPI.remove(key);
64
+ }
65
+ }
61
66
  });
62
67
  };
@@ -77,6 +77,6 @@ var getControlHeightCSSValue = exports.getControlHeightCSSValue = function getCo
77
77
  var shouldMaskNodeControls = exports.shouldMaskNodeControls = function shouldMaskNodeControls(nodeType, isTopLevelNode) {
78
78
  return (
79
79
  // eslint-disable-next-line @atlaskit/platform/no-preconditioning
80
- isTopLevelNode && ['table'].includes(nodeType) && (0, _platformFeatureFlags.fg)('platform_editor_controls_sticky_controls') && (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')
80
+ isTopLevelNode && ['table'].includes(nodeType) && (0, _platformFeatureFlags.fg)('platform_editor_controls_sticky_controls') && (0, _platformFeatureFlags.fg)('platform_editor_controls_sticky_mask') && (0, _experiments.editorExperiment)('platform_editor_controls', 'variant1')
81
81
  );
82
82
  };
@@ -144,13 +144,6 @@ function canMoveNodeToIndex(destParent, indexIntoParent, srcNode, $destNodePos,
144
144
  }
145
145
  }
146
146
 
147
- // Place experiments here instead of just inside move-node.ts as it stops the drag marker from appearing.
148
- if ((0, _experiments.editorExperiment)('nested-expand-in-expand', false)) {
149
- if (destParentNodeType === expand && (activeNodeType === expand || activeNodeType === nestedExpand)) {
150
- return false;
151
- }
152
- }
153
-
154
147
  // NOTE: this will block drop targets from showing for dragging a table into another table
155
148
  // unless nested tables are supported and the nesting depth does not exceed 1
156
149
  if ((destParentNodeType === tableCell || destParentNodeType === tableHeader) && activeNodeType === table) {
@@ -47,18 +47,32 @@ var iconWrapperStyles = (0, _primitives.xcss)({
47
47
  justifyContent: 'center',
48
48
  alignItems: 'center'
49
49
  });
50
- var extendedIconWrapperStyles = (0, _react2.css)({
50
+ var buttonWrapperStyles = (0, _react2.css)({
51
51
  display: 'flex',
52
52
  justifyContent: 'center',
53
53
  alignItems: 'center',
54
- background: "var(--ds-surface, #FFFFFF)",
55
- marginBottom: "var(--ds-space-negative-100, -8px)",
56
- paddingBottom: "var(--ds-space-100, 8px)",
57
- marginTop: "var(--ds-space-negative-100, -8px)",
58
- paddingTop: "var(--ds-space-100, 8px)",
59
- marginRight: "var(--ds-space-negative-100, -8px)",
60
- paddingRight: "var(--ds-space-100, 8px)",
61
- borderRadius: '6px'
54
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
55
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
56
+ background: "linear-gradient(to bottom, ".concat("var(--ds-surface, #FFFFFF)", " 90%, transparent)"),
57
+ marginBottom: "var(--ds-space-negative-200, -16px)",
58
+ paddingBottom: "var(--ds-space-200, 16px)",
59
+ marginTop: "var(--ds-space-negative-400, -32px)",
60
+ paddingTop: "calc(".concat("var(--ds-space-400, 32px)", " - 1px)"),
61
+ marginRight: "var(--ds-space-negative-150, -12px)",
62
+ paddingRight: "var(--ds-space-150, 12px)",
63
+ boxSizing: 'border-box'
64
+ },
65
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
66
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
67
+ background: "linear-gradient(to bottom, ".concat("var(--ds-surface, #FFFFFF)", " 90%, transparent)"),
68
+ marginBottom: "var(--ds-space-negative-200, -16px)",
69
+ paddingBottom: "var(--ds-space-200, 16px)",
70
+ marginTop: "var(--ds-space-negative-400, -32px)",
71
+ paddingTop: "calc(".concat("var(--ds-space-400, 32px)", " - 1px)"),
72
+ marginRight: "var(--ds-space-negative-150, -12px)",
73
+ paddingRight: "var(--ds-space-150, 12px)",
74
+ boxSizing: 'border-box'
75
+ }
62
76
  });
63
77
 
64
78
  // update color to match quick insert button for new editor controls
@@ -149,34 +163,36 @@ var dragHandleContainerStyles = (0, _primitives.xcss)({
149
163
  boxSizing: 'border-box'
150
164
  });
151
165
  var tooltipContainerStyles = (0, _react2.css)({
152
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
153
- top: "".concat(_consts.STICKY_CONTROLS_TOP_MARGIN, "px"),
154
166
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
155
167
  bottom: "-".concat(_consts.STICKY_CONTROLS_TOP_MARGIN, "px"),
156
168
  position: 'sticky',
169
+ display: 'block',
157
170
  zIndex: 100 // card = 100
158
171
  });
159
- var tooltipContainerStylesWithNodeControls = (0, _react2.css)({
160
- top: '0',
172
+ var tooltipContainerStylesStickyHeaderWithMask = (0, _react2.css)({
161
173
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
162
- bottom: "-".concat(_consts.STICKY_CONTROLS_TOP_MARGIN, "px"),
163
- position: 'sticky',
164
- zIndex: 100 // card = 100
165
- });
166
- var tooltipContainerStylesStickyHeader = (0, _react2.css)({
174
+ top: "".concat(_consts.STICKY_CONTROLS_TOP_MARGIN, "px"),
167
175
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
168
176
  '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
169
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
170
- top: _styles.tableControlsSpacing - _consts.STICKY_CONTROLS_TOP_MARGIN
177
+ top: '0'
178
+ },
179
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
180
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
181
+ top: '0'
171
182
  }
172
183
  });
173
-
174
- // We need this to work around adjacent breakout marks wrapping the controls widget decorations
175
- var tooltipContainerStylesStickyHeaderWithMarksFix = (0, _react2.css)({
184
+ var tooltipContainerStylesStickyHeaderWithoutMask = (0, _react2.css)({
185
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
186
+ top: "".concat(_consts.STICKY_CONTROLS_TOP_MARGIN, "px"),
187
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
188
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
189
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
190
+ top: _styles.tableControlsSpacing
191
+ },
176
192
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
177
193
  '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
178
194
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
179
- top: _styles.tableControlsSpacing - _consts.STICKY_CONTROLS_TOP_MARGIN
195
+ top: _styles.tableControlsSpacing
180
196
  }
181
197
  });
182
198
  var dragHandleMultiLineSelectionFixFirefox = (0, _react2.css)({
@@ -773,7 +789,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
773
789
  as: "span",
774
790
  testId: "block-ctrl-drag-handle-container"
775
791
  }, (0, _react2.jsx)("span", {
776
- css: [(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, (0, _platformFeatureFlags.fg)('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, (0, _platformFeatureFlags.fg)('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
792
+ css: [tooltipContainerStyles, (0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
777
793
  }, (0, _react2.jsx)(_tooltip.default, {
778
794
  content: (0, _react2.jsx)(_keymaps.TooltipContentWithMultipleShortcuts, {
779
795
  helpDescriptors: helpDescriptors
@@ -787,9 +803,7 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
787
803
  });
788
804
  }
789
805
  }, (0, _react2.jsx)("span", {
790
- css:
791
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
792
- (0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && extendedIconWrapperStyles
806
+ css: [(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && buttonWrapperStyles]
793
807
  }, renderButton()))));
794
808
  };
795
809
  var stickyWithoutTooltip = function stickyWithoutTooltip() {
@@ -801,11 +815,9 @@ var DragHandle = exports.DragHandle = function DragHandle(_ref) {
801
815
  as: "span",
802
816
  testId: "block-ctrl-drag-handle-container"
803
817
  }, (0, _react2.jsx)("span", {
804
- css: [(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, (0, _platformFeatureFlags.fg)('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, (0, _platformFeatureFlags.fg)('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
818
+ css: [tooltipContainerStyles, (0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
805
819
  }, (0, _react2.jsx)("span", {
806
- css:
807
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
808
- (0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && extendedIconWrapperStyles
820
+ css: [(0, _dragHandlePositions.shouldMaskNodeControls)(nodeType, isTopLevelNode) && buttonWrapperStyles]
809
821
  }, renderButton())));
810
822
  };
811
823
  var buttonWithTooltip = function buttonWithTooltip() {
@@ -105,6 +105,7 @@ var tooltipContainerStyles = (0, _react2.css)({
105
105
  top: '8px',
106
106
  bottom: '-8px',
107
107
  position: 'sticky',
108
+ display: 'block',
108
109
  zIndex: 'card'
109
110
  });
110
111
  var tooltipContainerStylesStickyHeader = (0, _react2.css)({
@@ -21,7 +21,9 @@ export const findHandleDec = (decorations, from, to) => {
21
21
  return decorations.find(from, to, spec => spec.type === TYPE_HANDLE_DEC);
22
22
  };
23
23
  export const dragHandleDecoration = (api, formatMessage, pos, anchorName, nodeType, nodeViewPortalProviderAPI, handleOptions, anchorRectCache) => {
24
- unmountDecorations(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
24
+ if (!fg('platform_editor_fix_widget_destroy')) {
25
+ unmountDecorations(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
26
+ }
25
27
  let unbind;
26
28
  const key = uuid();
27
29
  return Decoration.widget(pos, (view, getPosUnsafe) => {
@@ -112,6 +114,12 @@ export const dragHandleDecoration = (api, formatMessage, pos, anchorName, nodeTy
112
114
  side: -1,
113
115
  type: TYPE_HANDLE_DEC,
114
116
  testid: `${TYPE_HANDLE_DEC}-${uuid()}`,
115
- destroy: () => unbind && unbind()
117
+ destroy: node => {
118
+ unbind && unbind();
119
+ if (fg('platform_editor_fix_widget_destroy')) {
120
+ // eslint-disable-next-line @atlaskit/editor/no-as-casting
121
+ ReactDOM.unmountComponentAtNode(node);
122
+ }
123
+ }
116
124
  });
117
125
  };
@@ -44,6 +44,11 @@ export const quickInsertButtonDecoration = (api, formatMessage, rootPos, anchorN
44
44
  return element;
45
45
  }, {
46
46
  side: -2,
47
- type: TYPE_QUICK_INSERT
47
+ type: TYPE_QUICK_INSERT,
48
+ destroy: _ => {
49
+ if (fg('platform_editor_fix_widget_destroy')) {
50
+ nodeViewPortalProviderAPI.remove(key);
51
+ }
52
+ }
48
53
  });
49
54
  };
@@ -69,6 +69,6 @@ export const getControlHeightCSSValue = (nodeHeight, isSticky, isTopLevelNode, f
69
69
  export const shouldMaskNodeControls = (nodeType, isTopLevelNode) => {
70
70
  return (
71
71
  // eslint-disable-next-line @atlaskit/platform/no-preconditioning
72
- isTopLevelNode && ['table'].includes(nodeType) && fg('platform_editor_controls_sticky_controls') && editorExperiment('platform_editor_controls', 'variant1')
72
+ isTopLevelNode && ['table'].includes(nodeType) && fg('platform_editor_controls_sticky_controls') && fg('platform_editor_controls_sticky_mask') && editorExperiment('platform_editor_controls', 'variant1')
73
73
  );
74
74
  };
@@ -135,13 +135,6 @@ export function canMoveNodeToIndex(destParent, indexIntoParent, srcNode, $destNo
135
135
  }
136
136
  }
137
137
 
138
- // Place experiments here instead of just inside move-node.ts as it stops the drag marker from appearing.
139
- if (editorExperiment('nested-expand-in-expand', false)) {
140
- if (destParentNodeType === expand && (activeNodeType === expand || activeNodeType === nestedExpand)) {
141
- return false;
142
- }
143
- }
144
-
145
138
  // NOTE: this will block drop targets from showing for dragging a table into another table
146
139
  // unless nested tables are supported and the nesting depth does not exceed 1
147
140
  if ((destParentNodeType === tableCell || destParentNodeType === tableHeader) && activeNodeType === table) {
@@ -39,18 +39,32 @@ const iconWrapperStyles = xcss({
39
39
  justifyContent: 'center',
40
40
  alignItems: 'center'
41
41
  });
42
- const extendedIconWrapperStyles = css({
42
+ const buttonWrapperStyles = css({
43
43
  display: 'flex',
44
44
  justifyContent: 'center',
45
45
  alignItems: 'center',
46
- background: "var(--ds-surface, #FFFFFF)",
47
- marginBottom: "var(--ds-space-negative-100, -8px)",
48
- paddingBottom: "var(--ds-space-100, 8px)",
49
- marginTop: "var(--ds-space-negative-100, -8px)",
50
- paddingTop: "var(--ds-space-100, 8px)",
51
- marginRight: "var(--ds-space-negative-100, -8px)",
52
- paddingRight: "var(--ds-space-100, 8px)",
53
- borderRadius: '6px'
46
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
47
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
48
+ background: `linear-gradient(to bottom, ${"var(--ds-surface, #FFFFFF)"} 90%, transparent)`,
49
+ marginBottom: "var(--ds-space-negative-200, -16px)",
50
+ paddingBottom: "var(--ds-space-200, 16px)",
51
+ marginTop: "var(--ds-space-negative-400, -32px)",
52
+ paddingTop: `calc(${"var(--ds-space-400, 32px)"} - 1px)`,
53
+ marginRight: "var(--ds-space-negative-150, -12px)",
54
+ paddingRight: "var(--ds-space-150, 12px)",
55
+ boxSizing: 'border-box'
56
+ },
57
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
58
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
59
+ background: `linear-gradient(to bottom, ${"var(--ds-surface, #FFFFFF)"} 90%, transparent)`,
60
+ marginBottom: "var(--ds-space-negative-200, -16px)",
61
+ paddingBottom: "var(--ds-space-200, 16px)",
62
+ marginTop: "var(--ds-space-negative-400, -32px)",
63
+ paddingTop: `calc(${"var(--ds-space-400, 32px)"} - 1px)`,
64
+ marginRight: "var(--ds-space-negative-150, -12px)",
65
+ paddingRight: "var(--ds-space-150, 12px)",
66
+ boxSizing: 'border-box'
67
+ }
54
68
  });
55
69
 
56
70
  // update color to match quick insert button for new editor controls
@@ -141,34 +155,36 @@ const dragHandleContainerStyles = xcss({
141
155
  boxSizing: 'border-box'
142
156
  });
143
157
  const tooltipContainerStyles = css({
144
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
145
- top: `${STICKY_CONTROLS_TOP_MARGIN}px`,
146
158
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
147
159
  bottom: `-${STICKY_CONTROLS_TOP_MARGIN}px`,
148
160
  position: 'sticky',
161
+ display: 'block',
149
162
  zIndex: 100 // card = 100
150
163
  });
151
- const tooltipContainerStylesWithNodeControls = css({
152
- top: '0',
164
+ const tooltipContainerStylesStickyHeaderWithMask = css({
153
165
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
154
- bottom: `-${STICKY_CONTROLS_TOP_MARGIN}px`,
155
- position: 'sticky',
156
- zIndex: 100 // card = 100
157
- });
158
- const tooltipContainerStylesStickyHeader = css({
166
+ top: `${STICKY_CONTROLS_TOP_MARGIN}px`,
159
167
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
160
168
  '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
161
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
162
- top: tableControlsSpacing - STICKY_CONTROLS_TOP_MARGIN
169
+ top: '0'
170
+ },
171
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
172
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
173
+ top: '0'
163
174
  }
164
175
  });
165
-
166
- // We need this to work around adjacent breakout marks wrapping the controls widget decorations
167
- const tooltipContainerStylesStickyHeaderWithMarksFix = css({
176
+ const tooltipContainerStylesStickyHeaderWithoutMask = css({
177
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
178
+ top: `${STICKY_CONTROLS_TOP_MARGIN}px`,
179
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
180
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
181
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
182
+ top: tableControlsSpacing
183
+ },
168
184
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
169
185
  '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
170
186
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
171
- top: tableControlsSpacing - STICKY_CONTROLS_TOP_MARGIN
187
+ top: tableControlsSpacing
172
188
  }
173
189
  });
174
190
  const dragHandleMultiLineSelectionFixFirefox = css({
@@ -757,7 +773,7 @@ export const DragHandle = ({
757
773
  as: "span",
758
774
  testId: "block-ctrl-drag-handle-container"
759
775
  }, jsx("span", {
760
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
776
+ css: [tooltipContainerStyles, shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
761
777
  }, jsx(Tooltip, {
762
778
  content: jsx(TooltipContentWithMultipleShortcuts, {
763
779
  helpDescriptors: helpDescriptors
@@ -771,9 +787,7 @@ export const DragHandle = ({
771
787
  });
772
788
  }
773
789
  }, jsx("span", {
774
- css:
775
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
776
- shouldMaskNodeControls(nodeType, isTopLevelNode) && extendedIconWrapperStyles
790
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles]
777
791
  }, renderButton()))));
778
792
  const stickyWithoutTooltip = () => jsx(Box
779
793
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
@@ -783,11 +797,9 @@ export const DragHandle = ({
783
797
  as: "span",
784
798
  testId: "block-ctrl-drag-handle-container"
785
799
  }, jsx("span", {
786
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
800
+ css: [tooltipContainerStyles, shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
787
801
  }, jsx("span", {
788
- css:
789
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
790
- shouldMaskNodeControls(nodeType, isTopLevelNode) && extendedIconWrapperStyles
802
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles]
791
803
  }, renderButton())));
792
804
  const buttonWithTooltip = () => jsx(Tooltip, {
793
805
  content: jsx(TooltipContentWithMultipleShortcuts, {
@@ -95,6 +95,7 @@ const tooltipContainerStyles = css({
95
95
  top: '8px',
96
96
  bottom: '-8px',
97
97
  position: 'sticky',
98
+ display: 'block',
98
99
  zIndex: 'card'
99
100
  });
100
101
  const tooltipContainerStylesStickyHeader = css({
@@ -23,7 +23,9 @@ export var findHandleDec = function findHandleDec(decorations, from, to) {
23
23
  });
24
24
  };
25
25
  export var dragHandleDecoration = function dragHandleDecoration(api, formatMessage, pos, anchorName, nodeType, nodeViewPortalProviderAPI, handleOptions, anchorRectCache) {
26
- unmountDecorations(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
26
+ if (!fg('platform_editor_fix_widget_destroy')) {
27
+ unmountDecorations(nodeViewPortalProviderAPI, 'data-blocks-drag-handle-container', 'data-blocks-drag-handle-key');
28
+ }
27
29
  var unbind;
28
30
  var key = uuid();
29
31
  return Decoration.widget(pos, function (view, getPosUnsafe) {
@@ -114,8 +116,12 @@ export var dragHandleDecoration = function dragHandleDecoration(api, formatMessa
114
116
  side: -1,
115
117
  type: TYPE_HANDLE_DEC,
116
118
  testid: "".concat(TYPE_HANDLE_DEC, "-").concat(uuid()),
117
- destroy: function destroy() {
118
- return unbind && unbind();
119
+ destroy: function destroy(node) {
120
+ unbind && unbind();
121
+ if (fg('platform_editor_fix_widget_destroy')) {
122
+ // eslint-disable-next-line @atlaskit/editor/no-as-casting
123
+ ReactDOM.unmountComponentAtNode(node);
124
+ }
119
125
  }
120
126
  });
121
127
  };
@@ -50,6 +50,11 @@ export var quickInsertButtonDecoration = function quickInsertButtonDecoration(ap
50
50
  return element;
51
51
  }, {
52
52
  side: -2,
53
- type: TYPE_QUICK_INSERT
53
+ type: TYPE_QUICK_INSERT,
54
+ destroy: function destroy(_) {
55
+ if (fg('platform_editor_fix_widget_destroy')) {
56
+ nodeViewPortalProviderAPI.remove(key);
57
+ }
58
+ }
54
59
  });
55
60
  };
@@ -71,6 +71,6 @@ export var getControlHeightCSSValue = function getControlHeightCSSValue(nodeHeig
71
71
  export var shouldMaskNodeControls = function shouldMaskNodeControls(nodeType, isTopLevelNode) {
72
72
  return (
73
73
  // eslint-disable-next-line @atlaskit/platform/no-preconditioning
74
- isTopLevelNode && ['table'].includes(nodeType) && fg('platform_editor_controls_sticky_controls') && editorExperiment('platform_editor_controls', 'variant1')
74
+ isTopLevelNode && ['table'].includes(nodeType) && fg('platform_editor_controls_sticky_controls') && fg('platform_editor_controls_sticky_mask') && editorExperiment('platform_editor_controls', 'variant1')
75
75
  );
76
76
  };
@@ -134,13 +134,6 @@ export function canMoveNodeToIndex(destParent, indexIntoParent, srcNode, $destNo
134
134
  }
135
135
  }
136
136
 
137
- // Place experiments here instead of just inside move-node.ts as it stops the drag marker from appearing.
138
- if (editorExperiment('nested-expand-in-expand', false)) {
139
- if (destParentNodeType === expand && (activeNodeType === expand || activeNodeType === nestedExpand)) {
140
- return false;
141
- }
142
- }
143
-
144
137
  // NOTE: this will block drop targets from showing for dragging a table into another table
145
138
  // unless nested tables are supported and the nesting depth does not exceed 1
146
139
  if ((destParentNodeType === tableCell || destParentNodeType === tableHeader) && activeNodeType === table) {
@@ -44,18 +44,32 @@ var iconWrapperStyles = xcss({
44
44
  justifyContent: 'center',
45
45
  alignItems: 'center'
46
46
  });
47
- var extendedIconWrapperStyles = css({
47
+ var buttonWrapperStyles = css({
48
48
  display: 'flex',
49
49
  justifyContent: 'center',
50
50
  alignItems: 'center',
51
- background: "var(--ds-surface, #FFFFFF)",
52
- marginBottom: "var(--ds-space-negative-100, -8px)",
53
- paddingBottom: "var(--ds-space-100, 8px)",
54
- marginTop: "var(--ds-space-negative-100, -8px)",
55
- paddingTop: "var(--ds-space-100, 8px)",
56
- marginRight: "var(--ds-space-negative-100, -8px)",
57
- paddingRight: "var(--ds-space-100, 8px)",
58
- borderRadius: '6px'
51
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
52
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
53
+ background: "linear-gradient(to bottom, ".concat("var(--ds-surface, #FFFFFF)", " 90%, transparent)"),
54
+ marginBottom: "var(--ds-space-negative-200, -16px)",
55
+ paddingBottom: "var(--ds-space-200, 16px)",
56
+ marginTop: "var(--ds-space-negative-400, -32px)",
57
+ paddingTop: "calc(".concat("var(--ds-space-400, 32px)", " - 1px)"),
58
+ marginRight: "var(--ds-space-negative-150, -12px)",
59
+ paddingRight: "var(--ds-space-150, 12px)",
60
+ boxSizing: 'border-box'
61
+ },
62
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
63
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
64
+ background: "linear-gradient(to bottom, ".concat("var(--ds-surface, #FFFFFF)", " 90%, transparent)"),
65
+ marginBottom: "var(--ds-space-negative-200, -16px)",
66
+ paddingBottom: "var(--ds-space-200, 16px)",
67
+ marginTop: "var(--ds-space-negative-400, -32px)",
68
+ paddingTop: "calc(".concat("var(--ds-space-400, 32px)", " - 1px)"),
69
+ marginRight: "var(--ds-space-negative-150, -12px)",
70
+ paddingRight: "var(--ds-space-150, 12px)",
71
+ boxSizing: 'border-box'
72
+ }
59
73
  });
60
74
 
61
75
  // update color to match quick insert button for new editor controls
@@ -146,34 +160,36 @@ var dragHandleContainerStyles = xcss({
146
160
  boxSizing: 'border-box'
147
161
  });
148
162
  var tooltipContainerStyles = css({
149
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
150
- top: "".concat(STICKY_CONTROLS_TOP_MARGIN, "px"),
151
163
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
152
164
  bottom: "-".concat(STICKY_CONTROLS_TOP_MARGIN, "px"),
153
165
  position: 'sticky',
166
+ display: 'block',
154
167
  zIndex: 100 // card = 100
155
168
  });
156
- var tooltipContainerStylesWithNodeControls = css({
157
- top: '0',
169
+ var tooltipContainerStylesStickyHeaderWithMask = css({
158
170
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
159
- bottom: "-".concat(STICKY_CONTROLS_TOP_MARGIN, "px"),
160
- position: 'sticky',
161
- zIndex: 100 // card = 100
162
- });
163
- var tooltipContainerStylesStickyHeader = css({
171
+ top: "".concat(STICKY_CONTROLS_TOP_MARGIN, "px"),
164
172
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
165
173
  '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
166
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
167
- top: tableControlsSpacing - STICKY_CONTROLS_TOP_MARGIN
174
+ top: '0'
175
+ },
176
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
177
+ '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
178
+ top: '0'
168
179
  }
169
180
  });
170
-
171
- // We need this to work around adjacent breakout marks wrapping the controls widget decorations
172
- var tooltipContainerStylesStickyHeaderWithMarksFix = css({
181
+ var tooltipContainerStylesStickyHeaderWithoutMask = css({
182
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
183
+ top: "".concat(STICKY_CONTROLS_TOP_MARGIN, "px"),
184
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
185
+ '[data-blocks-drag-handle-container]:has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
186
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
187
+ top: tableControlsSpacing
188
+ },
173
189
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors
174
190
  '[data-prosemirror-mark-name="breakout"]:has([data-blocks-drag-handle-container]):has(+ [data-prosemirror-node-name="table"] .pm-table-with-controls tr.sticky) &': {
175
191
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values
176
- top: tableControlsSpacing - STICKY_CONTROLS_TOP_MARGIN
192
+ top: tableControlsSpacing
177
193
  }
178
194
  });
179
195
  var dragHandleMultiLineSelectionFixFirefox = css({
@@ -770,7 +786,7 @@ export var DragHandle = function DragHandle(_ref) {
770
786
  as: "span",
771
787
  testId: "block-ctrl-drag-handle-container"
772
788
  }, jsx("span", {
773
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
789
+ css: [tooltipContainerStyles, shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
774
790
  }, jsx(Tooltip, {
775
791
  content: jsx(TooltipContentWithMultipleShortcuts, {
776
792
  helpDescriptors: helpDescriptors
@@ -784,9 +800,7 @@ export var DragHandle = function DragHandle(_ref) {
784
800
  });
785
801
  }
786
802
  }, jsx("span", {
787
- css:
788
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
789
- shouldMaskNodeControls(nodeType, isTopLevelNode) && extendedIconWrapperStyles
803
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles]
790
804
  }, renderButton()))));
791
805
  };
792
806
  var stickyWithoutTooltip = function stickyWithoutTooltip() {
@@ -798,11 +812,9 @@ export var DragHandle = function DragHandle(_ref) {
798
812
  as: "span",
799
813
  testId: "block-ctrl-drag-handle-container"
800
814
  }, jsx("span", {
801
- css: [shouldMaskNodeControls(nodeType, isTopLevelNode) ? tooltipContainerStylesWithNodeControls : tooltipContainerStyles, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeader, fg('platform_editor_controls_patch_4') && tooltipContainerStylesStickyHeaderWithMarksFix]
815
+ css: [tooltipContainerStyles, shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithMask, !shouldMaskNodeControls(nodeType, isTopLevelNode) && tooltipContainerStylesStickyHeaderWithoutMask]
802
816
  }, jsx("span", {
803
- css:
804
- // eslint-disable-next-line @atlaskit/platform/no-preconditioning
805
- shouldMaskNodeControls(nodeType, isTopLevelNode) && extendedIconWrapperStyles
817
+ css: [shouldMaskNodeControls(nodeType, isTopLevelNode) && buttonWrapperStyles]
806
818
  }, renderButton())));
807
819
  };
808
820
  var buttonWithTooltip = function buttonWithTooltip() {
@@ -99,6 +99,7 @@ var tooltipContainerStyles = css({
99
99
  top: '8px',
100
100
  bottom: '-8px',
101
101
  position: 'sticky',
102
+ display: 'block',
102
103
  zIndex: 'card'
103
104
  });
104
105
  var tooltipContainerStylesStickyHeader = css({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "3.10.1",
3
+ "version": "3.10.3",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -33,15 +33,15 @@
33
33
  },
34
34
  "dependencies": {
35
35
  "@atlaskit/adf-schema": "^47.6.0",
36
- "@atlaskit/editor-common": "^103.7.0",
36
+ "@atlaskit/editor-common": "^103.9.0",
37
37
  "@atlaskit/editor-plugin-accessibility-utils": "^2.0.0",
38
38
  "@atlaskit/editor-plugin-analytics": "^2.2.0",
39
39
  "@atlaskit/editor-plugin-editor-disabled": "^2.0.0",
40
40
  "@atlaskit/editor-plugin-feature-flags": "^1.4.0",
41
41
  "@atlaskit/editor-plugin-metrics": "^3.4.0",
42
- "@atlaskit/editor-plugin-quick-insert": "^2.3.0",
42
+ "@atlaskit/editor-plugin-quick-insert": "^2.4.0",
43
43
  "@atlaskit/editor-plugin-selection": "^2.1.0",
44
- "@atlaskit/editor-plugin-type-ahead": "^2.4.0",
44
+ "@atlaskit/editor-plugin-type-ahead": "^2.5.0",
45
45
  "@atlaskit/editor-plugin-width": "^3.0.0",
46
46
  "@atlaskit/editor-prosemirror": "7.0.0",
47
47
  "@atlaskit/editor-shared-styles": "^3.4.0",
@@ -53,8 +53,8 @@
53
53
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^3.1.0",
54
54
  "@atlaskit/primitives": "^14.4.0",
55
55
  "@atlaskit/theme": "^18.0.0",
56
- "@atlaskit/tmp-editor-statsig": "^4.9.0",
57
- "@atlaskit/tokens": "^4.7.0",
56
+ "@atlaskit/tmp-editor-statsig": "^4.12.0",
57
+ "@atlaskit/tokens": "^4.8.0",
58
58
  "@atlaskit/tooltip": "^20.0.0",
59
59
  "@babel/runtime": "^7.0.0",
60
60
  "@emotion/react": "^11.7.1",
@@ -175,6 +175,12 @@
175
175
  },
176
176
  "platform_editor_controls_patch_5": {
177
177
  "type": "boolean"
178
+ },
179
+ "platform_editor_controls_sticky_mask": {
180
+ "type": "boolean"
181
+ },
182
+ "platform_editor_fix_widget_destroy": {
183
+ "type": "boolean"
178
184
  }
179
185
  }
180
186
  }