@atlaskit/editor-plugin-block-menu 16.0.8 → 16.0.10

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,19 @@
1
1
  # @atlaskit/editor-plugin-block-menu
2
2
 
3
+ ## 16.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 16.0.9
10
+
11
+ ### Patch Changes
12
+
13
+ - [`61a147bcf836c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/61a147bcf836c) -
14
+ Support Small text and Normal text transformations from the block menu by reusing the Paragraph
15
+ conversion with target block marks.
16
+
3
17
  ## 16.0.8
4
18
 
5
19
  ### Patch Changes
@@ -65,7 +65,7 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
65
65
  getBlockMenuComponents: function getBlockMenuComponents() {
66
66
  return registry.components;
67
67
  },
68
- isTransformOptionDisabled: function isTransformOptionDisabled(optionNodeTypeName, optionNodeTypeAttrs) {
68
+ isTransformOptionDisabled: function isTransformOptionDisabled(optionNodeTypeName, optionNodeTypeAttrs, targetNodeMarkChanges) {
69
69
  var _api$blockControls, _api$selection;
70
70
  var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
71
71
  var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState) === null || _api$selection === void 0 || (_api$selection = _api$selection.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.selection;
@@ -77,6 +77,7 @@ var blockMenuPlugin = exports.blockMenuPlugin = function blockMenuPlugin(_ref) {
77
77
  selection: currentSelection,
78
78
  targetNodeTypeName: optionNodeTypeName,
79
79
  targetNodeTypeAttrs: optionNodeTypeAttrs,
80
+ targetNodeMarkChanges: (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text') ? targetNodeMarkChanges : undefined,
80
81
  transformRegistry: transformSourceRegistry
81
82
  });
82
83
  },
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.isTransformToTargetDisabled = exports.canParentContainNodeType = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
7
9
  var _selection = require("@atlaskit/editor-common/selection");
8
10
  var _model = require("@atlaskit/editor-prosemirror/model");
9
11
  var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
@@ -34,11 +36,28 @@ var isHeadingToHeadingTransformEnabled = function isHeadingToHeadingTransformEna
34
36
  }
35
37
  return selectedLevel !== targetLevel;
36
38
  };
37
- var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema) {
39
+ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema) {
38
40
  var selectedNodeTypeName = (0, _types.toNodeTypeValue)(node.type.name);
39
41
  if (!selectedNodeTypeName) {
40
42
  return false;
41
43
  }
44
+ if (selectedNodeTypeName === targetNodeTypeName) {
45
+ var removesTargetMarks = marksToRemove === null || marksToRemove === void 0 ? void 0 : marksToRemove.some(function (name) {
46
+ var markType = schema.marks[name];
47
+ return markType ? Boolean(markType.isInSet(node.marks)) : false;
48
+ });
49
+ var addsOrReplacesTargetMarks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).some(function (_ref) {
50
+ var _markType$isInSet;
51
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
52
+ name = _ref2[0],
53
+ attrs = _ref2[1];
54
+ var markType = schema.marks[name];
55
+ return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
56
+ });
57
+ if (removesTargetMarks || addsOrReplacesTargetMarks) {
58
+ return true;
59
+ }
60
+ }
42
61
  var isDisabledByStepsConfig = (0, _transform.isTransformDisabledBasedOnStepsConfig)(selectedNodeTypeName, targetNodeTypeName);
43
62
  if (isDisabledByStepsConfig) {
44
63
  return false;
@@ -51,11 +70,12 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
51
70
  }
52
71
  return true;
53
72
  };
54
- var isTransformToTargetDisabled = exports.isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref) {
55
- var selection = _ref.selection,
56
- targetNodeTypeName = _ref.targetNodeTypeName,
57
- targetNodeTypeAttrs = _ref.targetNodeTypeAttrs,
58
- transformRegistry = _ref.transformRegistry;
73
+ var isTransformToTargetDisabled = exports.isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref3) {
74
+ var selection = _ref3.selection,
75
+ targetNodeTypeName = _ref3.targetNodeTypeName,
76
+ targetNodeTypeAttrs = _ref3.targetNodeTypeAttrs,
77
+ targetNodeMarkChanges = _ref3.targetNodeMarkChanges,
78
+ transformRegistry = _ref3.transformRegistry;
59
79
  var _expandSelectionToBlo = (0, _selection.expandSelectionToBlockRange)(selection),
60
80
  range = _expandSelectionToBlo.range;
61
81
  if (!range) {
@@ -74,12 +94,15 @@ var isTransformToTargetDisabled = exports.isTransformToTargetDisabled = function
74
94
  var parent = range.parent;
75
95
  var isNested = range.depth >= 1;
76
96
  var schema = selection.$from.doc.type.schema;
97
+ var _ref4 = targetNodeMarkChanges !== null && targetNodeMarkChanges !== void 0 ? targetNodeMarkChanges : {},
98
+ marksToAdd = _ref4.marksToAdd,
99
+ marksToRemove = _ref4.marksToRemove;
77
100
  var supportedTargetNodeTypeName = (0, _types.toNodeTypeValue)(targetNodeTypeName);
78
101
  if (!supportedTargetNodeTypeName) {
79
102
  return true;
80
103
  }
81
104
  var isEnabledForAnyNode = selectedNodes.some(function (node) {
82
- return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema);
105
+ return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema);
83
106
  });
84
107
  return !isEnabledForAnyNode;
85
108
  };
@@ -1,14 +1,44 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.upgradePanelNodesToPanelC1 = exports.isTransformDisabledBasedOnStepsConfig = exports.convertNodesToTargetType = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
7
9
  var _nodeTypeUtils = require("@atlaskit/editor-common/utils/node-type-utils");
10
+ var _model = require("@atlaskit/editor-prosemirror/model");
11
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
8
12
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
9
13
  var _utils = require("../transform-node-utils/utils");
10
14
  var _TRANSFORMATION_MATRIX = require("./TRANSFORMATION_MATRIX");
11
15
  var _types = require("./types");
16
+ var _applyTargetNodeMarks = function applyTargetNodeMarks(node, targetNodeType, marksToAdd, marksToRemove, schema) {
17
+ var nextNode = node;
18
+ if (node.type === targetNodeType) {
19
+ var marksAfterRemovals = (marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []).reduce(function (currentMarks, name) {
20
+ var markType = schema.marks[name];
21
+ return markType ? markType.removeFromSet(currentMarks) : currentMarks;
22
+ }, node.marks);
23
+ var marks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).reduce(function (currentMarks, _ref) {
24
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
25
+ name = _ref2[0],
26
+ attrs = _ref2[1];
27
+ var markType = schema.marks[name];
28
+ return markType ? markType.create(attrs).addToSet(markType.removeFromSet(currentMarks)) : currentMarks;
29
+ }, marksAfterRemovals);
30
+ nextNode = node.mark(marks);
31
+ }
32
+ if (nextNode.childCount === 0) {
33
+ return nextNode;
34
+ }
35
+ var children = [];
36
+ nextNode.forEach(function (child) {
37
+ return children.push(_applyTargetNodeMarks(child, targetNodeType, marksToAdd, marksToRemove, schema));
38
+ });
39
+ return nextNode.copy(_model.Fragment.fromArray(children));
40
+ };
41
+
12
42
  // Upgrade broken-out panel nodes to panel_c1 if the parent node allows it
13
43
  var upgradePanelNodesToPanelC1 = exports.upgradePanelNodesToPanelC1 = function upgradePanelNodesToPanelC1(nodes, parentNode, schema) {
14
44
  if (!schema.nodes['panel_c1'] || !(0, _expValEquals.expValEquals)('platform_editor_nest_table_in_panel', 'isEnabled', true)) {
@@ -38,16 +68,21 @@ var upgradePanelNodesToPanelC1 = exports.upgradePanelNodesToPanelC1 = function u
38
68
  * @param args.schema - The schema to use for the conversion
39
69
  * @param args.isNested - Whether the conversion is nested
40
70
  * @param args.targetAttrs - The attributes to use for the conversion
71
+ * @param args.marksToAdd - Block marks to add or replace on converted target nodes
72
+ * @param args.marksToRemove - Block marks to remove from converted target nodes
41
73
  * @param args.parentNode - The parent node of the selected node
42
74
  * @returns The converted list of nodes
43
75
  */
44
- var convertNodesToTargetType = exports.convertNodesToTargetType = function convertNodesToTargetType(_ref) {
45
- var sourceNodes = _ref.sourceNodes,
46
- targetNodeType = _ref.targetNodeType,
47
- schema = _ref.schema,
48
- isNested = _ref.isNested,
49
- targetAttrs = _ref.targetAttrs,
50
- parentNode = _ref.parentNode;
76
+ var convertNodesToTargetType = exports.convertNodesToTargetType = function convertNodesToTargetType(_ref3) {
77
+ var _steps$reduce;
78
+ var sourceNodes = _ref3.sourceNodes,
79
+ targetNodeType = _ref3.targetNodeType,
80
+ schema = _ref3.schema,
81
+ isNested = _ref3.isNested,
82
+ targetAttrs = _ref3.targetAttrs,
83
+ marksToAdd = _ref3.marksToAdd,
84
+ marksToRemove = _ref3.marksToRemove,
85
+ parentNode = _ref3.parentNode;
51
86
  var sourceNode = sourceNodes.at(0);
52
87
  if (!sourceNode) {
53
88
  return sourceNodes;
@@ -66,13 +101,23 @@ var convertNodesToTargetType = exports.convertNodesToTargetType = function conve
66
101
  schema: schema,
67
102
  targetAttrs: targetAttrs
68
103
  };
69
- if (!steps || steps.length === 0) {
70
- return sourceNodes;
104
+ var shouldApplyTargetNodeMarkChanges = (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
105
+ if (!shouldApplyTargetNodeMarkChanges) {
106
+ if (!steps || steps.length === 0) {
107
+ return sourceNodes;
108
+ }
109
+ var _resultNodes = steps.reduce(function (nodes, step) {
110
+ return step(nodes, context);
111
+ }, sourceNodes);
112
+ return upgradePanelNodesToPanelC1(_resultNodes, parentNode, schema);
71
113
  }
72
- var resultNodes = steps.reduce(function (nodes, step) {
114
+ var resultNodes = (_steps$reduce = steps === null || steps === void 0 ? void 0 : steps.reduce(function (nodes, step) {
73
115
  return step(nodes, context);
74
- }, sourceNodes);
75
- return upgradePanelNodesToPanelC1(resultNodes, parentNode, schema);
116
+ }, sourceNodes)) !== null && _steps$reduce !== void 0 ? _steps$reduce : sourceNodes;
117
+ var upgradedNodes = steps !== null && steps !== void 0 && steps.length ? upgradePanelNodesToPanelC1(resultNodes, parentNode, schema) : resultNodes;
118
+ return upgradedNodes.map(function (node) {
119
+ return _applyTargetNodeMarks(node, targetNodeType, marksToAdd, marksToRemove, schema);
120
+ });
76
121
  };
77
122
  var isTransformDisabledBasedOnStepsConfig = exports.isTransformDisabledBasedOnStepsConfig = function isTransformDisabledBasedOnStepsConfig(selectedNodeType, targetNodeType) {
78
123
  var steps = (0, _expValEquals.expValEquals)('platform_editor_nest_table_in_panel', 'isEnabled', true) ? _TRANSFORMATION_MATRIX.TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeType][targetNodeType] : _TRANSFORMATION_MATRIX.TRANSFORMATION_MATRIX[selectedNodeType][targetNodeType];
@@ -27,6 +27,11 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
27
27
  if (!preservedSelection) {
28
28
  return tr;
29
29
  }
30
+ var isSmallTextTransform = (metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) === 'smallText';
31
+ var isTextFormattingTransform = ((metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd) !== undefined || (metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove) !== undefined) && (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text');
32
+ if (isSmallTextTransform && !isTextFormattingTransform) {
33
+ return null;
34
+ }
30
35
  var analytics = (0, _transformAnalytics.createTransformAnalytics)(api, tr, preservedSelection);
31
36
  if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_transform_extensions')) {
32
37
  var _expandSelectionToBlo = (0, _selection.expandSelectionToBlockRange)(preservedSelection),
@@ -103,6 +108,7 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
103
108
  }
104
109
  var measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
105
110
  (0, _performanceMeasures.startMeasure)(measureId);
111
+ var docBeforeTransform = tr.doc;
106
112
  var nodes = tr.doc.type.schema.nodes;
107
113
  var _expandSelectionToBlo2 = (0, _selection.expandSelectionToBlockRange)(preservedSelection),
108
114
  $from = _expandSelectionToBlo2.$from,
@@ -121,6 +127,8 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
121
127
  schema: tr.doc.type.schema,
122
128
  isNested: isNested,
123
129
  targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
130
+ marksToAdd: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd : undefined,
131
+ marksToRemove: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove : undefined,
124
132
  parentNode: selectedParent
125
133
  });
126
134
  var content = _resultNodes.length > 0 ? _resultNodes : sourceNodes;
@@ -158,6 +166,10 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
158
166
  } else {
159
167
  tr.replaceWith(_sliceStart, $to.pos, content);
160
168
  }
169
+ if (isTextFormattingTransform && tr.doc.eq(docBeforeTransform)) {
170
+ (0, _performanceMeasures.stopMeasure)(measureId);
171
+ return null;
172
+ }
161
173
  if (preservedSelection instanceof _editorTables.CellSelection) {
162
174
  var _insertedNode = tr.doc.nodeAt($from.pos);
163
175
  var isSelectable = _insertedNode && _state.NodeSelection.isSelectable(_insertedNode);
@@ -182,7 +194,7 @@ var transformNode = exports.transformNode = function transformNode(api, transfor
182
194
  isSuggested: isSuggested,
183
195
  outputNodesCount: content.length,
184
196
  sourceNodes: sourceNodes,
185
- targetNodeType: targetType.name
197
+ targetNodeType: isSmallTextTransform ? 'smallText' : targetType.name
186
198
  });
187
199
  });
188
200
  } catch (error) {
@@ -52,7 +52,7 @@ export const blockMenuPlugin = ({
52
52
  getBlockMenuComponents: () => {
53
53
  return registry.components;
54
54
  },
55
- isTransformOptionDisabled: (optionNodeTypeName, optionNodeTypeAttrs) => {
55
+ isTransformOptionDisabled: (optionNodeTypeName, optionNodeTypeAttrs, targetNodeMarkChanges) => {
56
56
  var _api$blockControls, _api$blockControls$sh, _api$selection, _api$selection$shared, _api$selection$shared2;
57
57
  const preservedSelection = api === null || api === void 0 ? void 0 : (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 ? void 0 : (_api$blockControls$sh = _api$blockControls.sharedState.currentState()) === null || _api$blockControls$sh === void 0 ? void 0 : _api$blockControls$sh.preservedSelection;
58
58
  const selection = api === null || api === void 0 ? void 0 : (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : (_api$selection$shared = _api$selection.sharedState) === null || _api$selection$shared === void 0 ? void 0 : (_api$selection$shared2 = _api$selection$shared.currentState()) === null || _api$selection$shared2 === void 0 ? void 0 : _api$selection$shared2.selection;
@@ -64,6 +64,7 @@ export const blockMenuPlugin = ({
64
64
  selection: currentSelection,
65
65
  targetNodeTypeName: optionNodeTypeName,
66
66
  targetNodeTypeAttrs: optionNodeTypeAttrs,
67
+ targetNodeMarkChanges: isExperimentEnabled('platform_editor_block_menu_small_text') ? targetNodeMarkChanges : undefined,
67
68
  transformRegistry: transformSourceRegistry
68
69
  });
69
70
  },
@@ -28,11 +28,25 @@ const isHeadingToHeadingTransformEnabled = (selectedNode, targetNodeTypeAttrs) =
28
28
  }
29
29
  return selectedLevel !== targetLevel;
30
30
  };
31
- const isTransformEnabledForNode = (node, targetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema) => {
31
+ const isTransformEnabledForNode = (node, targetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema) => {
32
32
  const selectedNodeTypeName = toNodeTypeValue(node.type.name);
33
33
  if (!selectedNodeTypeName) {
34
34
  return false;
35
35
  }
36
+ if (selectedNodeTypeName === targetNodeTypeName) {
37
+ const removesTargetMarks = marksToRemove === null || marksToRemove === void 0 ? void 0 : marksToRemove.some(name => {
38
+ const markType = schema.marks[name];
39
+ return markType ? Boolean(markType.isInSet(node.marks)) : false;
40
+ });
41
+ const addsOrReplacesTargetMarks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).some(([name, attrs]) => {
42
+ var _markType$isInSet;
43
+ const markType = schema.marks[name];
44
+ return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
45
+ });
46
+ if (removesTargetMarks || addsOrReplacesTargetMarks) {
47
+ return true;
48
+ }
49
+ }
36
50
  const isDisabledByStepsConfig = isTransformDisabledBasedOnStepsConfig(selectedNodeTypeName, targetNodeTypeName);
37
51
  if (isDisabledByStepsConfig) {
38
52
  return false;
@@ -49,6 +63,7 @@ export const isTransformToTargetDisabled = ({
49
63
  selection,
50
64
  targetNodeTypeName,
51
65
  targetNodeTypeAttrs,
66
+ targetNodeMarkChanges,
52
67
  transformRegistry
53
68
  }) => {
54
69
  const {
@@ -72,10 +87,14 @@ export const isTransformToTargetDisabled = ({
72
87
  const {
73
88
  schema
74
89
  } = selection.$from.doc.type;
90
+ const {
91
+ marksToAdd,
92
+ marksToRemove
93
+ } = targetNodeMarkChanges !== null && targetNodeMarkChanges !== void 0 ? targetNodeMarkChanges : {};
75
94
  const supportedTargetNodeTypeName = toNodeTypeValue(targetNodeTypeName);
76
95
  if (!supportedTargetNodeTypeName) {
77
96
  return true;
78
97
  }
79
- const isEnabledForAnyNode = selectedNodes.some(node => isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema));
98
+ const isEnabledForAnyNode = selectedNodes.some(node => isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema));
80
99
  return !isEnabledForAnyNode;
81
100
  };
@@ -1,8 +1,31 @@
1
1
  import { isNodeTypeValidChildOf } from '@atlaskit/editor-common/utils/node-type-utils';
2
+ import { Fragment } from '@atlaskit/editor-prosemirror/model';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
2
4
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
5
  import { getTargetNodeTypeNameInContext } from '../transform-node-utils/utils';
4
6
  import { TRANSFORMATION_MATRIX, TRANSFORMATION_MATRIX_PANEL_C1 } from './TRANSFORMATION_MATRIX';
5
7
  import { getNodeName, toNodeTypeValue } from './types';
8
+ const applyTargetNodeMarks = (node, targetNodeType, marksToAdd, marksToRemove, schema) => {
9
+ let nextNode = node;
10
+ if (node.type === targetNodeType) {
11
+ const marksAfterRemovals = (marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []).reduce((currentMarks, name) => {
12
+ const markType = schema.marks[name];
13
+ return markType ? markType.removeFromSet(currentMarks) : currentMarks;
14
+ }, node.marks);
15
+ const marks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).reduce((currentMarks, [name, attrs]) => {
16
+ const markType = schema.marks[name];
17
+ return markType ? markType.create(attrs).addToSet(markType.removeFromSet(currentMarks)) : currentMarks;
18
+ }, marksAfterRemovals);
19
+ nextNode = node.mark(marks);
20
+ }
21
+ if (nextNode.childCount === 0) {
22
+ return nextNode;
23
+ }
24
+ const children = [];
25
+ nextNode.forEach(child => children.push(applyTargetNodeMarks(child, targetNodeType, marksToAdd, marksToRemove, schema)));
26
+ return nextNode.copy(Fragment.fromArray(children));
27
+ };
28
+
6
29
  // Upgrade broken-out panel nodes to panel_c1 if the parent node allows it
7
30
  export const upgradePanelNodesToPanelC1 = (nodes, parentNode, schema) => {
8
31
  if (!schema.nodes['panel_c1'] || !expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true)) {
@@ -32,6 +55,8 @@ export const upgradePanelNodesToPanelC1 = (nodes, parentNode, schema) => {
32
55
  * @param args.schema - The schema to use for the conversion
33
56
  * @param args.isNested - Whether the conversion is nested
34
57
  * @param args.targetAttrs - The attributes to use for the conversion
58
+ * @param args.marksToAdd - Block marks to add or replace on converted target nodes
59
+ * @param args.marksToRemove - Block marks to remove from converted target nodes
35
60
  * @param args.parentNode - The parent node of the selected node
36
61
  * @returns The converted list of nodes
37
62
  */
@@ -41,8 +66,11 @@ export const convertNodesToTargetType = ({
41
66
  schema,
42
67
  isNested,
43
68
  targetAttrs,
69
+ marksToAdd,
70
+ marksToRemove,
44
71
  parentNode
45
72
  }) => {
73
+ var _steps$reduce;
46
74
  const sourceNode = sourceNodes.at(0);
47
75
  if (!sourceNode) {
48
76
  return sourceNodes;
@@ -61,13 +89,17 @@ export const convertNodesToTargetType = ({
61
89
  schema,
62
90
  targetAttrs
63
91
  };
64
- if (!steps || steps.length === 0) {
65
- return sourceNodes;
92
+ const shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
93
+ if (!shouldApplyTargetNodeMarkChanges) {
94
+ if (!steps || steps.length === 0) {
95
+ return sourceNodes;
96
+ }
97
+ const resultNodes = steps.reduce((nodes, step) => step(nodes, context), sourceNodes);
98
+ return upgradePanelNodesToPanelC1(resultNodes, parentNode, schema);
66
99
  }
67
- const resultNodes = steps.reduce((nodes, step) => {
68
- return step(nodes, context);
69
- }, sourceNodes);
70
- return upgradePanelNodesToPanelC1(resultNodes, parentNode, schema);
100
+ const resultNodes = (_steps$reduce = steps === null || steps === void 0 ? void 0 : steps.reduce((nodes, step) => step(nodes, context), sourceNodes)) !== null && _steps$reduce !== void 0 ? _steps$reduce : sourceNodes;
101
+ const upgradedNodes = steps !== null && steps !== void 0 && steps.length ? upgradePanelNodesToPanelC1(resultNodes, parentNode, schema) : resultNodes;
102
+ return upgradedNodes.map(node => applyTargetNodeMarks(node, targetNodeType, marksToAdd, marksToRemove, schema));
71
103
  };
72
104
  export const isTransformDisabledBasedOnStepsConfig = (selectedNodeType, targetNodeType) => {
73
105
  const steps = expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true) ? TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeType][targetNodeType] : TRANSFORMATION_MATRIX[selectedNodeType][targetNodeType];
@@ -20,6 +20,11 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
20
20
  if (!preservedSelection) {
21
21
  return tr;
22
22
  }
23
+ const isSmallTextTransform = (metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) === 'smallText';
24
+ const isTextFormattingTransform = ((metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd) !== undefined || (metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove) !== undefined) && isExperimentEnabled('platform_editor_block_menu_small_text');
25
+ if (isSmallTextTransform && !isTextFormattingTransform) {
26
+ return null;
27
+ }
23
28
  const analytics = createTransformAnalytics(api, tr, preservedSelection);
24
29
  if (isExperimentEnabled('platform_editor_block_menu_transform_extensions')) {
25
30
  const {
@@ -98,6 +103,7 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
98
103
  }
99
104
  const measureId = `transformNode_${targetType.name}_${Date.now()}`;
100
105
  startMeasure(measureId);
106
+ const docBeforeTransform = tr.doc;
101
107
  const {
102
108
  nodes
103
109
  } = tr.doc.type.schema;
@@ -119,6 +125,8 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
119
125
  schema: tr.doc.type.schema,
120
126
  isNested,
121
127
  targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
128
+ marksToAdd: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd : undefined,
129
+ marksToRemove: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove : undefined,
122
130
  parentNode: selectedParent
123
131
  });
124
132
  const content = resultNodes.length > 0 ? resultNodes : sourceNodes;
@@ -154,6 +162,10 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
154
162
  } else {
155
163
  tr.replaceWith(sliceStart, $to.pos, content);
156
164
  }
165
+ if (isTextFormattingTransform && tr.doc.eq(docBeforeTransform)) {
166
+ stopMeasure(measureId);
167
+ return null;
168
+ }
157
169
  if (preservedSelection instanceof CellSelection) {
158
170
  const insertedNode = tr.doc.nodeAt($from.pos);
159
171
  const isSelectable = insertedNode && NodeSelection.isSelectable(insertedNode);
@@ -178,7 +190,7 @@ export const transformNode = (api, transformRegistry) => (targetType, metadata)
178
190
  isSuggested,
179
191
  outputNodesCount: content.length,
180
192
  sourceNodes,
181
- targetNodeType: targetType.name
193
+ targetNodeType: isSmallTextTransform ? 'smallText' : targetType.name
182
194
  });
183
195
  });
184
196
  } catch (error) {
@@ -58,7 +58,7 @@ export var blockMenuPlugin = function blockMenuPlugin(_ref) {
58
58
  getBlockMenuComponents: function getBlockMenuComponents() {
59
59
  return registry.components;
60
60
  },
61
- isTransformOptionDisabled: function isTransformOptionDisabled(optionNodeTypeName, optionNodeTypeAttrs) {
61
+ isTransformOptionDisabled: function isTransformOptionDisabled(optionNodeTypeName, optionNodeTypeAttrs, targetNodeMarkChanges) {
62
62
  var _api$blockControls, _api$selection;
63
63
  var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
64
64
  var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState) === null || _api$selection === void 0 || (_api$selection = _api$selection.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.selection;
@@ -70,6 +70,7 @@ export var blockMenuPlugin = function blockMenuPlugin(_ref) {
70
70
  selection: currentSelection,
71
71
  targetNodeTypeName: optionNodeTypeName,
72
72
  targetNodeTypeAttrs: optionNodeTypeAttrs,
73
+ targetNodeMarkChanges: isExperimentEnabled('platform_editor_block_menu_small_text') ? targetNodeMarkChanges : undefined,
73
74
  transformRegistry: transformSourceRegistry
74
75
  });
75
76
  },
@@ -1,3 +1,4 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
2
3
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
3
4
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
@@ -28,11 +29,28 @@ var isHeadingToHeadingTransformEnabled = function isHeadingToHeadingTransformEna
28
29
  }
29
30
  return selectedLevel !== targetLevel;
30
31
  };
31
- var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema) {
32
+ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema) {
32
33
  var selectedNodeTypeName = toNodeTypeValue(node.type.name);
33
34
  if (!selectedNodeTypeName) {
34
35
  return false;
35
36
  }
37
+ if (selectedNodeTypeName === targetNodeTypeName) {
38
+ var removesTargetMarks = marksToRemove === null || marksToRemove === void 0 ? void 0 : marksToRemove.some(function (name) {
39
+ var markType = schema.marks[name];
40
+ return markType ? Boolean(markType.isInSet(node.marks)) : false;
41
+ });
42
+ var addsOrReplacesTargetMarks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).some(function (_ref) {
43
+ var _markType$isInSet;
44
+ var _ref2 = _slicedToArray(_ref, 2),
45
+ name = _ref2[0],
46
+ attrs = _ref2[1];
47
+ var markType = schema.marks[name];
48
+ return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
49
+ });
50
+ if (removesTargetMarks || addsOrReplacesTargetMarks) {
51
+ return true;
52
+ }
53
+ }
36
54
  var isDisabledByStepsConfig = isTransformDisabledBasedOnStepsConfig(selectedNodeTypeName, targetNodeTypeName);
37
55
  if (isDisabledByStepsConfig) {
38
56
  return false;
@@ -45,11 +63,12 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
45
63
  }
46
64
  return true;
47
65
  };
48
- export var isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref) {
49
- var selection = _ref.selection,
50
- targetNodeTypeName = _ref.targetNodeTypeName,
51
- targetNodeTypeAttrs = _ref.targetNodeTypeAttrs,
52
- transformRegistry = _ref.transformRegistry;
66
+ export var isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref3) {
67
+ var selection = _ref3.selection,
68
+ targetNodeTypeName = _ref3.targetNodeTypeName,
69
+ targetNodeTypeAttrs = _ref3.targetNodeTypeAttrs,
70
+ targetNodeMarkChanges = _ref3.targetNodeMarkChanges,
71
+ transformRegistry = _ref3.transformRegistry;
53
72
  var _expandSelectionToBlo = expandSelectionToBlockRange(selection),
54
73
  range = _expandSelectionToBlo.range;
55
74
  if (!range) {
@@ -68,12 +87,15 @@ export var isTransformToTargetDisabled = function isTransformToTargetDisabled(_r
68
87
  var parent = range.parent;
69
88
  var isNested = range.depth >= 1;
70
89
  var schema = selection.$from.doc.type.schema;
90
+ var _ref4 = targetNodeMarkChanges !== null && targetNodeMarkChanges !== void 0 ? targetNodeMarkChanges : {},
91
+ marksToAdd = _ref4.marksToAdd,
92
+ marksToRemove = _ref4.marksToRemove;
71
93
  var supportedTargetNodeTypeName = toNodeTypeValue(targetNodeTypeName);
72
94
  if (!supportedTargetNodeTypeName) {
73
95
  return true;
74
96
  }
75
97
  var isEnabledForAnyNode = selectedNodes.some(function (node) {
76
- return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema);
98
+ return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, marksToAdd, marksToRemove, isNested, parent, schema);
77
99
  });
78
100
  return !isEnabledForAnyNode;
79
101
  };
@@ -1,8 +1,37 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  import { isNodeTypeValidChildOf } from '@atlaskit/editor-common/utils/node-type-utils';
3
+ import { Fragment } from '@atlaskit/editor-prosemirror/model';
4
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
2
5
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
6
  import { getTargetNodeTypeNameInContext } from '../transform-node-utils/utils';
4
7
  import { TRANSFORMATION_MATRIX, TRANSFORMATION_MATRIX_PANEL_C1 } from './TRANSFORMATION_MATRIX';
5
8
  import { getNodeName, toNodeTypeValue } from './types';
9
+ var _applyTargetNodeMarks = function applyTargetNodeMarks(node, targetNodeType, marksToAdd, marksToRemove, schema) {
10
+ var nextNode = node;
11
+ if (node.type === targetNodeType) {
12
+ var marksAfterRemovals = (marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []).reduce(function (currentMarks, name) {
13
+ var markType = schema.marks[name];
14
+ return markType ? markType.removeFromSet(currentMarks) : currentMarks;
15
+ }, node.marks);
16
+ var marks = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}).reduce(function (currentMarks, _ref) {
17
+ var _ref2 = _slicedToArray(_ref, 2),
18
+ name = _ref2[0],
19
+ attrs = _ref2[1];
20
+ var markType = schema.marks[name];
21
+ return markType ? markType.create(attrs).addToSet(markType.removeFromSet(currentMarks)) : currentMarks;
22
+ }, marksAfterRemovals);
23
+ nextNode = node.mark(marks);
24
+ }
25
+ if (nextNode.childCount === 0) {
26
+ return nextNode;
27
+ }
28
+ var children = [];
29
+ nextNode.forEach(function (child) {
30
+ return children.push(_applyTargetNodeMarks(child, targetNodeType, marksToAdd, marksToRemove, schema));
31
+ });
32
+ return nextNode.copy(Fragment.fromArray(children));
33
+ };
34
+
6
35
  // Upgrade broken-out panel nodes to panel_c1 if the parent node allows it
7
36
  export var upgradePanelNodesToPanelC1 = function upgradePanelNodesToPanelC1(nodes, parentNode, schema) {
8
37
  if (!schema.nodes['panel_c1'] || !expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true)) {
@@ -32,16 +61,21 @@ export var upgradePanelNodesToPanelC1 = function upgradePanelNodesToPanelC1(node
32
61
  * @param args.schema - The schema to use for the conversion
33
62
  * @param args.isNested - Whether the conversion is nested
34
63
  * @param args.targetAttrs - The attributes to use for the conversion
64
+ * @param args.marksToAdd - Block marks to add or replace on converted target nodes
65
+ * @param args.marksToRemove - Block marks to remove from converted target nodes
35
66
  * @param args.parentNode - The parent node of the selected node
36
67
  * @returns The converted list of nodes
37
68
  */
38
- export var convertNodesToTargetType = function convertNodesToTargetType(_ref) {
39
- var sourceNodes = _ref.sourceNodes,
40
- targetNodeType = _ref.targetNodeType,
41
- schema = _ref.schema,
42
- isNested = _ref.isNested,
43
- targetAttrs = _ref.targetAttrs,
44
- parentNode = _ref.parentNode;
69
+ export var convertNodesToTargetType = function convertNodesToTargetType(_ref3) {
70
+ var _steps$reduce;
71
+ var sourceNodes = _ref3.sourceNodes,
72
+ targetNodeType = _ref3.targetNodeType,
73
+ schema = _ref3.schema,
74
+ isNested = _ref3.isNested,
75
+ targetAttrs = _ref3.targetAttrs,
76
+ marksToAdd = _ref3.marksToAdd,
77
+ marksToRemove = _ref3.marksToRemove,
78
+ parentNode = _ref3.parentNode;
45
79
  var sourceNode = sourceNodes.at(0);
46
80
  if (!sourceNode) {
47
81
  return sourceNodes;
@@ -60,13 +94,23 @@ export var convertNodesToTargetType = function convertNodesToTargetType(_ref) {
60
94
  schema: schema,
61
95
  targetAttrs: targetAttrs
62
96
  };
63
- if (!steps || steps.length === 0) {
64
- return sourceNodes;
97
+ var shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
98
+ if (!shouldApplyTargetNodeMarkChanges) {
99
+ if (!steps || steps.length === 0) {
100
+ return sourceNodes;
101
+ }
102
+ var _resultNodes = steps.reduce(function (nodes, step) {
103
+ return step(nodes, context);
104
+ }, sourceNodes);
105
+ return upgradePanelNodesToPanelC1(_resultNodes, parentNode, schema);
65
106
  }
66
- var resultNodes = steps.reduce(function (nodes, step) {
107
+ var resultNodes = (_steps$reduce = steps === null || steps === void 0 ? void 0 : steps.reduce(function (nodes, step) {
67
108
  return step(nodes, context);
68
- }, sourceNodes);
69
- return upgradePanelNodesToPanelC1(resultNodes, parentNode, schema);
109
+ }, sourceNodes)) !== null && _steps$reduce !== void 0 ? _steps$reduce : sourceNodes;
110
+ var upgradedNodes = steps !== null && steps !== void 0 && steps.length ? upgradePanelNodesToPanelC1(resultNodes, parentNode, schema) : resultNodes;
111
+ return upgradedNodes.map(function (node) {
112
+ return _applyTargetNodeMarks(node, targetNodeType, marksToAdd, marksToRemove, schema);
113
+ });
70
114
  };
71
115
  export var isTransformDisabledBasedOnStepsConfig = function isTransformDisabledBasedOnStepsConfig(selectedNodeType, targetNodeType) {
72
116
  var steps = expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true) ? TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeType][targetNodeType] : TRANSFORMATION_MATRIX[selectedNodeType][targetNodeType];
@@ -21,6 +21,11 @@ export var transformNode = function transformNode(api, transformRegistry) {
21
21
  if (!preservedSelection) {
22
22
  return tr;
23
23
  }
24
+ var isSmallTextTransform = (metadata === null || metadata === void 0 ? void 0 : metadata.targetTypeName) === 'smallText';
25
+ var isTextFormattingTransform = ((metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd) !== undefined || (metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove) !== undefined) && isExperimentEnabled('platform_editor_block_menu_small_text');
26
+ if (isSmallTextTransform && !isTextFormattingTransform) {
27
+ return null;
28
+ }
24
29
  var analytics = createTransformAnalytics(api, tr, preservedSelection);
25
30
  if (isExperimentEnabled('platform_editor_block_menu_transform_extensions')) {
26
31
  var _expandSelectionToBlo = expandSelectionToBlockRange(preservedSelection),
@@ -97,6 +102,7 @@ export var transformNode = function transformNode(api, transformRegistry) {
97
102
  }
98
103
  var measureId = "transformNode_".concat(targetType.name, "_").concat(Date.now());
99
104
  startMeasure(measureId);
105
+ var docBeforeTransform = tr.doc;
100
106
  var nodes = tr.doc.type.schema.nodes;
101
107
  var _expandSelectionToBlo2 = expandSelectionToBlockRange(preservedSelection),
102
108
  $from = _expandSelectionToBlo2.$from,
@@ -115,6 +121,8 @@ export var transformNode = function transformNode(api, transformRegistry) {
115
121
  schema: tr.doc.type.schema,
116
122
  isNested: isNested,
117
123
  targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
124
+ marksToAdd: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToAdd : undefined,
125
+ marksToRemove: isTextFormattingTransform ? metadata === null || metadata === void 0 ? void 0 : metadata.marksToRemove : undefined,
118
126
  parentNode: selectedParent
119
127
  });
120
128
  var content = _resultNodes.length > 0 ? _resultNodes : sourceNodes;
@@ -152,6 +160,10 @@ export var transformNode = function transformNode(api, transformRegistry) {
152
160
  } else {
153
161
  tr.replaceWith(_sliceStart, $to.pos, content);
154
162
  }
163
+ if (isTextFormattingTransform && tr.doc.eq(docBeforeTransform)) {
164
+ stopMeasure(measureId);
165
+ return null;
166
+ }
155
167
  if (preservedSelection instanceof CellSelection) {
156
168
  var _insertedNode = tr.doc.nodeAt($from.pos);
157
169
  var isSelectable = _insertedNode && NodeSelection.isSelectable(_insertedNode);
@@ -176,7 +188,7 @@ export var transformNode = function transformNode(api, transformRegistry) {
176
188
  isSuggested: isSuggested,
177
189
  outputNodesCount: content.length,
178
190
  sourceNodes: sourceNodes,
179
- targetNodeType: targetType.name
191
+ targetNodeType: isSmallTextTransform ? 'smallText' : targetType.name
180
192
  });
181
193
  });
182
194
  } catch (error) {
@@ -6,7 +6,7 @@ import type { DecorationsPlugin } from '@atlaskit/editor-plugin-decorations';
6
6
  import type { SelectionPlugin } from '@atlaskit/editor-plugin-selection';
7
7
  import type { UserIntentPlugin } from '@atlaskit/editor-plugin-user-intent';
8
8
  import type { NodeType } from '@atlaskit/editor-prosemirror/model';
9
- import type { TransformInlineNodeMetadata, TransformNodeMetadata } from './editor-commands/types';
9
+ import type { TransformInlineNodeMetadata, TransformNodeMarkChanges, TransformNodeMetadata } from './editor-commands/types';
10
10
  export declare enum FLAG_ID {
11
11
  LINK_COPIED_TO_CLIPBOARD = "link-copied-to-clipboard"
12
12
  }
@@ -15,7 +15,7 @@ type TransformInlineNodeCommand = (metadata: TransformInlineNodeMetadata) => Edi
15
15
  export type BlockMenuPlugin = NextEditorPlugin<'blockMenu', {
16
16
  actions: {
17
17
  getBlockMenuComponents: () => Array<RegisterBlockMenuComponent>;
18
- isTransformOptionDisabled: (optionNodeTypeName: string, optionNodeTypeAttrs?: Record<string, unknown>) => boolean;
18
+ isTransformOptionDisabled: (optionNodeTypeName: string, optionNodeTypeAttrs?: Record<string, unknown>, targetNodeMarkChanges?: TransformNodeMarkChanges) => boolean;
19
19
  registerBlockMenuComponents: (blockMenuComponents: Array<RegisterBlockMenuComponent>) => void;
20
20
  registerBlockMenuTransforms: (transforms: readonly BlockTransformExtension[]) => () => void;
21
21
  };
@@ -1,13 +1,15 @@
1
1
  import type { Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
2
2
  import type { Selection } from '@atlaskit/editor-prosemirror/state';
3
3
  import type { NodeTypeName } from '../editor-commands/transform-node-utils/types';
4
+ import type { TransformNodeMarkChanges } from '../editor-commands/types';
4
5
  import type { BlockMenuTransformSourceRegistry } from './transformSourceRegistry';
5
6
  type TransformDisabledArgs = {
6
7
  selection: Selection;
8
+ targetNodeMarkChanges?: TransformNodeMarkChanges;
7
9
  targetNodeTypeAttrs?: Record<string, unknown>;
8
10
  targetNodeTypeName: string;
9
11
  transformRegistry?: Pick<BlockMenuTransformSourceRegistry, 'resolve'>;
10
12
  };
11
13
  export declare const canParentContainNodeType: (schema: Schema, selectedNodeTypeName: NodeTypeName, parentNode: PMNode, nodeTypeName: NodeTypeName, nodeTypeAttrs?: Record<string, unknown>) => boolean;
12
- export declare const isTransformToTargetDisabled: ({ selection, targetNodeTypeName, targetNodeTypeAttrs, transformRegistry, }: TransformDisabledArgs) => boolean;
14
+ export declare const isTransformToTargetDisabled: ({ selection, targetNodeTypeName, targetNodeTypeAttrs, targetNodeMarkChanges, transformRegistry, }: TransformDisabledArgs) => boolean;
13
15
  export {};
@@ -1,7 +1,9 @@
1
1
  import type { Node as PMNode, NodeType, Schema } from '@atlaskit/editor-prosemirror/model';
2
- import type { NodeTypeName } from './types';
2
+ import type { NodeTypeName, TargetNodeMarks } from './types';
3
3
  interface GetOutputNodesArgs {
4
4
  isNested: boolean;
5
+ marksToAdd?: TargetNodeMarks;
6
+ marksToRemove?: string[];
5
7
  parentNode?: PMNode;
6
8
  schema: Schema;
7
9
  sourceNodes: PMNode[];
@@ -21,9 +23,11 @@ export declare const upgradePanelNodesToPanelC1: (nodes: PMNode[], parentNode: P
21
23
  * @param args.schema - The schema to use for the conversion
22
24
  * @param args.isNested - Whether the conversion is nested
23
25
  * @param args.targetAttrs - The attributes to use for the conversion
26
+ * @param args.marksToAdd - Block marks to add or replace on converted target nodes
27
+ * @param args.marksToRemove - Block marks to remove from converted target nodes
24
28
  * @param args.parentNode - The parent node of the selected node
25
29
  * @returns The converted list of nodes
26
30
  */
27
- export declare const convertNodesToTargetType: ({ sourceNodes, targetNodeType, schema, isNested, targetAttrs, parentNode, }: GetOutputNodesArgs) => PMNode[];
31
+ export declare const convertNodesToTargetType: ({ sourceNodes, targetNodeType, schema, isNested, targetAttrs, marksToAdd, marksToRemove, parentNode, }: GetOutputNodesArgs) => PMNode[];
28
32
  export declare const isTransformDisabledBasedOnStepsConfig: (selectedNodeType: NodeTypeName, targetNodeType: NodeTypeName) => boolean;
29
33
  export {};
@@ -6,6 +6,7 @@ export declare const isNodeTypeName: (value: string) => value is NodeTypeName;
6
6
  export declare const toNodeTypeValue: (value?: string | null) => NodeTypeName | null;
7
7
  export declare const getNodeName: (nodes: PMNode[]) => string | undefined;
8
8
  export type TransformStep = (nodes: PMNode[], context: TransformStepContext) => PMNode[];
9
+ export type TargetNodeMarks = Record<string, Record<string, unknown>>;
9
10
  export interface TransformStepContext {
10
11
  fromNode: PMNode;
11
12
  schema: Schema;
@@ -1,7 +1,12 @@
1
1
  import type { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
2
2
  import type { Node } from '@atlaskit/editor-prosemirror/model';
3
- export type TransfromNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'blockquote' | 'expand' | 'layoutSection' | 'panel' | 'panel_c1' | 'codeBlock' | 'bulletList' | 'orderedList' | 'taskList' | 'decisionList';
4
- export type TransformNodeMetadata = {
3
+ import type { TargetNodeMarks } from './transform-node-utils/types';
4
+ export type TransformNodeMarkChanges = {
5
+ marksToAdd?: TargetNodeMarks;
6
+ marksToRemove?: string[];
7
+ };
8
+ export type TransfromNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'smallText' | 'blockquote' | 'expand' | 'layoutSection' | 'panel' | 'panel_c1' | 'codeBlock' | 'bulletList' | 'orderedList' | 'taskList' | 'decisionList';
9
+ export type TransformNodeMetadata = TransformNodeMarkChanges & {
5
10
  inputMethod: INPUT_METHOD.BLOCK_MENU;
6
11
  isSuggested?: boolean;
7
12
  targetAttrs?: Record<string, unknown>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-menu",
3
- "version": "16.0.8",
3
+ "version": "16.0.10",
4
4
  "description": "BlockMenu plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -37,7 +37,7 @@
37
37
  "@atlaskit/platform-feature-flags": "^2.2.0",
38
38
  "@atlaskit/primitives": "^22.5.0",
39
39
  "@atlaskit/prosemirror-history": "^1.2.0",
40
- "@atlaskit/tmp-editor-statsig": "^186.0.0",
40
+ "@atlaskit/tmp-editor-statsig": "^187.0.0",
41
41
  "@atlaskit/tokens": "^16.12.0",
42
42
  "@babel/runtime": "^7.0.0",
43
43
  "bind-event-listener": "^3.0.0",