@atlaskit/editor-plugin-block-menu 16.0.7 → 16.0.9
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 +14 -0
- package/dist/cjs/blockMenuPlugin.js +2 -1
- package/dist/cjs/editor-actions/isTransformToTargetDisabled.js +30 -7
- package/dist/cjs/editor-commands/transform-node-utils/transform.js +57 -12
- package/dist/cjs/editor-commands/transformNode.js +13 -1
- package/dist/es2019/blockMenuPlugin.js +2 -1
- package/dist/es2019/editor-actions/isTransformToTargetDisabled.js +21 -2
- package/dist/es2019/editor-commands/transform-node-utils/transform.js +38 -6
- package/dist/es2019/editor-commands/transformNode.js +13 -1
- package/dist/esm/blockMenuPlugin.js +2 -1
- package/dist/esm/editor-actions/isTransformToTargetDisabled.js +29 -7
- package/dist/esm/editor-commands/transform-node-utils/transform.js +56 -12
- package/dist/esm/editor-commands/transformNode.js +13 -1
- package/dist/types/blockMenuPluginType.d.ts +2 -2
- package/dist/types/editor-actions/isTransformToTargetDisabled.d.ts +3 -1
- package/dist/types/editor-commands/transform-node-utils/transform.d.ts +6 -2
- package/dist/types/editor-commands/transform-node-utils/types.d.ts +1 -0
- package/dist/types/editor-commands/types.d.ts +7 -2
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 16.0.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`61a147bcf836c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/61a147bcf836c) -
|
|
8
|
+
Support Small text and Normal text transformations from the block menu by reusing the Paragraph
|
|
9
|
+
conversion with target block marks.
|
|
10
|
+
|
|
11
|
+
## 16.0.8
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
|
|
3
17
|
## 16.0.7
|
|
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(
|
|
55
|
-
var selection =
|
|
56
|
-
targetNodeTypeName =
|
|
57
|
-
targetNodeTypeAttrs =
|
|
58
|
-
|
|
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(
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
65
|
-
|
|
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
|
-
|
|
69
|
-
|
|
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(
|
|
49
|
-
var selection =
|
|
50
|
-
targetNodeTypeName =
|
|
51
|
-
targetNodeTypeAttrs =
|
|
52
|
-
|
|
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(
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
4
|
-
export type
|
|
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.
|
|
3
|
+
"version": "16.0.9",
|
|
4
4
|
"description": "BlockMenu plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"@atlaskit/browser-apis": "^1.2.0",
|
|
24
24
|
"@atlaskit/css": "^1.1.0",
|
|
25
25
|
"@atlaskit/editor-plugin-analytics": "^17.0.0",
|
|
26
|
-
"@atlaskit/editor-plugin-block-controls": "^18.
|
|
26
|
+
"@atlaskit/editor-plugin-block-controls": "^18.3.0",
|
|
27
27
|
"@atlaskit/editor-plugin-decorations": "^17.0.0",
|
|
28
28
|
"@atlaskit/editor-plugin-selection": "^17.0.0",
|
|
29
29
|
"@atlaskit/editor-plugin-user-intent": "^15.0.0",
|
|
30
30
|
"@atlaskit/editor-prosemirror": "^8.0.0",
|
|
31
|
-
"@atlaskit/editor-shared-styles": "^4.
|
|
31
|
+
"@atlaskit/editor-shared-styles": "^4.2.0",
|
|
32
32
|
"@atlaskit/editor-tables": "^3.2.0",
|
|
33
33
|
"@atlaskit/editor-toolbar": "^2.6.0",
|
|
34
34
|
"@atlaskit/flag": "^18.5.0",
|
|
@@ -37,14 +37,14 @@
|
|
|
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": "^
|
|
41
|
-
"@atlaskit/tokens": "^16.
|
|
40
|
+
"@atlaskit/tmp-editor-statsig": "^186.0.0",
|
|
41
|
+
"@atlaskit/tokens": "^16.12.0",
|
|
42
42
|
"@babel/runtime": "^7.0.0",
|
|
43
43
|
"bind-event-listener": "^3.0.0",
|
|
44
44
|
"memoize-one": "^6.0.0"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@atlaskit/editor-common": "^121.
|
|
47
|
+
"@atlaskit/editor-common": "^121.4.0",
|
|
48
48
|
"react": "^18.2.0 || ^19.2.0",
|
|
49
49
|
"react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
|
|
50
50
|
},
|