@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 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 canParentContainNodeType = exports.canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs) {
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: (0, _expValEquals.expValEquals)('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'menu' : undefined,
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
- export const canParentContainNodeType = (schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs) => {
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: expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'menu' : undefined,
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
- export var canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs) {
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: expValEquals('platform_editor_enghealth_a11y_jan_fixes', 'isEnabled', true) ? 'menu' : undefined,
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>) => boolean;
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.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": "^205.0.0",
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.0.0",
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
  },