@atlaskit/editor-plugin-breakout 14.0.3 → 14.0.4

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,15 @@
1
1
  # @atlaskit/editor-plugin-breakout
2
2
 
3
+ ## 14.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`0cdf73fdf7d3e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0cdf73fdf7d3e) -
8
+ [ux] [EDITOR-8273] add breakout resizing to extension nodes behind
9
+ `platform_editor_lovability_resize_extensions` with graceful rendering behind
10
+ `platform_editor_lovability_resize_ext_gracefully`
11
+ - Updated dependencies
12
+
3
13
  ## 14.0.3
4
14
 
5
15
  ### Patch Changes
@@ -198,7 +198,7 @@ var breakoutPlugin = exports.breakoutPlugin = function breakoutPlugin(_ref4) {
198
198
  plugin: function plugin(_ref5) {
199
199
  var getIntl = _ref5.getIntl,
200
200
  nodeViewPortalProviderAPI = _ref5.nodeViewPortalProviderAPI;
201
- return (0, _resizingPlugin.createResizingPlugin)(api, getIntl, nodeViewPortalProviderAPI, options, (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true));
201
+ return (0, _resizingPlugin.createResizingPlugin)(api, getIntl, nodeViewPortalProviderAPI, options);
202
202
  }
203
203
  }];
204
204
  }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.setBreakoutMode = setBreakoutMode;
7
7
  var _codeBlock = require("@atlaskit/editor-common/code-block");
8
8
  var _state = require("@atlaskit/editor-prosemirror/state");
9
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
9
10
  var _findBreakoutNode = require("../pm-plugins/utils/find-breakout-node");
10
11
  var _singlePlayerExpand = require("../pm-plugins/utils/single-player-expand");
