@atlaskit/editor-plugin-block-menu 20.0.0 → 20.0.2
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 +19 -0
- package/dist/cjs/editor-actions/isTransformToTargetDisabled.js +45 -2
- package/dist/cjs/editor-commands/transform-node-utils/steps/flattenListStep.js +5 -2
- package/dist/cjs/editor-commands/transform-node-utils/transform.js +2 -1
- package/dist/cjs/ui/block-menu.js +1 -2
- package/dist/es2019/editor-actions/isTransformToTargetDisabled.js +30 -2
- package/dist/es2019/editor-commands/transform-node-utils/steps/flattenListStep.js +5 -2
- package/dist/es2019/editor-commands/transform-node-utils/transform.js +2 -1
- package/dist/es2019/ui/block-menu.js +1 -2
- package/dist/esm/editor-actions/isTransformToTargetDisabled.js +45 -2
- package/dist/esm/editor-commands/transform-node-utils/steps/flattenListStep.js +5 -2
- package/dist/esm/editor-commands/transform-node-utils/transform.js +2 -1
- package/dist/esm/ui/block-menu.js +1 -2
- package/dist/types/editor-actions/isTransformToTargetDisabled.d.ts +2 -2
- package/dist/types/editor-commands/transform-node-utils/types.d.ts +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 20.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`202069bab1e36`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/202069bab1e36) -
|
|
8
|
+
Clean up the shipped `platform_editor_enghealth_a11y_jan_fixes` experiment. Toolbar dropdown items
|
|
9
|
+
now always render with `role="menuitem"` and without `aria-pressed`, the block menu always has
|
|
10
|
+
`role="menu"`, and show-diff deleted content always uses the a11y-fixed styles.
|
|
11
|
+
- [`9c5dee87aa66d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9c5dee87aa66d) -
|
|
12
|
+
Make Small text availability respect nested parent schemas and fix Small and Normal text
|
|
13
|
+
conversion for block task items behind the `platform_editor_block_menu_small_text` experiment.
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
16
|
+
## 20.0.1
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
|
|
3
22
|
## 20.0.0
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -8,11 +8,46 @@ exports.isTransformToTargetDisabled = exports.canParentContainNodeType = void 0;
|
|
|
8
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
9
|
var _selection = require("@atlaskit/editor-common/selection");
|
|
10
10
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
11
|
+
var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
|
|
11
12
|
var _transform = require("../editor-commands/transform-node-utils/transform");
|
|
12
13
|
var _types = require("../editor-commands/transform-node-utils/types");
|
|
13
14
|
var _utils = require("../editor-commands/transform-node-utils/utils");
|
|
14
15
|
var _transformSource = require("./transformSource");
|
|
15
|
-
var
|
|
16
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
17
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
18
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
19
|
+
var getTargetMarks = function getTargetMarks(schema, currentMarks, marksToAdd, marksToRemove) {
|
|
20
|
+
if (!marksToAdd && !marksToRemove) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
var targetMarks = currentMarks;
|
|
24
|
+
var _iterator = _createForOfIteratorHelper(marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []),
|
|
25
|
+
_step;
|
|
26
|
+
try {
|
|
27
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
28
|
+
var _name = _step.value;
|
|
29
|
+
var _markType = schema.marks[_name];
|
|
30
|
+
if (_markType) {
|
|
31
|
+
targetMarks = _markType.removeFromSet(targetMarks);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
} catch (err) {
|
|
35
|
+
_iterator.e(err);
|
|
36
|
+
} finally {
|
|
37
|
+
_iterator.f();
|
|
38
|
+
}
|
|
39
|
+
for (var _i = 0, _Object$entries = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}); _i < _Object$entries.length; _i++) {
|
|
40
|
+
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
41
|
+
name = _Object$entries$_i[0],
|
|
42
|
+
attrs = _Object$entries$_i[1];
|
|
43
|
+
var markType = schema.marks[name];
|
|
44
|
+
if (markType) {
|
|
45
|
+
targetMarks = markType.create(attrs).addToSet(markType.removeFromSet(targetMarks));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return targetMarks;
|
|
49
|
+
};
|
|
50
|
+
var canParentContainNodeType = exports.canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs, selectedNode, marksToAdd, marksToRemove) {
|
|
16
51
|
var adjustedNodeTypeName = (0, _utils.getTargetNodeTypeNameInContext)(nodeTypeName, true, parentNode, schema);
|
|
17
52
|
if (!adjustedNodeTypeName) {
|
|
18
53
|
return false;
|
|
@@ -24,6 +59,11 @@ var canParentContainNodeType = exports.canParentContainNodeType = function canPa
|
|
|
24
59
|
var node = schema.nodes[selectedNodeTypeName];
|
|
25
60
|
content = node.createAndFill();
|
|
26
61
|
}
|
|
62
|
+
if ((0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text') && selectedNode && (marksToAdd || marksToRemove)) {
|
|
63
|
+
var targetMarks = getTargetMarks(schema, selectedNode.marks, marksToAdd, marksToRemove);
|
|
64
|
+
var targetNode = nodeType.createAndFill(nodeTypeAttrs, content, targetMarks);
|
|
65
|
+
return Boolean(targetNode && parentNode.type.validContent(_model.Fragment.from(targetNode)));
|
|
66
|
+
}
|
|
27
67
|
return parentNode.type.validContent(_model.Fragment.from(nodeType.createAndFill(nodeTypeAttrs, content)));
|
|
28
68
|
};
|
|
29
69
|
var isHeadingToHeadingTransformEnabled = function isHeadingToHeadingTransformEnabled(selectedNode, targetNodeTypeAttrs) {
|
|
@@ -54,6 +94,9 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
|
|
|
54
94
|
return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
|
|
55
95
|
});
|
|
56
96
|
if (removesTargetMarks || addsOrReplacesTargetMarks) {
|
|
97
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
57
100
|
return true;
|
|
58
101
|
}
|
|
59
102
|
}
|
|
@@ -64,7 +107,7 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
|
|
|
64
107
|
if (selectedNodeTypeName === 'heading' && targetNodeTypeName === 'heading') {
|
|
65
108
|
return isHeadingToHeadingTransformEnabled(node, targetNodeTypeAttrs);
|
|
66
109
|
}
|
|
67
|
-
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs)) {
|
|
110
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
68
111
|
return false;
|
|
69
112
|
}
|
|
70
113
|
return true;
|
|
@@ -6,10 +6,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.flattenListStep = void 0;
|
|
7
7
|
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
8
8
|
var _nodeChecks = require("../nodeChecks");
|
|
9
|
-
var extractNestedLists = function extractNestedLists(node, schema) {
|
|
9
|
+
var extractNestedLists = function extractNestedLists(node, schema, includeBlockTaskItems) {
|
|
10
10
|
var items = [];
|
|
11
11
|
var paragraph = schema.nodes.paragraph;
|
|
12
12
|
var itemTypes = [schema.nodes.listItem, schema.nodes.taskItem, schema.nodes.decisionItem];
|
|
13
|
+
if (includeBlockTaskItems && schema.nodes.blockTaskItem) {
|
|
14
|
+
itemTypes.push(schema.nodes.blockTaskItem);
|
|
15
|
+
}
|
|
13
16
|
var _extract = function extract(currentNode) {
|
|
14
17
|
currentNode.forEach(function (child) {
|
|
15
18
|
if (itemTypes.some(function (type) {
|
|
@@ -79,7 +82,7 @@ var extractNestedLists = function extractNestedLists(node, schema) {
|
|
|
79
82
|
var flattenListStep = exports.flattenListStep = function flattenListStep(nodes, context) {
|
|
80
83
|
return nodes.map(function (node) {
|
|
81
84
|
if ((0, _nodeChecks.isListWithIndentation)(node.type.name, context.schema)) {
|
|
82
|
-
return node.copy(_model.Fragment.from(extractNestedLists(node, context.schema)));
|
|
85
|
+
return node.copy(_model.Fragment.from(extractNestedLists(node, context.schema, Boolean(context.includeBlockTaskItems))));
|
|
83
86
|
}
|
|
84
87
|
return node;
|
|
85
88
|
});
|
|
@@ -94,14 +94,15 @@ var convertNodesToTargetType = exports.convertNodesToTargetType = function conve
|
|
|
94
94
|
return sourceNodes;
|
|
95
95
|
}
|
|
96
96
|
var steps = (0, _expValEquals.expValEquals)('platform_editor_nest_table_in_panel', 'isEnabled', true) ? _TRANSFORMATION_MATRIX.TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeTypeName][targetNodeTypeName] : _TRANSFORMATION_MATRIX.TRANSFORMATION_MATRIX[selectedNodeTypeName][targetNodeTypeName];
|
|
97
|
+
var shouldApplyTargetNodeMarkChanges = (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
97
98
|
var context = {
|
|
98
99
|
// sourceNode is incorrect now - what to do here?
|
|
99
100
|
fromNode: sourceNode,
|
|
101
|
+
includeBlockTaskItems: shouldApplyTargetNodeMarkChanges,
|
|
100
102
|
targetNodeTypeName: targetNodeTypeName,
|
|
101
103
|
schema: schema,
|
|
102
104
|
targetAttrs: targetAttrs
|
|
103
105
|
};
|
|
104
|
-
var shouldApplyTargetNodeMarkChanges = (0, _isExperimentEnabled.isExperimentEnabled)('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
105
106
|
if (!shouldApplyTargetNodeMarkChanges) {
|
|
106
107
|
if (!steps || steps.length === 0) {
|
|
107
108
|
return sourceNodes;
|
|
@@ -28,7 +28,6 @@ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-ex
|
|
|
28
28
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
29
29
|
var _redo = require("@atlaskit/prosemirror-history/redo");
|
|
30
30
|
var _undo = require("@atlaskit/prosemirror-history/undo");
|
|
31
|
-
var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
|
|
32
31
|
var _blockMenuProvider = require("./block-menu-provider");
|
|
33
32
|
var _BlockMenuRenderer = require("./block-menu-renderer/BlockMenuRenderer");
|
|
34
33
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
@@ -159,7 +158,7 @@ var BlockMenuContent = function BlockMenuContent(_ref4) {
|
|
|
159
158
|
}
|
|
160
159
|
return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
161
160
|
testId: _blockMenu.BLOCK_MENU_TEST_ID,
|
|
162
|
-
role:
|
|
161
|
+
role: "menu",
|
|
163
162
|
ref: ref,
|
|
164
163
|
xcss: (0, _css.cx)(styles.base, styles.maxWidthStyles, styles.emptyMenuSectionStyles)
|
|
165
164
|
}, /*#__PURE__*/_react.default.createElement(_uiMenu.ArrowKeyNavigationProvider, {
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
2
2
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
+
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
3
4
|
import { isTransformDisabledBasedOnStepsConfig } from '../editor-commands/transform-node-utils/transform';
|
|
4
5
|
import { toNodeTypeValue } from '../editor-commands/transform-node-utils/types';
|
|
5
6
|
import { getBlockNodesInRange, getTargetNodeTypeNameInContext } from '../editor-commands/transform-node-utils/utils';
|
|
6
7
|
import { getSingleTransformSourceNode, isExtensionTransformSource } from './transformSource';
|
|
7
|
-
|
|
8
|
+
const getTargetMarks = (schema, currentMarks, marksToAdd, marksToRemove) => {
|
|
9
|
+
if (!marksToAdd && !marksToRemove) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
let targetMarks = currentMarks;
|
|
13
|
+
for (const name of marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []) {
|
|
14
|
+
const markType = schema.marks[name];
|
|
15
|
+
if (markType) {
|
|
16
|
+
targetMarks = markType.removeFromSet(targetMarks);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
for (const [name, attrs] of Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {})) {
|
|
20
|
+
const markType = schema.marks[name];
|
|
21
|
+
if (markType) {
|
|
22
|
+
targetMarks = markType.create(attrs).addToSet(markType.removeFromSet(targetMarks));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return targetMarks;
|
|
26
|
+
};
|
|
27
|
+
export const canParentContainNodeType = (schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs, selectedNode, marksToAdd, marksToRemove) => {
|
|
8
28
|
const adjustedNodeTypeName = getTargetNodeTypeNameInContext(nodeTypeName, true, parentNode, schema);
|
|
9
29
|
if (!adjustedNodeTypeName) {
|
|
10
30
|
return false;
|
|
@@ -16,6 +36,11 @@ export const canParentContainNodeType = (schema, selectedNodeTypeName, parentNod
|
|
|
16
36
|
const node = schema.nodes[selectedNodeTypeName];
|
|
17
37
|
content = node.createAndFill();
|
|
18
38
|
}
|
|
39
|
+
if (isExperimentEnabled('platform_editor_block_menu_small_text') && selectedNode && (marksToAdd || marksToRemove)) {
|
|
40
|
+
const targetMarks = getTargetMarks(schema, selectedNode.marks, marksToAdd, marksToRemove);
|
|
41
|
+
const targetNode = nodeType.createAndFill(nodeTypeAttrs, content, targetMarks);
|
|
42
|
+
return Boolean(targetNode && parentNode.type.validContent(Fragment.from(targetNode)));
|
|
43
|
+
}
|
|
19
44
|
return parentNode.type.validContent(Fragment.from(nodeType.createAndFill(nodeTypeAttrs, content)));
|
|
20
45
|
};
|
|
21
46
|
const isHeadingToHeadingTransformEnabled = (selectedNode, targetNodeTypeAttrs) => {
|
|
@@ -43,6 +68,9 @@ const isTransformEnabledForNode = (node, targetNodeTypeName, targetNodeTypeAttrs
|
|
|
43
68
|
return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
|
|
44
69
|
});
|
|
45
70
|
if (removesTargetMarks || addsOrReplacesTargetMarks) {
|
|
71
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
46
74
|
return true;
|
|
47
75
|
}
|
|
48
76
|
}
|
|
@@ -53,7 +81,7 @@ const isTransformEnabledForNode = (node, targetNodeTypeName, targetNodeTypeAttrs
|
|
|
53
81
|
if (selectedNodeTypeName === 'heading' && targetNodeTypeName === 'heading') {
|
|
54
82
|
return isHeadingToHeadingTransformEnabled(node, targetNodeTypeAttrs);
|
|
55
83
|
}
|
|
56
|
-
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs)) {
|
|
84
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
57
85
|
return false;
|
|
58
86
|
}
|
|
59
87
|
return true;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
2
|
import { isListWithIndentation } from '../nodeChecks';
|
|
3
|
-
const extractNestedLists = (node, schema) => {
|
|
3
|
+
const extractNestedLists = (node, schema, includeBlockTaskItems) => {
|
|
4
4
|
const items = [];
|
|
5
5
|
const paragraph = schema.nodes.paragraph;
|
|
6
6
|
const itemTypes = [schema.nodes.listItem, schema.nodes.taskItem, schema.nodes.decisionItem];
|
|
7
|
+
if (includeBlockTaskItems && schema.nodes.blockTaskItem) {
|
|
8
|
+
itemTypes.push(schema.nodes.blockTaskItem);
|
|
9
|
+
}
|
|
7
10
|
const extract = currentNode => {
|
|
8
11
|
currentNode.forEach(child => {
|
|
9
12
|
if (itemTypes.some(type => child.type === type)) {
|
|
@@ -71,7 +74,7 @@ const extractNestedLists = (node, schema) => {
|
|
|
71
74
|
export const flattenListStep = (nodes, context) => {
|
|
72
75
|
return nodes.map(node => {
|
|
73
76
|
if (isListWithIndentation(node.type.name, context.schema)) {
|
|
74
|
-
return node.copy(Fragment.from(extractNestedLists(node, context.schema)));
|
|
77
|
+
return node.copy(Fragment.from(extractNestedLists(node, context.schema, Boolean(context.includeBlockTaskItems))));
|
|
75
78
|
}
|
|
76
79
|
return node;
|
|
77
80
|
});
|
|
@@ -82,14 +82,15 @@ export const convertNodesToTargetType = ({
|
|
|
82
82
|
return sourceNodes;
|
|
83
83
|
}
|
|
84
84
|
const steps = expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true) ? TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeTypeName][targetNodeTypeName] : TRANSFORMATION_MATRIX[selectedNodeTypeName][targetNodeTypeName];
|
|
85
|
+
const shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
85
86
|
const context = {
|
|
86
87
|
// sourceNode is incorrect now - what to do here?
|
|
87
88
|
fromNode: sourceNode,
|
|
89
|
+
includeBlockTaskItems: shouldApplyTargetNodeMarkChanges,
|
|
88
90
|
targetNodeTypeName,
|
|
89
91
|
schema,
|
|
90
92
|
targetAttrs
|
|
91
93
|
};
|
|
92
|
-
const shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
93
94
|
if (!shouldApplyTargetNodeMarkChanges) {
|
|
94
95
|
if (!steps || steps.length === 0) {
|
|
95
96
|
return sourceNodes;
|
|
@@ -19,7 +19,6 @@ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-e
|
|
|
19
19
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
20
20
|
import { redo } from '@atlaskit/prosemirror-history/redo';
|
|
21
21
|
import { undo } from '@atlaskit/prosemirror-history/undo';
|
|
22
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
23
22
|
import { useBlockMenu } from './block-menu-provider';
|
|
24
23
|
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
25
24
|
const styles = {
|
|
@@ -148,7 +147,7 @@ const BlockMenuContent = ({
|
|
|
148
147
|
}
|
|
149
148
|
return /*#__PURE__*/React.createElement(Box, {
|
|
150
149
|
testId: BLOCK_MENU_TEST_ID,
|
|
151
|
-
role:
|
|
150
|
+
role: "menu",
|
|
152
151
|
ref: ref,
|
|
153
152
|
xcss: cx(styles.base, styles.maxWidthStyles, styles.emptyMenuSectionStyles)
|
|
154
153
|
}, /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider, {
|
|
@@ -1,11 +1,46 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
3
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
4
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
2
5
|
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
3
6
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
7
|
+
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
|
|
4
8
|
import { isTransformDisabledBasedOnStepsConfig } from '../editor-commands/transform-node-utils/transform';
|
|
5
9
|
import { toNodeTypeValue } from '../editor-commands/transform-node-utils/types';
|
|
6
10
|
import { getBlockNodesInRange, getTargetNodeTypeNameInContext } from '../editor-commands/transform-node-utils/utils';
|
|
7
11
|
import { getSingleTransformSourceNode, isExtensionTransformSource } from './transformSource';
|
|
8
|
-
|
|
12
|
+
var getTargetMarks = function getTargetMarks(schema, currentMarks, marksToAdd, marksToRemove) {
|
|
13
|
+
if (!marksToAdd && !marksToRemove) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
var targetMarks = currentMarks;
|
|
17
|
+
var _iterator = _createForOfIteratorHelper(marksToRemove !== null && marksToRemove !== void 0 ? marksToRemove : []),
|
|
18
|
+
_step;
|
|
19
|
+
try {
|
|
20
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
21
|
+
var _name = _step.value;
|
|
22
|
+
var _markType = schema.marks[_name];
|
|
23
|
+
if (_markType) {
|
|
24
|
+
targetMarks = _markType.removeFromSet(targetMarks);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
} catch (err) {
|
|
28
|
+
_iterator.e(err);
|
|
29
|
+
} finally {
|
|
30
|
+
_iterator.f();
|
|
31
|
+
}
|
|
32
|
+
for (var _i = 0, _Object$entries = Object.entries(marksToAdd !== null && marksToAdd !== void 0 ? marksToAdd : {}); _i < _Object$entries.length; _i++) {
|
|
33
|
+
var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
|
|
34
|
+
name = _Object$entries$_i[0],
|
|
35
|
+
attrs = _Object$entries$_i[1];
|
|
36
|
+
var markType = schema.marks[name];
|
|
37
|
+
if (markType) {
|
|
38
|
+
targetMarks = markType.create(attrs).addToSet(markType.removeFromSet(targetMarks));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return targetMarks;
|
|
42
|
+
};
|
|
43
|
+
export var canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs, selectedNode, marksToAdd, marksToRemove) {
|
|
9
44
|
var adjustedNodeTypeName = getTargetNodeTypeNameInContext(nodeTypeName, true, parentNode, schema);
|
|
10
45
|
if (!adjustedNodeTypeName) {
|
|
11
46
|
return false;
|
|
@@ -17,6 +52,11 @@ export var canParentContainNodeType = function canParentContainNodeType(schema,
|
|
|
17
52
|
var node = schema.nodes[selectedNodeTypeName];
|
|
18
53
|
content = node.createAndFill();
|
|
19
54
|
}
|
|
55
|
+
if (isExperimentEnabled('platform_editor_block_menu_small_text') && selectedNode && (marksToAdd || marksToRemove)) {
|
|
56
|
+
var targetMarks = getTargetMarks(schema, selectedNode.marks, marksToAdd, marksToRemove);
|
|
57
|
+
var targetNode = nodeType.createAndFill(nodeTypeAttrs, content, targetMarks);
|
|
58
|
+
return Boolean(targetNode && parentNode.type.validContent(Fragment.from(targetNode)));
|
|
59
|
+
}
|
|
20
60
|
return parentNode.type.validContent(Fragment.from(nodeType.createAndFill(nodeTypeAttrs, content)));
|
|
21
61
|
};
|
|
22
62
|
var isHeadingToHeadingTransformEnabled = function isHeadingToHeadingTransformEnabled(selectedNode, targetNodeTypeAttrs) {
|
|
@@ -47,6 +87,9 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
|
|
|
47
87
|
return markType ? !((_markType$isInSet = markType.isInSet(node.marks)) !== null && _markType$isInSet !== void 0 && _markType$isInSet.eq(markType.create(attrs))) : false;
|
|
48
88
|
});
|
|
49
89
|
if (removesTargetMarks || addsOrReplacesTargetMarks) {
|
|
90
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
50
93
|
return true;
|
|
51
94
|
}
|
|
52
95
|
}
|
|
@@ -57,7 +100,7 @@ var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetN
|
|
|
57
100
|
if (selectedNodeTypeName === 'heading' && targetNodeTypeName === 'heading') {
|
|
58
101
|
return isHeadingToHeadingTransformEnabled(node, targetNodeTypeAttrs);
|
|
59
102
|
}
|
|
60
|
-
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs)) {
|
|
103
|
+
if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs, node, marksToAdd, marksToRemove)) {
|
|
61
104
|
return false;
|
|
62
105
|
}
|
|
63
106
|
return true;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
2
2
|
import { isListWithIndentation } from '../nodeChecks';
|
|
3
|
-
var extractNestedLists = function extractNestedLists(node, schema) {
|
|
3
|
+
var extractNestedLists = function extractNestedLists(node, schema, includeBlockTaskItems) {
|
|
4
4
|
var items = [];
|
|
5
5
|
var paragraph = schema.nodes.paragraph;
|
|
6
6
|
var itemTypes = [schema.nodes.listItem, schema.nodes.taskItem, schema.nodes.decisionItem];
|
|
7
|
+
if (includeBlockTaskItems && schema.nodes.blockTaskItem) {
|
|
8
|
+
itemTypes.push(schema.nodes.blockTaskItem);
|
|
9
|
+
}
|
|
7
10
|
var _extract = function extract(currentNode) {
|
|
8
11
|
currentNode.forEach(function (child) {
|
|
9
12
|
if (itemTypes.some(function (type) {
|
|
@@ -73,7 +76,7 @@ var extractNestedLists = function extractNestedLists(node, schema) {
|
|
|
73
76
|
export var flattenListStep = function flattenListStep(nodes, context) {
|
|
74
77
|
return nodes.map(function (node) {
|
|
75
78
|
if (isListWithIndentation(node.type.name, context.schema)) {
|
|
76
|
-
return node.copy(Fragment.from(extractNestedLists(node, context.schema)));
|
|
79
|
+
return node.copy(Fragment.from(extractNestedLists(node, context.schema, Boolean(context.includeBlockTaskItems))));
|
|
77
80
|
}
|
|
78
81
|
return node;
|
|
79
82
|
});
|
|
@@ -87,14 +87,15 @@ export var convertNodesToTargetType = function convertNodesToTargetType(_ref3) {
|
|
|
87
87
|
return sourceNodes;
|
|
88
88
|
}
|
|
89
89
|
var steps = expValEquals('platform_editor_nest_table_in_panel', 'isEnabled', true) ? TRANSFORMATION_MATRIX_PANEL_C1[selectedNodeTypeName][targetNodeTypeName] : TRANSFORMATION_MATRIX[selectedNodeTypeName][targetNodeTypeName];
|
|
90
|
+
var shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
90
91
|
var context = {
|
|
91
92
|
// sourceNode is incorrect now - what to do here?
|
|
92
93
|
fromNode: sourceNode,
|
|
94
|
+
includeBlockTaskItems: shouldApplyTargetNodeMarkChanges,
|
|
93
95
|
targetNodeTypeName: targetNodeTypeName,
|
|
94
96
|
schema: schema,
|
|
95
97
|
targetAttrs: targetAttrs
|
|
96
98
|
};
|
|
97
|
-
var shouldApplyTargetNodeMarkChanges = isExperimentEnabled('platform_editor_block_menu_small_text') && Boolean(marksToAdd || marksToRemove);
|
|
98
99
|
if (!shouldApplyTargetNodeMarkChanges) {
|
|
99
100
|
if (!steps || steps.length === 0) {
|
|
100
101
|
return sourceNodes;
|
|
@@ -20,7 +20,6 @@ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-e
|
|
|
20
20
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
21
21
|
import { redo } from '@atlaskit/prosemirror-history/redo';
|
|
22
22
|
import { undo } from '@atlaskit/prosemirror-history/undo';
|
|
23
|
-
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
24
23
|
import { useBlockMenu } from './block-menu-provider';
|
|
25
24
|
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
26
25
|
var styles = {
|
|
@@ -150,7 +149,7 @@ var BlockMenuContent = function BlockMenuContent(_ref4) {
|
|
|
150
149
|
}
|
|
151
150
|
return /*#__PURE__*/React.createElement(Box, {
|
|
152
151
|
testId: BLOCK_MENU_TEST_ID,
|
|
153
|
-
role:
|
|
152
|
+
role: "menu",
|
|
154
153
|
ref: ref,
|
|
155
154
|
xcss: cx(styles.base, styles.maxWidthStyles, styles.emptyMenuSectionStyles)
|
|
156
155
|
}, /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
|
|
2
2
|
import type { Selection } from '@atlaskit/editor-prosemirror/state';
|
|
3
|
-
import type { NodeTypeName } from '../editor-commands/transform-node-utils/types';
|
|
3
|
+
import type { NodeTypeName, TargetNodeMarks } from '../editor-commands/transform-node-utils/types';
|
|
4
4
|
import type { TransformNodeMarkChanges } from '../editor-commands/types';
|
|
5
5
|
import type { BlockMenuTransformSourceRegistry } from './transformSourceRegistry';
|
|
6
6
|
type TransformDisabledArgs = {
|
|
@@ -10,6 +10,6 @@ type TransformDisabledArgs = {
|
|
|
10
10
|
targetNodeTypeName: string;
|
|
11
11
|
transformRegistry?: Pick<BlockMenuTransformSourceRegistry, 'resolve'>;
|
|
12
12
|
};
|
|
13
|
-
export declare const canParentContainNodeType: (schema: Schema, selectedNodeTypeName: NodeTypeName, parentNode: PMNode, nodeTypeName: NodeTypeName, nodeTypeAttrs?: Record<string, unknown
|
|
13
|
+
export declare const canParentContainNodeType: (schema: Schema, selectedNodeTypeName: NodeTypeName, parentNode: PMNode, nodeTypeName: NodeTypeName, nodeTypeAttrs?: Record<string, unknown>, selectedNode?: PMNode, marksToAdd?: TargetNodeMarks, marksToRemove?: string[]) => boolean;
|
|
14
14
|
export declare const isTransformToTargetDisabled: ({ selection, targetNodeTypeName, targetNodeTypeAttrs, targetNodeMarkChanges, transformRegistry, }: TransformDisabledArgs) => boolean;
|
|
15
15
|
export {};
|
|
@@ -9,6 +9,7 @@ export type TransformStep = (nodes: PMNode[], context: TransformStepContext) =>
|
|
|
9
9
|
export type TargetNodeMarks = Record<string, Record<string, unknown>>;
|
|
10
10
|
export interface TransformStepContext {
|
|
11
11
|
fromNode: PMNode;
|
|
12
|
+
includeBlockTaskItems?: boolean;
|
|
12
13
|
schema: Schema;
|
|
13
14
|
targetAttrs?: Record<string, unknown>;
|
|
14
15
|
targetNodeTypeName: NodeTypeName;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-block-menu",
|
|
3
|
-
"version": "20.0.
|
|
3
|
+
"version": "20.0.2",
|
|
4
4
|
"description": "BlockMenu plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"@atlaskit/platform-feature-flags": "^2.2.0",
|
|
43
43
|
"@atlaskit/primitives": "^22.5.0",
|
|
44
44
|
"@atlaskit/prosemirror-history": "^1.2.0",
|
|
45
|
-
"@atlaskit/tmp-editor-statsig": "^
|
|
45
|
+
"@atlaskit/tmp-editor-statsig": "^207.0.0",
|
|
46
46
|
"@atlaskit/tokens": "^20.0.0",
|
|
47
47
|
"@babel/runtime": "^7.0.0",
|
|
48
48
|
"bind-event-listener": "^3.0.0",
|
|
49
49
|
"memoize-one": "^6.0.0"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@atlaskit/editor-common": "^125.
|
|
52
|
+
"@atlaskit/editor-common": "^125.2.0",
|
|
53
53
|
"react": "^18.2.0 || ^19.2.0",
|
|
54
54
|
"react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
|
|
55
55
|
},
|