11
12
  function setBreakoutMode(mode, isLivePage) {
@@ -14,9 +15,17 @@ function setBreakoutMode(mode, isLivePage) {
14
15
  if (!node) {
15
16
  return false;
16
17
  }
17
- var tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
18
- mode: mode
19
- })]);
18
+ var tr;
19
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
20
+ var marks = state.schema.marks.breakout.create({
21
+ mode: mode
22
+ }).addToSet(node.node.marks);
23
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, marks);
24
+ } else {
25
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
26
+ mode: mode
27
+ })]);
28
+ }
20
29
  if (node.node.type === state.schema.nodes.expand) {
21
30
  (0, _singlePlayerExpand.updateExpandedState)(tr, node, isLivePage);
22
31
  } else if (node.node.type === state.schema.nodes.codeBlock) {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.setBreakoutWidth = setBreakoutWidth;
7
7
  var _codeBlock = require("@atlaskit/editor-common/code-block");
8
8
  var _state = require("@atlaskit/editor-prosemirror/state");
9
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
9
10
  var _singlePlayerExpand = require("../pm-plugins/utils/single-player-expand");
10
11
  function setBreakoutWidth(width, mode, pos, isLivePage) {
11
12
  return function (state, dispatch) {
@@ -13,10 +14,19 @@ function setBreakoutWidth(width, mode, pos, isLivePage) {
13
14
  if (!node) {
14
15
  return false;
15
16
  }
16
- var tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
17
- width: width,
18
- mode: mode
19
- })]);
17
+ var tr;
18
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
19
+ var marks = state.schema.marks.breakout.create({
20
+ width: width,
21
+ mode: mode
22
+ }).addToSet(node.marks);
23
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, marks);
24
+ } else {
25
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
26
+ width: width,
27
+ mode: mode
28
+ })]);
29
+ }
20
30
  if (node.type === state.schema.nodes.expand) {
21
31
  (0, _singlePlayerExpand.updateExpandedStateNew)({
22
32
  tr: tr,
@@ -8,6 +8,7 @@ var _browser = require("@atlaskit/editor-common/browser");
8
8
  var _utils = require("@atlaskit/editor-common/utils");
9
9
  var _state = require("@atlaskit/editor-prosemirror/state");
10
10
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
11
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
11
12
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
12
13
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
13
14
  var _setBreakoutWidth = require("../editor-commands/set-breakout-width");
@@ -59,7 +60,12 @@ var handleKeyDown = exports.handleKeyDown = function handleKeyDown(api) {
59
60
  rule = _view$state$schema$no.rule,
60
61
  panel = _view$state$schema$no.panel,
61
62
  panel_c1 = _view$state$schema$no.panel_c1;
62
- var breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(view.state.schema, (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
63
+ var breakoutResizableNodes = new Set();
64
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
65
+ breakoutResizableNodes = (0, _utils.getBreakoutResizableNodeTypesNew)(view.state.schema);
66
+ } else {
67
+ breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(view.state.schema, (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
68
+ }
63
69
  var result = getAncestorResizableNode(view, breakoutResizableNodes);
64
70
  if (result) {
65
71
  var node = result.node,
@@ -12,6 +12,7 @@ var _react = _interopRequireWildcard(require("react"));
12
12
  var _bindEventListener = require("bind-event-listener");
13
13
  var _v = _interopRequireDefault(require("uuid/v4"));
14
14
  var _messages = require("@atlaskit/editor-common/messages");
15
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
15
16
  var _adapter = require("@atlaskit/pragmatic-drag-and-drop/element/adapter");
16
17
  var _disableNativeDragPreview = require("@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview");
17
18
  var _preventUnhandled = require("@atlaskit/pragmatic-drag-and-drop/prevent-unhandled");
@@ -28,6 +29,8 @@ var getNodeName = function getNodeName(nodeName) {
28
29
  return nodeName;
29
30
  } else if ((nodeName === 'rule' || nodeName === 'panel' || nodeName === 'panel_c1') && (0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) {
30
31
  return nodeName;
32
+ } else if ((nodeName === 'extension' || nodeName === 'bodiedExtension' || nodeName === 'multiBodiedExtension') && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
33
+ return nodeName;
31
34
  } else {
32
35
  return 'node';
33
36
  }
@@ -39,7 +42,10 @@ var resizeHandleMessage = exports.resizeHandleMessage = {
39
42
  rule: _messages.breakoutMessages.resizeRule,
40
43
  panel: _messages.breakoutMessages.resizePanel,
41
44
  panel_c1: _messages.breakoutMessages.resizePanel,
42
- node: _messages.breakoutMessages.resizeElement
45
+ node: _messages.breakoutMessages.resizeElement,
46
+ extension: _messages.breakoutMessages.resizeExtension,
47
+ bodiedExtension: _messages.breakoutMessages.resizeExtension,
48
+ multiBodiedExtension: _messages.breakoutMessages.resizeExtension
43
49
  };
44
50
  var RailWithTooltip = function RailWithTooltip(_ref) {
45
51
  var rail = _ref.rail,
@@ -75,7 +81,7 @@ var createPragmaticResizer = exports.createPragmaticResizer = function createPra
75
81
  intl = _ref2.intl,
76
82
  nodeViewPortalProviderAPI = _ref2.nodeViewPortalProviderAPI;
77
83
  var state = 'default';
78
- var isLeftResizeHandleDisabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
84
+ var isLeftResizeHandleDisabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) || (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions');
79
85
  var createHandle = function createHandle(side) {
80
86
  var handle = document.createElement('div');
81
87
  handle.contentEditable = 'false';
@@ -9,6 +9,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _styles = require("@atlaskit/editor-common/styles");
12
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
12
13
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
14
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
14
15
  var _pragmaticResizer = require("./pragmatic-resizer");
@@ -59,7 +60,8 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
59
60
  dom.className = _styles.BreakoutCssClassName.BREAKOUT_MARK;
60
61
  dom.setAttribute('data-layout', mark.attrs.mode);
61
62
  dom.setAttribute('data-testid', 'ak-editor-breakout-mark');
62
- var isResizingExperimentEnabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
63
+ var isResizingDividersPanelsEnabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
64
+ var isResizingExtensionsEnabled = (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions');
63
65
 
64
66
  // DOM styles
65
67
  // Keep a three-column grid even when the left resize handle is disabled. The empty
@@ -73,11 +75,11 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
73
75
  contentDOM.style.gridColumn = '2';
74
76
  contentDOM.style.zIndex = '1';
75
77
  if (mark.attrs.width) {
76
- dom.style.gridTemplateColumns = isResizingExperimentEnabled ? // new code - phantom left track + content + right handle
78
+ dom.style.gridTemplateColumns = isResizingDividersPanelsEnabled || isResizingExtensionsEnabled ? // new code - phantom left track + content + right handle
77
79
  "".concat(RESIZE_HANDLE_TRACK_WIDTH, " max(var(--ak-editor--breakout-min-width), min(var(").concat(LOCAL_RESIZE_PROPERTY, ", ").concat(mark.attrs.width, "px), var(--ak-editor--breakout-fallback-width))) ").concat(RESIZE_HANDLE_TRACK_WIDTH) : // old code - left handle + content + right handle
78
80
  "auto max(var(--ak-editor--breakout-min-width), min(var(".concat(LOCAL_RESIZE_PROPERTY, ", ").concat(mark.attrs.width, "px), var(--ak-editor--breakout-fallback-width))) auto");
79
81
  } else {
80
- if (isResizingExperimentEnabled) {
82
+ if (isResizingDividersPanelsEnabled || isResizingExtensionsEnabled) {
81
83
  dom.style.gridTemplateColumns = "".concat(RESIZE_HANDLE_TRACK_WIDTH, " auto ").concat(RESIZE_HANDLE_TRACK_WIDTH);
82
84
  }
83
85
  if (mark.attrs.mode === 'wide') {
@@ -96,13 +98,13 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
96
98
  this.nodeViewPortalProviderAPI = nodeViewPortalProviderAPI;
97
99
  var isLiveViewMode = (api === null || api === void 0 || (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 || (_api$editorViewMode = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode === void 0 ? void 0 : _api$editorViewMode.mode) === 'view';
98
100
  if (!isLiveViewMode) {
99
- (0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
101
+ (0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_gracefully') || (0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_ext_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
100
102
  }
101
103
  this.unsubscribeToViewModeChange = api === null || api === void 0 || (_api$editorViewMode2 = api.editorViewMode) === null || _api$editorViewMode2 === void 0 ? void 0 : _api$editorViewMode2.sharedState.onChange(function (sharedState) {
102
104
  var _sharedState$nextShar, _sharedState$prevShar;
103
105
  if (((_sharedState$nextShar = sharedState.nextSharedState) === null || _sharedState$nextShar === void 0 ? void 0 : _sharedState$nextShar.mode) !== ((_sharedState$prevShar = sharedState.prevSharedState) === null || _sharedState$prevShar === void 0 ? void 0 : _sharedState$prevShar.mode)) {
104
106
  var _sharedState$nextShar4, _sharedState$nextShar5;
105
- if ((0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_gracefully')) {
107
+ if ((0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_gracefully') || (0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_ext_gracefully')) {
106
108
  var _sharedState$nextShar2, _sharedState$nextShar3;
107
109
  if (((_sharedState$nextShar2 = sharedState.nextSharedState) === null || _sharedState$nextShar2 === void 0 ? void 0 : _sharedState$nextShar2.mode) === 'view') {
108
110
  var _this$cancelScheduled;
@@ -114,7 +116,7 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
114
116
  _this.isResizingInitialised = false;
115
117
  }
116
118
  } else if (((_sharedState$nextShar3 = sharedState.nextSharedState) === null || _sharedState$nextShar3 === void 0 ? void 0 : _sharedState$nextShar3.mode) === 'edit' && !_this.isResizingInitialised) {
117
- _this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api);
119
+ _this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api);
118
120
  }
119
121
  } else if (((_sharedState$nextShar4 = sharedState.nextSharedState) === null || _sharedState$nextShar4 === void 0 ? void 0 : _sharedState$nextShar4.mode) === 'view' && _this.isResizingInitialised) {
120
122
  var _this$destroyFn2;
@@ -153,21 +155,21 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
153
155
  }
154
156
  }, {
155
157
  key: "setupResizerCallbacksIfSupported",
156
- value: function setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) {
158
+ value: function setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) {
157
159
  var _this$cancelScheduled2,
158
160
  _this2 = this;
159
161
  // cancel any pending setup before scheduling a new one
160
162
  (_this$cancelScheduled2 = this.cancelScheduledResizeHandleSetup) === null || _this$cancelScheduled2 === void 0 || _this$cancelScheduled2.call(this);
161
163
  this.cancelScheduledResizeHandleSetup = undefined;
162
164
 
163
- // if panels and rules support breakout resizing,
164
- // set up the resizer callbacks
165
- if (isResizingExperimentEnabled) {
165
+ // if breakout resizing is supported,
166
+ // continue to set up the resizer callbacks
167
+ if (isResizingDividersPanelsEnabled && isResizingExtensionsEnabled) {
166
168
  this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
167
169
  return;
168
170
  }
169
171
 
170
- // else if panels and rules don't support breakout resizing,
172
+ // else if breakout resizing is not supported,
171
173
  // do NOT set up the resizer callbacks (yet)
172
174
  // wait for the mark view DOM to be attached to the DOM first
173
175
  this.cancelScheduledResizeHandleSetup = scheduleResizeHandleSetup(function () {
@@ -179,8 +181,9 @@ var ResizingMarkView = exports.ResizingMarkView = /*#__PURE__*/function () {
179
181
  var pos = view.posAtDOM(dom, 0);
180
182
  var nodeName = (_view$state$doc$nodeA = view.state.doc.nodeAt(pos)) === null || _view$state$doc$nodeA === void 0 ? void 0 : _view$state$doc$nodeA.type.name;
181
183
 
182
- // if the node is a panel or a rule, do NOT set up the resizer callbacks
183
- if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) || _this2.isResizingInitialised) {
184
+ // if the node is a panel or a rule but resizing is not supported, do NOT set up the resizer callbacks
185
+ // if the node is an extension but resizing is not supported, do NOT set up the resizer callbacks
186
+ if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) && !isResizingDividersPanelsEnabled || nodeName && ['extension', 'bodiedExtension', 'multiBodiedExtension'].includes(nodeName) && !isResizingExtensionsEnabled || _this2.isResizingInitialised) {
184
187
  return;
185
188
  }
186
189
 
@@ -11,6 +11,7 @@ var _utils = require("@atlaskit/editor-common/utils");
11
11
  var _document = require("@atlaskit/editor-common/utils/document");
12
12
  var _state = require("@atlaskit/editor-prosemirror/state");
13
13
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
14
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
14
15
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
16
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
16
17
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
@@ -40,9 +41,16 @@ var addBreakoutToResizableNode = function addBreakoutToResizableNode(_ref) {
40
41
  var isExpand = node.type === expand;
41
42
  if (!breakoutMark) {
42
43
  var width = isMaxWidthEnabled ? _editorSharedStyles.akEditorMaxWidthLayoutWidth : isFullWidthEnabled ? _editorSharedStyles.akEditorFullWidthLayoutWidth : _editorSharedStyles.akEditorDefaultLayoutWidth;
43
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
44
- width: width
45
- })]);
44
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
45
+ var marks = breakout.create({
46
+ width: width
47
+ }).addToSet(node.marks);
48
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, marks);
49
+ } else {
50
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
51
+ width: width
52
+ })]);
53
+ }
46
54
  if (isExpand) {
47
55
  (0, _singlePlayerExpand.updateExpandedStateNew)({
48
56
  tr: updatedTr,
@@ -56,11 +64,18 @@ var addBreakoutToResizableNode = function addBreakoutToResizableNode(_ref) {
56
64
  var mode = breakoutMark.attrs.mode;
57
65
 
58
66
  // if breakout is present on node, but page appearance is 'full width' force width to full width to maintain backwards compatibility
59
- var newWidth = isMaxWidthEnabled ? _editorSharedStyles.akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? _editorSharedStyles.akEditorFullWidthLayoutWidth : _editorSharedStyles.akEditorCalculatedWideLayoutWidth;
60
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
61
- width: newWidth,
62
- mode: mode
63
- })]);
67
+ var _width = isMaxWidthEnabled ? _editorSharedStyles.akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? _editorSharedStyles.akEditorFullWidthLayoutWidth : _editorSharedStyles.akEditorCalculatedWideLayoutWidth;
68
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
69
+ var _marks = breakout.create({
70
+ width: _width
71
+ }).addToSet(node.marks);
72
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, _marks);
73
+ } else {
74
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
75
+ width: _width,
76
+ mode: mode
77
+ })]);
78
+ }
64
79
  if (isExpand) {
65
80
  (0, _singlePlayerExpand.updateExpandedStateNew)({
66
81
  tr: updatedTr,
@@ -120,7 +135,6 @@ var requestIdleCallbackWithFallback = function requestIdleCallbackWithFallback(c
120
135
  }
121
136
  };
122
137
  var createResizingPlugin = exports.createResizingPlugin = function createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options) {
123
- var isRuleAndPanelResizingEnabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
124
138
  return new _safePlugin.SafePlugin({
125
139
  key: resizingPluginKey,
126
140
  state: pluginState,
@@ -134,7 +148,8 @@ var createResizingPlugin = exports.createResizingPlugin = function createResizin
134
148
  },
135
149
  view: function view(editorView) {
136
150
  var _api$editorViewMode2;
137
- var isPageLoadNormalizationEnabled = (0, _expValEquals.expValEquals)('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
151
+ var isPageLoadNormalizationEnabled = (0, _expValEquals.expValEquals)('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions');
152
+ var isRuleAndPanelResizingEnabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
138
153
  var isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !(0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_patch_1');
139
154
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled) {
140
155
  return {};
@@ -160,7 +175,12 @@ var createResizingPlugin = exports.createResizingPlugin = function createResizin
160
175
  rule = _state$schema$nodes.rule,
161
176
  panel = _state$schema$nodes.panel,
162
177
  panel_c1 = _state$schema$nodes.panel_c1;
163
- var breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
178
+ var breakoutResizableNodes = new Set();
179
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
180
+ breakoutResizableNodes = (0, _utils.getBreakoutResizableNodeTypesNew)(state.schema);
181
+ } else {
182
+ breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
183
+ }
164
184
  var newTr = state.tr;
165
185
  var hasDocChanged = false;
166
186
 
@@ -207,6 +227,7 @@ var createResizingPlugin = exports.createResizingPlugin = function createResizin
207
227
  }
208
228
  var newTr = newState.tr;
209
229
  var hasDocChanged = false;
230
+ var isRuleAndPanelResizingEnabled = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
210
231
  var _newState$schema$node = newState.schema.nodes,
211
232
  expand = _newState$schema$node.expand,
212
233
  codeBlock = _newState$schema$node.codeBlock,
@@ -214,10 +235,15 @@ var createResizingPlugin = exports.createResizingPlugin = function createResizin
214
235
  rule = _newState$schema$node.rule,
215
236
  panel = _newState$schema$node.panel,
216
237
  panel_c1 = _newState$schema$node.panel_c1;
217
- var breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
238
+ var breakoutResizableNodes = new Set();
239
+ if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions')) {
240
+ breakoutResizableNodes = (0, _utils.getBreakoutResizableNodeTypesNew)(newState.schema);
241
+ } else {
242
+ breakoutResizableNodes = (0, _experiments.editorExperiment)('platform_synced_block', true) ? (0, _utils.getBreakoutResizableNodeTypes)(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
243
+ }
218
244
  var isFullWidthEnabled = !((options === null || options === void 0 ? void 0 : options.allowBreakoutButton) === true);
219
245
  var isMaxWidthEnabled = (options === null || options === void 0 ? void 0 : options.appearance) === 'max' && (0, _expValEquals.expValEquals)('confluence_max_width_content_appearance', 'isEnabled', true) && (0, _expValEquals.expValEquals)('platform_editor_lovability_breakout_resizing_fixes', 'isEnabled', true);
220
- var isPageLoadNormalizationEnabled = (0, _expValEquals.expValEquals)('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
246
+ var isPageLoadNormalizationEnabled = (0, _expValEquals.expValEquals)('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_lovability_resize_extensions');
221
247
  var isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !(0, _platformFeatureFlags.fg)('platform_editor_lovability_resize_patch_1');
222
248
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled && (0, _document.isReplaceDocOperation)(transactions, oldState)) {
223
249
  newState.doc.forEach(function (node, pos) {
@@ -183,7 +183,7 @@ export const breakoutPlugin = ({
183
183
  plugin: ({
184
184
  getIntl,
185
185
  nodeViewPortalProviderAPI
186
- }) => createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true))
186
+ }) => createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options)
187
187
  }];
188
188
  }
189
189
  return [{
@@ -1,5 +1,6 @@
1
1
  import { transferCodeBlockWrappedValue } from '@atlaskit/editor-common/code-block';
2
2
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  import { findSupportedNodeForBreakout } from '../pm-plugins/utils/find-breakout-node';
4
5
  import { updateExpandedState } from '../pm-plugins/utils/single-player-expand';
5
6
  export function setBreakoutMode(mode, isLivePage) {
@@ -8,9 +9,17 @@ export function setBreakoutMode(mode, isLivePage) {
8
9
  if (!node) {
9
10
  return false;
10
11
  }
11
- const tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
12
- mode
13
- })]);
12
+ let tr;
13
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
14
+ const marks = state.schema.marks.breakout.create({
15
+ mode
16
+ }).addToSet(node.node.marks);
17
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, marks);
18
+ } else {
19
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
20
+ mode
21
+ })]);
22
+ }
14
23
  if (node.node.type === state.schema.nodes.expand) {
15
24
  updateExpandedState(tr, node, isLivePage);
16
25
  } else if (node.node.type === state.schema.nodes.codeBlock) {
@@ -1,5 +1,6 @@
1
1
  import { transferCodeBlockWrappedValue } from '@atlaskit/editor-common/code-block';
2
2
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  import { updateExpandedStateNew } from '../pm-plugins/utils/single-player-expand';
4
5
  export function setBreakoutWidth(width, mode, pos, isLivePage) {
5
6
  return (state, dispatch) => {
@@ -7,10 +8,19 @@ export function setBreakoutWidth(width, mode, pos, isLivePage) {
7
8
  if (!node) {
8
9
  return false;
9
10
  }
10
- const tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
11
- width,
12
- mode
13
- })]);
11
+ let tr;
12
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
13
+ const marks = state.schema.marks.breakout.create({
14
+ width,
15
+ mode
16
+ }).addToSet(node.marks);
17
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, marks);
18
+ } else {
19
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
20
+ width,
21
+ mode
22
+ })]);
23
+ }
14
24
  if (node.type === state.schema.nodes.expand) {
15
25
  updateExpandedStateNew({
16
26
  tr,
@@ -1,7 +1,8 @@
1
1
  import { getBrowserInfo } from '@atlaskit/editor-common/browser';
2
- import { getBreakoutResizableNodeTypes } from '@atlaskit/editor-common/utils';
2
+ import { getBreakoutResizableNodeTypes, getBreakoutResizableNodeTypesNew } from '@atlaskit/editor-common/utils';
3
3
  import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state';
4
4
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth } from '@atlaskit/editor-shared-styles';
5
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
5
6
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
6
7
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
7
8
  import { setBreakoutWidth } from '../editor-commands/set-breakout-width';
@@ -53,7 +54,12 @@ export const handleKeyDown = api => (view, event) => {
53
54
  panel,
54
55
  panel_c1
55
56
  } = view.state.schema.nodes;
56
- const breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(view.state.schema, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
57
+ let breakoutResizableNodes = new Set();
58
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
59
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(view.state.schema);
60
+ } else {
61
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(view.state.schema, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
62
+ }
57
63
  const result = getAncestorResizableNode(view, breakoutResizableNodes);
58
64
  if (result) {
59
65
  const {
@@ -3,6 +3,7 @@ import { bind } from 'bind-event-listener';
3
3
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
4
4
  import uuid from 'uuid/v4';
5
5
  import { breakoutMessages as messages } from '@atlaskit/editor-common/messages';
6
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
7
  import { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
7
8
  import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';
8
9
  import { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';
@@ -16,6 +17,8 @@ const getNodeName = nodeName => {
16
17
  return nodeName;
17
18
  } else if ((nodeName === 'rule' || nodeName === 'panel' || nodeName === 'panel_c1') && expValEqualsNoExposure('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) {
18
19
  return nodeName;
20
+ } else if ((nodeName === 'extension' || nodeName === 'bodiedExtension' || nodeName === 'multiBodiedExtension') && isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
21
+ return nodeName;
19
22
  } else {
20
23
  return 'node';
21
24
  }
@@ -27,7 +30,10 @@ export const resizeHandleMessage = {
27
30
  rule: messages.resizeRule,
28
31
  panel: messages.resizePanel,
29
32
  panel_c1: messages.resizePanel,
30
- node: messages.resizeElement
33
+ node: messages.resizeElement,
34
+ extension: messages.resizeExtension,
35
+ bodiedExtension: messages.resizeExtension,
36
+ multiBodiedExtension: messages.resizeExtension
31
37
  };
32
38
  const RailWithTooltip = ({
33
39
  rail,
@@ -62,7 +68,7 @@ export const createPragmaticResizer = ({
62
68
  nodeViewPortalProviderAPI
63
69
  }) => {
64
70
  let state = 'default';
65
- const isLeftResizeHandleDisabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
71
+ const isLeftResizeHandleDisabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
66
72
  const createHandle = side => {
67
73
  const handle = document.createElement('div');
68
74
  handle.contentEditable = 'false';
@@ -1,5 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import { BreakoutCssClassName } from '@atlaskit/editor-common/styles';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  import { fg } from '@atlaskit/platform-feature-flags';
4
5
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
5
6
  import { createPragmaticResizer } from './pragmatic-resizer';
@@ -41,7 +42,8 @@ export class ResizingMarkView {
41
42
  dom.className = BreakoutCssClassName.BREAKOUT_MARK;
42
43
  dom.setAttribute('data-layout', mark.attrs.mode);
43
44
  dom.setAttribute('data-testid', 'ak-editor-breakout-mark');
44
- const isResizingExperimentEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
45
+ const isResizingDividersPanelsEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
46
+ const isResizingExtensionsEnabled = isExperimentEnabled('platform_editor_lovability_resize_extensions');
45
47
 
46
48
  // DOM styles
47
49
  // Keep a three-column grid even when the left resize handle is disabled. The empty
@@ -55,13 +57,13 @@ export class ResizingMarkView {
55
57
  contentDOM.style.gridColumn = '2';
56
58
  contentDOM.style.zIndex = '1';
57
59
  if (mark.attrs.width) {
58
- dom.style.gridTemplateColumns = isResizingExperimentEnabled ?
60
+ dom.style.gridTemplateColumns = isResizingDividersPanelsEnabled || isResizingExtensionsEnabled ?
59
61
  // new code - phantom left track + content + right handle
60
62
  `${RESIZE_HANDLE_TRACK_WIDTH} max(var(--ak-editor--breakout-min-width), min(var(${LOCAL_RESIZE_PROPERTY}, ${mark.attrs.width}px), var(--ak-editor--breakout-fallback-width))) ${RESIZE_HANDLE_TRACK_WIDTH}` :
61
63
  // old code - left handle + content + right handle
62
64
  `auto max(var(--ak-editor--breakout-min-width), min(var(${LOCAL_RESIZE_PROPERTY}, ${mark.attrs.width}px), var(--ak-editor--breakout-fallback-width))) auto`;
63
65
  } else {
64
- if (isResizingExperimentEnabled) {
66
+ if (isResizingDividersPanelsEnabled || isResizingExtensionsEnabled) {
65
67
  dom.style.gridTemplateColumns = `${RESIZE_HANDLE_TRACK_WIDTH} auto ${RESIZE_HANDLE_TRACK_WIDTH}`;
66
68
  }
67
69
  if (mark.attrs.mode === 'wide') {
@@ -80,13 +82,13 @@ export class ResizingMarkView {
80
82
  this.nodeViewPortalProviderAPI = nodeViewPortalProviderAPI;
81
83
  const isLiveViewMode = (api === null || api === void 0 ? void 0 : (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 ? void 0 : (_api$editorViewMode$s = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode$s === void 0 ? void 0 : _api$editorViewMode$s.mode) === 'view';
82
84
  if (!isLiveViewMode) {
83
- fg('platform_editor_lovability_resize_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
85
+ fg('platform_editor_lovability_resize_gracefully') || fg('platform_editor_lovability_resize_ext_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
84
86
  }
85
87
  this.unsubscribeToViewModeChange = api === null || api === void 0 ? void 0 : (_api$editorViewMode2 = api.editorViewMode) === null || _api$editorViewMode2 === void 0 ? void 0 : _api$editorViewMode2.sharedState.onChange(sharedState => {
86
88
  var _sharedState$nextShar, _sharedState$prevShar;
87
89
  if (((_sharedState$nextShar = sharedState.nextSharedState) === null || _sharedState$nextShar === void 0 ? void 0 : _sharedState$nextShar.mode) !== ((_sharedState$prevShar = sharedState.prevSharedState) === null || _sharedState$prevShar === void 0 ? void 0 : _sharedState$prevShar.mode)) {
88
90
  var _sharedState$nextShar4, _sharedState$nextShar5;
89
- if (fg('platform_editor_lovability_resize_gracefully')) {
91
+ if (fg('platform_editor_lovability_resize_gracefully') || fg('platform_editor_lovability_resize_ext_gracefully')) {
90
92
  var _sharedState$nextShar2, _sharedState$nextShar3;
91
93
  if (((_sharedState$nextShar2 = sharedState.nextSharedState) === null || _sharedState$nextShar2 === void 0 ? void 0 : _sharedState$nextShar2.mode) === 'view') {
92
94
  var _this$cancelScheduled;
@@ -98,7 +100,7 @@ export class ResizingMarkView {
98
100
  this.isResizingInitialised = false;
99
101
  }
100
102
  } else if (((_sharedState$nextShar3 = sharedState.nextSharedState) === null || _sharedState$nextShar3 === void 0 ? void 0 : _sharedState$nextShar3.mode) === 'edit' && !this.isResizingInitialised) {
101
- this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api);
103
+ this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api);
102
104
  }
103
105
  } else if (((_sharedState$nextShar4 = sharedState.nextSharedState) === null || _sharedState$nextShar4 === void 0 ? void 0 : _sharedState$nextShar4.mode) === 'view' && this.isResizingInitialised) {
104
106
  var _this$destroyFn2;
@@ -134,20 +136,20 @@ export class ResizingMarkView {
134
136
  this.destroyFn = destroy;
135
137
  this.isResizingInitialised = true;
136
138
  }
137
- setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) {
139
+ setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) {
138
140
  var _this$cancelScheduled2;
139
141
  // cancel any pending setup before scheduling a new one
140
142
  (_this$cancelScheduled2 = this.cancelScheduledResizeHandleSetup) === null || _this$cancelScheduled2 === void 0 ? void 0 : _this$cancelScheduled2.call(this);
141
143
  this.cancelScheduledResizeHandleSetup = undefined;
142
144
 
143
- // if panels and rules support breakout resizing,
144
- // set up the resizer callbacks
145
- if (isResizingExperimentEnabled) {
145
+ // if breakout resizing is supported,
146
+ // continue to set up the resizer callbacks
147
+ if (isResizingDividersPanelsEnabled && isResizingExtensionsEnabled) {
146
148
  this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
147
149
  return;
148
150
  }
149
151
 
150
- // else if panels and rules don't support breakout resizing,
152
+ // else if breakout resizing is not supported,
151
153
  // do NOT set up the resizer callbacks (yet)
152
154
  // wait for the mark view DOM to be attached to the DOM first
153
155
  this.cancelScheduledResizeHandleSetup = scheduleResizeHandleSetup(() => {
@@ -159,8 +161,9 @@ export class ResizingMarkView {
159
161
  const pos = view.posAtDOM(dom, 0);
160
162
  const nodeName = (_view$state$doc$nodeA = view.state.doc.nodeAt(pos)) === null || _view$state$doc$nodeA === void 0 ? void 0 : _view$state$doc$nodeA.type.name;
161
163
 
162
- // if the node is a panel or a rule, do NOT set up the resizer callbacks
163
- if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) || this.isResizingInitialised) {
164
+ // if the node is a panel or a rule but resizing is not supported, do NOT set up the resizer callbacks
165
+ // if the node is an extension but resizing is not supported, do NOT set up the resizer callbacks
166
+ if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) && !isResizingDividersPanelsEnabled || nodeName && ['extension', 'bodiedExtension', 'multiBodiedExtension'].includes(nodeName) && !isResizingExtensionsEnabled || this.isResizingInitialised) {
164
167
  return;
165
168
  }
166
169
 
@@ -1,8 +1,9 @@
1
1
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
2
- import { getBreakoutResizableNodeTypes, stepAddsOneOf } from '@atlaskit/editor-common/utils';
2
+ import { getBreakoutResizableNodeTypes, getBreakoutResizableNodeTypesNew, stepAddsOneOf } from '@atlaskit/editor-common/utils';
3
3
  import { getChangedNodes, isReplaceDocOperation } from '@atlaskit/editor-common/utils/document';
4
4
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
5
5
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth, akEditorCalculatedWideLayoutWidth } from '@atlaskit/editor-shared-styles';
6
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
7
  import { fg } from '@atlaskit/platform-feature-flags';
7
8
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
8
9
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
@@ -33,9 +34,16 @@ const addBreakoutToResizableNode = ({
33
34
  const isExpand = node.type === expand;
34
35
  if (!breakoutMark) {
35
36
  const width = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled ? akEditorFullWidthLayoutWidth : akEditorDefaultLayoutWidth;
36
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
37
- width: width
38
- })]);
37
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
38
+ const marks = breakout.create({
39
+ width: width
40
+ }).addToSet(node.marks);
41
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, marks);
42
+ } else {
43
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
44
+ width: width
45
+ })]);
46
+ }
39
47
  if (isExpand) {
40
48
  updateExpandedStateNew({
41
49
  tr: updatedTr,
@@ -49,11 +57,18 @@ const addBreakoutToResizableNode = ({
49
57
  const mode = breakoutMark.attrs.mode;
50
58
 
51
59
  // if breakout is present on node, but page appearance is 'full width' force width to full width to maintain backwards compatibility
52
- const newWidth = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? akEditorFullWidthLayoutWidth : akEditorCalculatedWideLayoutWidth;
53
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
54
- width: newWidth,
55
- mode: mode
56
- })]);
60
+ const width = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? akEditorFullWidthLayoutWidth : akEditorCalculatedWideLayoutWidth;
61
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
62
+ const marks = breakout.create({
63
+ width: width
64
+ }).addToSet(node.marks);
65
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, marks);
66
+ } else {
67
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
68
+ width: width,
69
+ mode: mode
70
+ })]);
71
+ }
57
72
  if (isExpand) {
58
73
  updateExpandedStateNew({
59
74
  tr: updatedTr,
@@ -115,7 +130,7 @@ const requestIdleCallbackWithFallback = callback => {
115
130
  requestAnimationFrame(callback);
116
131
  }
117
132
  };
118
- export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, options, isRuleAndPanelResizingEnabled = false) => {
133
+ export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, options) => {
119
134
  return new SafePlugin({
120
135
  key: resizingPluginKey,
121
136
  state: pluginState,
@@ -129,7 +144,8 @@ export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, op
129
144
  },
130
145
  view: editorView => {
131
146
  var _api$editorViewMode2;
132
- const isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
147
+ const isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
148
+ const isRuleAndPanelResizingEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
133
149
  const isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !fg('platform_editor_lovability_resize_patch_1');
134
150
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled) {
135
151
  return {};
@@ -158,7 +174,12 @@ export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, op
158
174
  panel,
159
175
  panel_c1
160
176
  } = state.schema.nodes;
161
- const breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
177
+ let breakoutResizableNodes = new Set();
178
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
179
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(state.schema);
180
+ } else {
181
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
182
+ }
162
183
  let newTr = state.tr;
163
184
  let hasDocChanged = false;
164
185
 
@@ -207,6 +228,7 @@ export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, op
207
228
  }
208
229
  let newTr = newState.tr;
209
230
  let hasDocChanged = false;
231
+ const isRuleAndPanelResizingEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
210
232
  const {
211
233
  expand,
212
234
  codeBlock,
@@ -215,10 +237,15 @@ export const createResizingPlugin = (api, getIntl, nodeViewPortalProviderAPI, op
215
237
  panel,
216
238
  panel_c1
217
239
  } = newState.schema.nodes;
218
- const breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
240
+ let breakoutResizableNodes = new Set();
241
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
242
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(newState.schema);
243
+ } else {
244
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
245
+ }
219
246
  const isFullWidthEnabled = !((options === null || options === void 0 ? void 0 : options.allowBreakoutButton) === true);
220
247
  const isMaxWidthEnabled = (options === null || options === void 0 ? void 0 : options.appearance) === 'max' && expValEquals('confluence_max_width_content_appearance', 'isEnabled', true) && expValEquals('platform_editor_lovability_breakout_resizing_fixes', 'isEnabled', true);
221
- const isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
248
+ const isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
222
249
  const isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !fg('platform_editor_lovability_resize_patch_1');
223
250
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled && isReplaceDocOperation(transactions, oldState)) {
224
251
  newState.doc.forEach((node, pos) => {
@@ -189,7 +189,7 @@ export var breakoutPlugin = function breakoutPlugin(_ref4) {
189
189
  plugin: function plugin(_ref5) {
190
190
  var getIntl = _ref5.getIntl,
191
191
  nodeViewPortalProviderAPI = _ref5.nodeViewPortalProviderAPI;
192
- return createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true));
192
+ return createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options);
193
193
  }
194
194
  }];
195
195
  }
@@ -1,5 +1,6 @@
1
1
  import { transferCodeBlockWrappedValue } from '@atlaskit/editor-common/code-block';
2
2
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  import { findSupportedNodeForBreakout } from '../pm-plugins/utils/find-breakout-node';
4
5
  import { updateExpandedState } from '../pm-plugins/utils/single-player-expand';
5
6
  export function setBreakoutMode(mode, isLivePage) {
@@ -8,9 +9,17 @@ export function setBreakoutMode(mode, isLivePage) {
8
9
  if (!node) {
9
10
  return false;
10
11
  }
11
- var tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
12
- mode: mode
13
- })]);
12
+ var tr;
13
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
14
+ var marks = state.schema.marks.breakout.create({
15
+ mode: mode
16
+ }).addToSet(node.node.marks);
17
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, marks);
18
+ } else {
19
+ tr = state.tr.setNodeMarkup(node.pos, node.node.type, node.node.attrs, [state.schema.marks.breakout.create({
20
+ mode: mode
21
+ })]);
22
+ }
14
23
  if (node.node.type === state.schema.nodes.expand) {
15
24
  updateExpandedState(tr, node, isLivePage);
16
25
  } else if (node.node.type === state.schema.nodes.codeBlock) {
@@ -1,5 +1,6 @@
1
1
  import { transferCodeBlockWrappedValue } from '@atlaskit/editor-common/code-block';
2
2
  import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  import { updateExpandedStateNew } from '../pm-plugins/utils/single-player-expand';
4
5
  export function setBreakoutWidth(width, mode, pos, isLivePage) {
5
6
  return function (state, dispatch) {
@@ -7,10 +8,19 @@ export function setBreakoutWidth(width, mode, pos, isLivePage) {
7
8
  if (!node) {
8
9
  return false;
9
10
  }
10
- var tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
11
- width: width,
12
- mode: mode
13
- })]);
11
+ var tr;
12
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
13
+ var marks = state.schema.marks.breakout.create({
14
+ width: width,
15
+ mode: mode
16
+ }).addToSet(node.marks);
17
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, marks);
18
+ } else {
19
+ tr = state.tr.setNodeMarkup(pos, node.type, node.attrs, [state.schema.marks.breakout.create({
20
+ width: width,
21
+ mode: mode
22
+ })]);
23
+ }
14
24
  if (node.type === state.schema.nodes.expand) {
15
25
  updateExpandedStateNew({
16
26
  tr: tr,
@@ -1,7 +1,8 @@
1
1
  import { getBrowserInfo } from '@atlaskit/editor-common/browser';
2
- import { getBreakoutResizableNodeTypes } from '@atlaskit/editor-common/utils';
2
+ import { getBreakoutResizableNodeTypes, getBreakoutResizableNodeTypesNew } from '@atlaskit/editor-common/utils';
3
3
  import { NodeSelection, TextSelection } from '@atlaskit/editor-prosemirror/state';
4
4
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth } from '@atlaskit/editor-shared-styles';
5
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
5
6
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
6
7
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
7
8
  import { setBreakoutWidth } from '../editor-commands/set-breakout-width';
@@ -53,7 +54,12 @@ export var handleKeyDown = function handleKeyDown(api) {
53
54
  rule = _view$state$schema$no.rule,
54
55
  panel = _view$state$schema$no.panel,
55
56
  panel_c1 = _view$state$schema$no.panel_c1;
56
- var breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(view.state.schema, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
57
+ var breakoutResizableNodes = new Set();
58
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
59
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(view.state.schema);
60
+ } else {
61
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(view.state.schema, expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) : expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
62
+ }
57
63
  var result = getAncestorResizableNode(view, breakoutResizableNodes);
58
64
  if (result) {
59
65
  var node = result.node,
@@ -5,6 +5,7 @@ import { bind } from 'bind-event-listener';
5
5
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
6
6
  import uuid from 'uuid/v4';
7
7
  import { breakoutMessages as messages } from '@atlaskit/editor-common/messages';
8
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
8
9
  import { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
9
10
  import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview';
10
11
  import { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';
@@ -18,6 +19,8 @@ var getNodeName = function getNodeName(nodeName) {
18
19
  return nodeName;
19
20
  } else if ((nodeName === 'rule' || nodeName === 'panel' || nodeName === 'panel_c1') && expValEqualsNoExposure('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true)) {
20
21
  return nodeName;
22
+ } else if ((nodeName === 'extension' || nodeName === 'bodiedExtension' || nodeName === 'multiBodiedExtension') && isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
23
+ return nodeName;
21
24
  } else {
22
25
  return 'node';
23
26
  }
@@ -29,7 +32,10 @@ export var resizeHandleMessage = {
29
32
  rule: messages.resizeRule,
30
33
  panel: messages.resizePanel,
31
34
  panel_c1: messages.resizePanel,
32
- node: messages.resizeElement
35
+ node: messages.resizeElement,
36
+ extension: messages.resizeExtension,
37
+ bodiedExtension: messages.resizeExtension,
38
+ multiBodiedExtension: messages.resizeExtension
33
39
  };
34
40
  var RailWithTooltip = function RailWithTooltip(_ref) {
35
41
  var rail = _ref.rail,
@@ -65,7 +71,7 @@ export var createPragmaticResizer = function createPragmaticResizer(_ref2) {
65
71
  intl = _ref2.intl,
66
72
  nodeViewPortalProviderAPI = _ref2.nodeViewPortalProviderAPI;
67
73
  var state = 'default';
68
- var isLeftResizeHandleDisabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
74
+ var isLeftResizeHandleDisabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
69
75
  var createHandle = function createHandle(side) {
70
76
  var handle = document.createElement('div');
71
77
  handle.contentEditable = 'false';
@@ -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 { BreakoutCssClassName } from '@atlaskit/editor-common/styles';
7
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
7
8
  import { fg } from '@atlaskit/platform-feature-flags';
8
9
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
9
10
  import { createPragmaticResizer } from './pragmatic-resizer';
@@ -52,7 +53,8 @@ export var ResizingMarkView = /*#__PURE__*/function () {
52
53
  dom.className = BreakoutCssClassName.BREAKOUT_MARK;
53
54
  dom.setAttribute('data-layout', mark.attrs.mode);
54
55
  dom.setAttribute('data-testid', 'ak-editor-breakout-mark');
55
- var isResizingExperimentEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
56
+ var isResizingDividersPanelsEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
57
+ var isResizingExtensionsEnabled = isExperimentEnabled('platform_editor_lovability_resize_extensions');
56
58
 
57
59
  // DOM styles
58
60
  // Keep a three-column grid even when the left resize handle is disabled. The empty
@@ -66,11 +68,11 @@ export var ResizingMarkView = /*#__PURE__*/function () {
66
68
  contentDOM.style.gridColumn = '2';
67
69
  contentDOM.style.zIndex = '1';
68
70
  if (mark.attrs.width) {
69
- dom.style.gridTemplateColumns = isResizingExperimentEnabled ? // new code - phantom left track + content + right handle
71
+ dom.style.gridTemplateColumns = isResizingDividersPanelsEnabled || isResizingExtensionsEnabled ? // new code - phantom left track + content + right handle
70
72
  "".concat(RESIZE_HANDLE_TRACK_WIDTH, " max(var(--ak-editor--breakout-min-width), min(var(").concat(LOCAL_RESIZE_PROPERTY, ", ").concat(mark.attrs.width, "px), var(--ak-editor--breakout-fallback-width))) ").concat(RESIZE_HANDLE_TRACK_WIDTH) : // old code - left handle + content + right handle
71
73
  "auto max(var(--ak-editor--breakout-min-width), min(var(".concat(LOCAL_RESIZE_PROPERTY, ", ").concat(mark.attrs.width, "px), var(--ak-editor--breakout-fallback-width))) auto");
72
74
  } else {
73
- if (isResizingExperimentEnabled) {
75
+ if (isResizingDividersPanelsEnabled || isResizingExtensionsEnabled) {
74
76
  dom.style.gridTemplateColumns = "".concat(RESIZE_HANDLE_TRACK_WIDTH, " auto ").concat(RESIZE_HANDLE_TRACK_WIDTH);
75
77
  }
76
78
  if (mark.attrs.mode === 'wide') {
@@ -89,13 +91,13 @@ export var ResizingMarkView = /*#__PURE__*/function () {
89
91
  this.nodeViewPortalProviderAPI = nodeViewPortalProviderAPI;
90
92
  var isLiveViewMode = (api === null || api === void 0 || (_api$editorViewMode = api.editorViewMode) === null || _api$editorViewMode === void 0 || (_api$editorViewMode = _api$editorViewMode.sharedState.currentState()) === null || _api$editorViewMode === void 0 ? void 0 : _api$editorViewMode.mode) === 'view';
91
93
  if (!isLiveViewMode) {
92
- fg('platform_editor_lovability_resize_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
94
+ fg('platform_editor_lovability_resize_gracefully') || fg('platform_editor_lovability_resize_ext_gracefully') ? this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) : this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
93
95
  }
94
96
  this.unsubscribeToViewModeChange = api === null || api === void 0 || (_api$editorViewMode2 = api.editorViewMode) === null || _api$editorViewMode2 === void 0 ? void 0 : _api$editorViewMode2.sharedState.onChange(function (sharedState) {
95
97
  var _sharedState$nextShar, _sharedState$prevShar;
96
98
  if (((_sharedState$nextShar = sharedState.nextSharedState) === null || _sharedState$nextShar === void 0 ? void 0 : _sharedState$nextShar.mode) !== ((_sharedState$prevShar = sharedState.prevSharedState) === null || _sharedState$prevShar === void 0 ? void 0 : _sharedState$prevShar.mode)) {
97
99
  var _sharedState$nextShar4, _sharedState$nextShar5;
98
- if (fg('platform_editor_lovability_resize_gracefully')) {
100
+ if (fg('platform_editor_lovability_resize_gracefully') || fg('platform_editor_lovability_resize_ext_gracefully')) {
99
101
  var _sharedState$nextShar2, _sharedState$nextShar3;
100
102
  if (((_sharedState$nextShar2 = sharedState.nextSharedState) === null || _sharedState$nextShar2 === void 0 ? void 0 : _sharedState$nextShar2.mode) === 'view') {
101
103
  var _this$cancelScheduled;
@@ -107,7 +109,7 @@ export var ResizingMarkView = /*#__PURE__*/function () {
107
109
  _this.isResizingInitialised = false;
108
110
  }
109
111
  } else if (((_sharedState$nextShar3 = sharedState.nextSharedState) === null || _sharedState$nextShar3 === void 0 ? void 0 : _sharedState$nextShar3.mode) === 'edit' && !_this.isResizingInitialised) {
110
- _this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api);
112
+ _this.setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api);
111
113
  }
112
114
  } else if (((_sharedState$nextShar4 = sharedState.nextSharedState) === null || _sharedState$nextShar4 === void 0 ? void 0 : _sharedState$nextShar4.mode) === 'view' && _this.isResizingInitialised) {
113
115
  var _this$destroyFn2;
@@ -146,21 +148,21 @@ export var ResizingMarkView = /*#__PURE__*/function () {
146
148
  }
147
149
  }, {
148
150
  key: "setupResizerCallbacksIfSupported",
149
- value: function setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingExperimentEnabled, api) {
151
+ value: function setupResizerCallbacksIfSupported(dom, contentDOM, view, mark, isResizingDividersPanelsEnabled, isResizingExtensionsEnabled, api) {
150
152
  var _this$cancelScheduled2,
151
153
  _this2 = this;
152
154
  // cancel any pending setup before scheduling a new one
153
155
  (_this$cancelScheduled2 = this.cancelScheduledResizeHandleSetup) === null || _this$cancelScheduled2 === void 0 || _this$cancelScheduled2.call(this);
154
156
  this.cancelScheduledResizeHandleSetup = undefined;
155
157
 
156
- // if panels and rules support breakout resizing,
157
- // set up the resizer callbacks
158
- if (isResizingExperimentEnabled) {
158
+ // if breakout resizing is supported,
159
+ // continue to set up the resizer callbacks
160
+ if (isResizingDividersPanelsEnabled && isResizingExtensionsEnabled) {
159
161
  this.setupResizerCallbacks(dom, contentDOM, view, mark, api);
160
162
  return;
161
163
  }
162
164
 
163
- // else if panels and rules don't support breakout resizing,
165
+ // else if breakout resizing is not supported,
164
166
  // do NOT set up the resizer callbacks (yet)
165
167
  // wait for the mark view DOM to be attached to the DOM first
166
168
  this.cancelScheduledResizeHandleSetup = scheduleResizeHandleSetup(function () {
@@ -172,8 +174,9 @@ export var ResizingMarkView = /*#__PURE__*/function () {
172
174
  var pos = view.posAtDOM(dom, 0);
173
175
  var nodeName = (_view$state$doc$nodeA = view.state.doc.nodeAt(pos)) === null || _view$state$doc$nodeA === void 0 ? void 0 : _view$state$doc$nodeA.type.name;
174
176
 
175
- // if the node is a panel or a rule, do NOT set up the resizer callbacks
176
- if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) || _this2.isResizingInitialised) {
177
+ // if the node is a panel or a rule but resizing is not supported, do NOT set up the resizer callbacks
178
+ // if the node is an extension but resizing is not supported, do NOT set up the resizer callbacks
179
+ if (nodeName && ['panel', 'rule', 'panel_c1'].includes(nodeName) && !isResizingDividersPanelsEnabled || nodeName && ['extension', 'bodiedExtension', 'multiBodiedExtension'].includes(nodeName) && !isResizingExtensionsEnabled || _this2.isResizingInitialised) {
177
180
  return;
178
181
  }
179
182
 
@@ -2,10 +2,11 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  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; }
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 { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
5
- import { getBreakoutResizableNodeTypes, stepAddsOneOf } from '@atlaskit/editor-common/utils';
5
+ import { getBreakoutResizableNodeTypes, getBreakoutResizableNodeTypesNew, stepAddsOneOf } from '@atlaskit/editor-common/utils';
6
6
  import { getChangedNodes, isReplaceDocOperation } from '@atlaskit/editor-common/utils/document';
7
7
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
8
8
  import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorMaxWidthLayoutWidth, akEditorCalculatedWideLayoutWidth } from '@atlaskit/editor-shared-styles';
9
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
9
10
  import { fg } from '@atlaskit/platform-feature-flags';
10
11
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
11
12
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
@@ -33,9 +34,16 @@ var addBreakoutToResizableNode = function addBreakoutToResizableNode(_ref) {
33
34
  var isExpand = node.type === expand;
34
35
  if (!breakoutMark) {
35
36
  var width = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled ? akEditorFullWidthLayoutWidth : akEditorDefaultLayoutWidth;
36
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
37
- width: width
38
- })]);
37
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
38
+ var marks = breakout.create({
39
+ width: width
40
+ }).addToSet(node.marks);
41
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, marks);
42
+ } else {
43
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
44
+ width: width
45
+ })]);
46
+ }
39
47
  if (isExpand) {
40
48
  updateExpandedStateNew({
41
49
  tr: updatedTr,
@@ -49,11 +57,18 @@ var addBreakoutToResizableNode = function addBreakoutToResizableNode(_ref) {
49
57
  var mode = breakoutMark.attrs.mode;
50
58
 
51
59
  // if breakout is present on node, but page appearance is 'full width' force width to full width to maintain backwards compatibility
52
- var newWidth = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? akEditorFullWidthLayoutWidth : akEditorCalculatedWideLayoutWidth;
53
- updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
54
- width: newWidth,
55
- mode: mode
56
- })]);
60
+ var _width = isMaxWidthEnabled ? akEditorMaxWidthLayoutWidth : isFullWidthEnabled || mode === 'full-width' ? akEditorFullWidthLayoutWidth : akEditorCalculatedWideLayoutWidth;
61
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
62
+ var _marks = breakout.create({
63
+ width: _width
64
+ }).addToSet(node.marks);
65
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, _marks);
66
+ } else {
67
+ updatedTr = newTr.setNodeMarkup(pos, node.type, node.attrs, [breakout.create({
68
+ width: _width,
69
+ mode: mode
70
+ })]);
71
+ }
57
72
  if (isExpand) {
58
73
  updateExpandedStateNew({
59
74
  tr: updatedTr,
@@ -113,7 +128,6 @@ var requestIdleCallbackWithFallback = function requestIdleCallbackWithFallback(c
113
128
  }
114
129
  };
115
130
  export var createResizingPlugin = function createResizingPlugin(api, getIntl, nodeViewPortalProviderAPI, options) {
116
- var isRuleAndPanelResizingEnabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
117
131
  return new SafePlugin({
118
132
  key: resizingPluginKey,
119
133
  state: pluginState,
@@ -127,7 +141,8 @@ export var createResizingPlugin = function createResizingPlugin(api, getIntl, no
127
141
  },
128
142
  view: function view(editorView) {
129
143
  var _api$editorViewMode2;
130
- var isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
144
+ var isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
145
+ var isRuleAndPanelResizingEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
131
146
  var isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !fg('platform_editor_lovability_resize_patch_1');
132
147
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled) {
133
148
  return {};
@@ -153,7 +168,12 @@ export var createResizingPlugin = function createResizingPlugin(api, getIntl, no
153
168
  rule = _state$schema$nodes.rule,
154
169
  panel = _state$schema$nodes.panel,
155
170
  panel_c1 = _state$schema$nodes.panel_c1;
156
- var breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
171
+ var breakoutResizableNodes = new Set();
172
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
173
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(state.schema);
174
+ } else {
175
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(state.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
176
+ }
157
177
  var newTr = state.tr;
158
178
  var hasDocChanged = false;
159
179
 
@@ -200,6 +220,7 @@ export var createResizingPlugin = function createResizingPlugin(api, getIntl, no
200
220
  }
201
221
  var newTr = newState.tr;
202
222
  var hasDocChanged = false;
223
+ var isRuleAndPanelResizingEnabled = expValEquals('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true);
203
224
  var _newState$schema$node = newState.schema.nodes,
204
225
  expand = _newState$schema$node.expand,
205
226
  codeBlock = _newState$schema$node.codeBlock,
@@ -207,10 +228,15 @@ export var createResizingPlugin = function createResizingPlugin(api, getIntl, no
207
228
  rule = _newState$schema$node.rule,
208
229
  panel = _newState$schema$node.panel,
209
230
  panel_c1 = _newState$schema$node.panel_c1;
210
- var breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
231
+ var breakoutResizableNodes = new Set();
232
+ if (isExperimentEnabled('platform_editor_lovability_resize_extensions')) {
233
+ breakoutResizableNodes = getBreakoutResizableNodeTypesNew(newState.schema);
234
+ } else {
235
+ breakoutResizableNodes = editorExperiment('platform_synced_block', true) ? getBreakoutResizableNodeTypes(newState.schema, isRuleAndPanelResizingEnabled) : isRuleAndPanelResizingEnabled ? new Set([expand, codeBlock, layoutSection, rule, panel, panel_c1]) : new Set([expand, codeBlock, layoutSection]);
236
+ }
211
237
  var isFullWidthEnabled = !((options === null || options === void 0 ? void 0 : options.allowBreakoutButton) === true);
212
238
  var isMaxWidthEnabled = (options === null || options === void 0 ? void 0 : options.appearance) === 'max' && expValEquals('confluence_max_width_content_appearance', 'isEnabled', true) && expValEquals('platform_editor_lovability_breakout_resizing_fixes', 'isEnabled', true);
213
- var isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true);
239
+ var isPageLoadNormalizationEnabled = expValEquals('platform_editor_add_breakout_marks_on_page_load', 'isEnabled', true) || isExperimentEnabled('platform_editor_lovability_resize_extensions');
214
240
  var isPanelAndDividerNormalizationEnabled = isRuleAndPanelResizingEnabled && !fg('platform_editor_lovability_resize_patch_1');
215
241
  if (!isPageLoadNormalizationEnabled && !isPanelAndDividerNormalizationEnabled && isReplaceDocOperation(transactions, oldState)) {
216
242
  newState.doc.forEach(function (node, pos) {
@@ -29,7 +29,7 @@ export declare class ResizingMarkView implements NodeView {
29
29
  */
30
30
  constructor(mark: Mark, view: EditorView, api: ExtractInjectionAPI<BreakoutPlugin> | undefined, getIntl: () => IntlShape, nodeViewPortalProviderAPI: PortalProviderAPI);
31
31
  setupResizerCallbacks(dom: HTMLElement, contentDOM: HTMLElement, view: EditorView, mark: Mark, api?: ExtractInjectionAPI<BreakoutPlugin>): void;
32
- setupResizerCallbacksIfSupported(dom: HTMLElement, contentDOM: HTMLElement, view: EditorView, mark: Mark, isResizingExperimentEnabled: boolean, api?: ExtractInjectionAPI<BreakoutPlugin>): void;
32
+ setupResizerCallbacksIfSupported(dom: HTMLElement, contentDOM: HTMLElement, view: EditorView, mark: Mark, isResizingDividersPanelsEnabled: boolean, isResizingExtensionsEnabled: boolean, api?: ExtractInjectionAPI<BreakoutPlugin>): void;
33
33
  ignoreMutation(): boolean;
34
34
  destroy(): void;
35
35
  }
@@ -7,7 +7,7 @@ import type { BreakoutPlugin, BreakoutPluginOptions, BreakoutPluginState } from
7
7
  import type { GUIDELINE_KEYS } from './get-guidelines';
8
8
  export declare const resizingPluginKey: PluginKey<BreakoutPluginState>;
9
9
  export type ActiveGuidelineKey = Exclude<(typeof GUIDELINE_KEYS)[keyof typeof GUIDELINE_KEYS], 'grid_left' | 'grid_right'>;
10
- export declare const createResizingPlugin: (api: ExtractInjectionAPI<BreakoutPlugin> | undefined, getIntl: () => IntlShape, nodeViewPortalProviderAPI: PortalProviderAPI, options?: BreakoutPluginOptions, isRuleAndPanelResizingEnabled?: boolean) => SafePlugin<BreakoutPluginState | {
10
+ export declare const createResizingPlugin: (api: ExtractInjectionAPI<BreakoutPlugin> | undefined, getIntl: () => IntlShape, nodeViewPortalProviderAPI: PortalProviderAPI, options?: BreakoutPluginOptions) => SafePlugin<BreakoutPluginState | {
11
11
  activeGuidelineLabel: undefined;
12
12
  breakoutNode: undefined;
13
13
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-breakout",
3
- "version": "14.0.3",
3
+ "version": "14.0.4",
4
4
  "description": "Breakout plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -36,8 +36,8 @@
36
36
  "@atlaskit/platform-feature-flags": "^2.1.0",
37
37
  "@atlaskit/pragmatic-drag-and-drop": "^2.0.0",
38
38
  "@atlaskit/theme": "^28.0.0",
39
- "@atlaskit/tmp-editor-statsig": "^144.0.0",
40
- "@atlaskit/tokens": "^16.4.0",
39
+ "@atlaskit/tmp-editor-statsig": "^145.0.0",
40
+ "@atlaskit/tokens": "^16.5.0",
41
41
  "@atlaskit/tooltip": "^24.0.0",
42
42
  "@babel/runtime": "^7.0.0",
43
43
  "@emotion/react": "^11.7.1",
@@ -46,7 +46,7 @@
46
46
  "uuid": "^3.1.0"
47
47
  },
48
48
  "peerDependencies": {
49
- "@atlaskit/editor-common": "^118.1.0",
49
+ "@atlaskit/editor-common": "^118.2.0",
50
50
  "react": "^18.2.0 || ^19.2.0",
51
51
  "react-dom": "^18.2.0 || ^19.2.0",
52
52
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
@@ -95,6 +95,9 @@
95
95
  }
96
96
  },
97
97
  "platform-feature-flags": {
98
+ "platform_editor_lovability_resize_ext_gracefully": {
99
+ "type": "boolean"
100
+ },
98
101
  "platform_editor_lovability_resize_gracefully": {
99
102
  "type": "boolean"
100
103
  },