@atlaskit/editor-plugin-block-menu 3.0.2 → 3.1.1

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/editor-commands/transforms/layout/utils.js +33 -19
  3. package/dist/cjs/editor-commands/transforms/layout-transforms.js +1 -1
  4. package/dist/cjs/editor-commands/transforms/list-transforms.js +5 -52
  5. package/dist/cjs/editor-commands/transforms/utils.js +3 -14
  6. package/dist/cjs/ui/block-menu.js +1 -1
  7. package/dist/es2019/editor-commands/transforms/layout/utils.js +25 -11
  8. package/dist/es2019/editor-commands/transforms/layout-transforms.js +1 -1
  9. package/dist/es2019/editor-commands/transforms/list-transforms.js +3 -54
  10. package/dist/es2019/editor-commands/transforms/utils.js +2 -13
  11. package/dist/es2019/ui/block-menu.js +1 -1
  12. package/dist/esm/editor-commands/transforms/layout/utils.js +27 -13
  13. package/dist/esm/editor-commands/transforms/layout-transforms.js +1 -1
  14. package/dist/esm/editor-commands/transforms/list-transforms.js +3 -50
  15. package/dist/esm/editor-commands/transforms/utils.js +2 -13
  16. package/dist/esm/ui/block-menu.js +1 -1
  17. package/dist/types/editor-commands/transforms/container-transforms.d.ts +2 -1
  18. package/dist/types/editor-commands/transforms/layout/utils.d.ts +2 -2
  19. package/dist/types/editor-commands/transforms/layout-transforms.d.ts +1 -1
  20. package/dist/types/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +1 -1
  21. package/dist/types/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +1 -1
  22. package/dist/types/editor-commands/transforms/list-transforms.d.ts +2 -5
  23. package/dist/types/editor-commands/transforms/types.d.ts +1 -8
  24. package/dist/types/editor-commands/transforms/utils.d.ts +0 -4
  25. package/dist/types-ts4.5/editor-commands/transforms/container-transforms.d.ts +2 -1
  26. package/dist/types-ts4.5/editor-commands/transforms/layout/utils.d.ts +2 -2
  27. package/dist/types-ts4.5/editor-commands/transforms/layout-transforms.d.ts +1 -1
  28. package/dist/types-ts4.5/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +1 -1
  29. package/dist/types-ts4.5/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +1 -1
  30. package/dist/types-ts4.5/editor-commands/transforms/list-transforms.d.ts +2 -5
  31. package/dist/types-ts4.5/editor-commands/transforms/types.d.ts +1 -8
  32. package/dist/types-ts4.5/editor-commands/transforms/utils.d.ts +0 -4
  33. package/package.json +3 -3
  34. package/dist/cjs/editor-commands/transforms/list/transformBetweenListTypes.js +0 -138
  35. package/dist/es2019/editor-commands/transforms/list/transformBetweenListTypes.js +0 -140
  36. package/dist/esm/editor-commands/transforms/list/transformBetweenListTypes.js +0 -133
  37. package/dist/types/editor-commands/transforms/list/transformBetweenListTypes.d.ts +0 -18
  38. package/dist/types-ts4.5/editor-commands/transforms/list/transformBetweenListTypes.d.ts +0 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/editor-plugin-block-menu
2
2
 
3
+ ## 3.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`c30d1876a650a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c30d1876a650a) -
8
+ ED-29256 Transform content with indentation in layouts
9
+ - Updated dependencies
10
+
11
+ ## 3.1.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [`cebd8f9171426`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cebd8f9171426) -
16
+ [ux] ED-29159 Implement transform task inside lists - handle logic
17
+
18
+ ### Patch Changes
19
+
20
+ - Updated dependencies
21
+
3
22
  ## 3.0.2
4
23
 
5
24
  ### Patch Changes
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.unwrapLayoutNodesToTextNodes = exports.transformToListNode = exports.convertUnwrappedLayoutContent = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _transforms = require("@atlaskit/editor-common/transforms");
9
10
  var _model = require("@atlaskit/editor-prosemirror/model");
10
11
  var _utils = require("@atlaskit/editor-prosemirror/utils");
11
12
  var _inlineNodeTransforms = require("../inline-node-transforms");
12
- var _transformBetweenListTypes = require("../list/transformBetweenListTypes");
13
13
  var _utils2 = require("../utils");
14
14
  var unwrapLayoutNodesToTextNodes = exports.unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(context, finalTargetNodeType) {
15
15
  var tr = context.tr,
@@ -20,10 +20,16 @@ var unwrapLayoutNodesToTextNodes = exports.unwrapLayoutNodesToTextNodes = functi
20
20
  var isValid = (0, _utils2.getContentSupportChecker)(finalTargetNodeType);
21
21
  var createTextNode = function createTextNode(node) {
22
22
  var isTextNode = node.type.name === 'text';
23
- if (isValid(node) && !isTextNode) {
24
- return node;
23
+ var nodeToTransform = node;
24
+ if ((0, _utils2.isContainerNodeType)(finalTargetNodeType) || (0, _utils2.isListNodeType)(finalTargetNodeType)) {
25
+ nodeToTransform = node.mark(node.marks.filter(function (mark) {
26
+ return !['alignment', 'indentation'].includes(mark.type.name);
27
+ }));
25
28
  }
26
- return targetNodeType.createChecked(targetAttrs, isTextNode ? node : node.content, node.marks);
29
+ if (isValid(nodeToTransform) && !isTextNode) {
30
+ return nodeToTransform;
31
+ }
32
+ return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
27
33
  };
28
34
  if ((0, _utils2.isBlockNode)(sourceNode)) {
29
35
  // code block acts like a container, we need to unwrap it
@@ -190,21 +196,17 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
190
196
  canBeTransformed: false
191
197
  });
192
198
  } else {
193
- // Remove alignment marks as container nodes don't support them
194
- var nodeWithValidAttrs = node.mark(node.marks.filter(function (mark) {
195
- return mark.type.name !== 'alignment';
196
- }));
197
199
  var isSameNodeType = node.type === targetNodeType;
198
200
 
199
201
  // If the node is not valid and not the same type, we cannot transform it
200
- if (!isNodeValid(nodeWithValidAttrs) && !isSameNodeType) {
202
+ if (!isNodeValid(node) && !isSameNodeType) {
201
203
  newNodes.push({
202
204
  node: node,
203
205
  canBeTransformed: false
204
206
  });
205
207
  return;
206
208
  }
207
- var _nodes = isSameNodeType ? node.content.content : [nodeWithValidAttrs];
209
+ var _nodes = isSameNodeType ? node.content.content : [node];
208
210
  if (newNodes.length === 0) {
209
211
  newNodes.push({
210
212
  node: _nodes,
@@ -237,7 +239,7 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
237
239
  });
238
240
  };
239
241
  var transformToListNode = exports.transformToListNode = function transformToListNode(nodes, targetNodeType, schema) {
240
- var isTargetTask = (0, _utils2.isTaskList)(targetNodeType);
242
+ var isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
241
243
  var listItems = [];
242
244
  var listItemType = isTargetTask ? schema.nodes.taskItem : schema.nodes.listItem;
243
245
  var isValid = (0, _utils2.getContentSupportChecker)(listItemType);
@@ -253,16 +255,16 @@ var transformToListNode = exports.transformToListNode = function transformToList
253
255
 
254
256
  // If the node is a list, we may need to transform it
255
257
  if ((0, _utils2.isListNode)(node)) {
256
- var isSourceBulletOrOrdered = (0, _utils2.isBulletOrOrderedList)(node.type);
257
- var _isTargetTask = (0, _utils2.isTaskList)(targetNodeType);
258
- var isSourceTask = (0, _utils2.isTaskList)(node.type);
259
- var isTargetBulletOrOrdered = (0, _utils2.isBulletOrOrderedList)(targetNodeType);
260
- var supportedListTypes = (0, _utils2.getSupportedListTypesSet)(schema.nodes);
258
+ var isSourceBulletOrOrdered = (0, _transforms.isBulletOrOrderedList)(node.type);
259
+ var _isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
260
+ var isSourceTask = (0, _transforms.isTaskList)(node.type);
261
+ var isTargetBulletOrOrdered = (0, _transforms.isBulletOrOrderedList)(targetNodeType);
262
+ var supportedListTypes = (0, _transforms.getSupportedListTypesSet)(schema.nodes);
261
263
  if (node.type === targetNodeType) {
262
264
  // For the same list type, we can keep the structure
263
265
  newListItems = node.content.content;
264
266
  } else {
265
- var newList = (0, _transformBetweenListTypes.transformListRecursively)({
267
+ var newList = (0, _transforms.transformListRecursively)({
266
268
  isSourceBulletOrOrdered: isSourceBulletOrOrdered,
267
269
  isSourceTask: isSourceTask,
268
270
  isTargetBulletOrOrdered: isTargetBulletOrOrdered,
@@ -322,8 +324,20 @@ var transformToListNode = exports.transformToListNode = function transformToList
322
324
  }
323
325
  });
324
326
  };
325
- var convertUnwrappedLayoutContent = exports.convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema) {
326
- if (nodes.length === 1 && nodes[0].content.size === 0) {
327
+ var convertUnwrappedLayoutContent = exports.convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema, targetAttrs) {
328
+ if (nodes.length === 1 && nodes[0].content.size === 0 && !(0, _utils2.isContainerNodeType)(targetNodeType)) {
329
+ if ((0, _utils2.isBlockNodeType)(targetNodeType)) {
330
+ if (['heading', 'paragraph'].includes(targetNodeType.name)) {
331
+ return [targetNodeType.createChecked(targetAttrs)];
332
+ }
333
+ if (targetNodeType.name === 'codeBlock') {
334
+ return [targetNodeType.createChecked()];
335
+ }
336
+ }
337
+ if ((0, _utils2.isListNodeType)(targetNodeType)) {
338
+ var listItem = (0, _transforms.isTaskList)(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
339
+ return [targetNodeType.createChecked(null, listItem)];
340
+ }
327
341
  return nodes;
328
342
  }
329
343
  if ((0, _utils2.isBlockNodeType)(targetNodeType)) {
@@ -60,7 +60,7 @@ var transformLayoutNode = exports.transformLayoutNode = function transformLayout
60
60
  var newContent = (0, _utils.unwrapLayoutNodesToTextNodes)(context, targetNodeType);
61
61
  unwrappedContent.push.apply(unwrappedContent, (0, _toConsumableArray2.default)(newContent));
62
62
  });
63
- var newColumnContent = (0, _utils.convertUnwrappedLayoutContent)(unwrappedContent, targetNodeType, schema);
63
+ var newColumnContent = (0, _utils.convertUnwrappedLayoutContent)(unwrappedContent, targetNodeType, schema, targetAttrs);
64
64
  layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, _model.Fragment.fromArray(newColumnContent), child.marks));
65
65
  }
66
66
  });
@@ -4,11 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.transformListToContainer = exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.transformBetweenListTypes = exports.liftListToBlockType = void 0;
7
+ exports.transformListToContainer = exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.liftListToBlockType = void 0;
8
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _transforms = require("@atlaskit/editor-common/transforms");
9
10
  var _model = require("@atlaskit/editor-prosemirror/model");
10
11
  var _transform = require("@atlaskit/editor-prosemirror/transform");
11
- var _transformBetweenListTypes = require("./list/transformBetweenListTypes");
12
12
  var _transformOrderedUnorderedListToBlockNodes = require("./list/transformOrderedUnorderedListToBlockNodes");
13
13
  var _transformTaskListToBlockNodes = require("./list/transformTaskListToBlockNodes");
14
14
  var _transformToTaskList = require("./list/transformToTaskList");
@@ -30,7 +30,7 @@ var transformBlockToList = exports.transformBlockToList = function transformBloc
30
30
  return null;
31
31
  }
32
32
  var nodes = tr.doc.type.schema.nodes;
33
- var isTargetTask = (0, _utils.isTaskList)(targetNodeType);
33
+ var isTargetTask = (0, _transforms.isTaskList)(targetNodeType);
34
34
 
35
35
  // Handle task lists differently due to their structure
36
36
  if (isTargetTask) {
@@ -145,7 +145,7 @@ var transformListNode = exports.transformListNode = function transformListNode(c
145
145
 
146
146
  // Transform between list types
147
147
  if ((0, _utils.isListNodeType)(targetNodeType)) {
148
- return transformBetweenListTypes(context);
148
+ return (0, _transforms.transformBetweenListTypes)(context);
149
149
  }
150
150
  return null;
151
151
  };
@@ -158,51 +158,4 @@ var liftListToBlockType = exports.liftListToBlockType = function liftListToBlock
158
158
  return null;
159
159
  };
160
160
 
161
- /**
162
- * Transform between different list types
163
- */
164
- var transformBetweenListTypes = exports.transformBetweenListTypes = function transformBetweenListTypes(context) {
165
- var tr = context.tr,
166
- sourceNode = context.sourceNode,
167
- sourcePos = context.sourcePos,
168
- targetNodeType = context.targetNodeType;
169
- var nodes = tr.doc.type.schema.nodes;
170
- var sourceListType = sourceNode.type;
171
- var isSourceBulletOrOrdered = (0, _utils.isBulletOrOrderedList)(sourceListType);
172
- var isTargetTask = (0, _utils.isTaskList)(targetNodeType);
173
- var isSourceTask = (0, _utils.isTaskList)(sourceListType);
174
- var isTargetBulletOrOrdered = (0, _utils.isBulletOrOrderedList)(targetNodeType);
175
-
176
- // Check if we need structure transformation
177
- var needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
178
- try {
179
- if (!needsStructureTransform) {
180
- // Simple type change for same structure lists (bullet <-> ordered)
181
- // Apply to the main list
182
- tr.setNodeMarkup(sourcePos, targetNodeType);
183
-
184
- // Apply to nested lists
185
- var listStart = sourcePos;
186
- var listEnd = sourcePos + sourceNode.nodeSize;
187
- var supportedListTypesSet = (0, _utils.getSupportedListTypesSet)(nodes);
188
- tr.doc.nodesBetween(listStart, listEnd, function (node, pos, parent) {
189
- // Only process nested lists (not the root list we already handled)
190
- if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
191
- var isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
192
- if (isNestedList) {
193
- var shouldTransformNode = node.type === sourceListType || (0, _utils.isBulletOrOrderedList)(node.type) && isTargetBulletOrOrdered;
194
- if (shouldTransformNode) {
195
- tr.setNodeMarkup(pos, targetNodeType);
196
- }
197
- }
198
- }
199
- return true; // Continue traversing
200
- });
201
- return tr;
202
- } else {
203
- return (0, _transformBetweenListTypes.transformListStructure)(context);
204
- }
205
- } catch (_unused) {
206
- return null;
207
- }
208
- };
161
+ // transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isTaskList = exports.isListNodeType = exports.isListNode = exports.isLayoutNodeType = exports.isLayoutNode = exports.isHeadingOrParagraphNode = exports.isContainerNodeType = exports.isContainerNode = exports.isBulletOrOrderedList = exports.isBlockNodeType = exports.isBlockNodeForExtraction = exports.isBlockNode = exports.getTargetNodeInfo = exports.getSupportedListTypesSet = exports.getSupportedListTypes = exports.getContentSupportChecker = exports.filterMarksForTargetNodeType = exports.convertNodeToInlineContent = exports.convertCodeBlockContentToParagraphs = void 0;
6
+ exports.isListNodeType = exports.isListNode = exports.isLayoutNodeType = exports.isLayoutNode = exports.isHeadingOrParagraphNode = exports.isContainerNodeType = exports.isContainerNode = exports.isBlockNodeType = exports.isBlockNodeForExtraction = exports.isBlockNode = exports.getTargetNodeInfo = exports.getContentSupportChecker = exports.filterMarksForTargetNodeType = exports.convertNodeToInlineContent = exports.convertCodeBlockContentToParagraphs = void 0;
7
7
  var _model = require("@atlaskit/editor-prosemirror/model");
8
8
  var getTargetNodeInfo = exports.getTargetNodeInfo = function getTargetNodeInfo(targetType, nodes) {
9
9
  switch (targetType) {
@@ -116,19 +116,8 @@ var isContainerNodeType = exports.isContainerNodeType = function isContainerNode
116
116
  return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
117
117
  };
118
118
 
119
- // List type utilities
120
- var isBulletOrOrderedList = exports.isBulletOrOrderedList = function isBulletOrOrderedList(nodeType) {
121
- return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
122
- };
123
- var isTaskList = exports.isTaskList = function isTaskList(nodeType) {
124
- return nodeType.name === 'taskList';
125
- };
126
- var getSupportedListTypes = exports.getSupportedListTypes = function getSupportedListTypes(nodes) {
127
- return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
128
- };
129
- var getSupportedListTypesSet = exports.getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
130
- return new Set(getSupportedListTypes(nodes));
131
- };
119
+ // List type utilities moved to @atlaskit/editor-common/transforms
120
+
132
121
  var isLayoutNodeType = exports.isLayoutNodeType = function isLayoutNodeType(nodeType) {
133
122
  return nodeType.name === 'layoutSection';
134
123
  };
@@ -1,4 +1,4 @@
1
- /* block-menu.tsx generated by @compiled/babel-plugin v0.36.1 */
1
+ /* block-menu.tsx generated by @compiled/babel-plugin v0.38.1 */
2
2
  "use strict";
3
3
 
4
4
  var _typeof = require("@babel/runtime/helpers/typeof");
@@ -1,8 +1,8 @@
1
+ import { transformListRecursively, isBulletOrOrderedList, isTaskList, getSupportedListTypesSet } from '@atlaskit/editor-common/transforms';
1
2
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
2
3
  import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
3
4
  import { getInlineNodeTextContent } from '../inline-node-transforms';
4
- import { transformListRecursively } from '../list/transformBetweenListTypes';
5
- import { getContentSupportChecker, getSupportedListTypesSet, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isBulletOrOrderedList, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType, isTaskList } from '../utils';
5
+ import { getContentSupportChecker, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType } from '../utils';
6
6
  export const unwrapLayoutNodesToTextNodes = (context, finalTargetNodeType) => {
7
7
  const {
8
8
  tr,
@@ -14,10 +14,14 @@ export const unwrapLayoutNodesToTextNodes = (context, finalTargetNodeType) => {
14
14
  const isValid = getContentSupportChecker(finalTargetNodeType);
15
15
  const createTextNode = node => {
16
16
  const isTextNode = node.type.name === 'text';
17
- if (isValid(node) && !isTextNode) {
18
- return node;
17
+ let nodeToTransform = node;
18
+ if (isContainerNodeType(finalTargetNodeType) || isListNodeType(finalTargetNodeType)) {
19
+ nodeToTransform = node.mark(node.marks.filter(mark => !['alignment', 'indentation'].includes(mark.type.name)));
20
+ }
21
+ if (isValid(nodeToTransform) && !isTextNode) {
22
+ return nodeToTransform;
19
23
  }
20
- return targetNodeType.createChecked(targetAttrs, isTextNode ? node : node.content, node.marks);
24
+ return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
21
25
  };
22
26
  if (isBlockNode(sourceNode)) {
23
27
  // code block acts like a container, we need to unwrap it
@@ -169,19 +173,17 @@ const transformToContainerNode = (nodes, targetNodeType) => {
169
173
  canBeTransformed: false
170
174
  });
171
175
  } else {
172
- // Remove alignment marks as container nodes don't support them
173
- const nodeWithValidAttrs = node.mark(node.marks.filter(mark => mark.type.name !== 'alignment'));
174
176
  const isSameNodeType = node.type === targetNodeType;
175
177
 
176
178
  // If the node is not valid and not the same type, we cannot transform it
177
- if (!isNodeValid(nodeWithValidAttrs) && !isSameNodeType) {
179
+ if (!isNodeValid(node) && !isSameNodeType) {
178
180
  newNodes.push({
179
181
  node: node,
180
182
  canBeTransformed: false
181
183
  });
182
184
  return;
183
185
  }
184
- const nodes = isSameNodeType ? node.content.content : [nodeWithValidAttrs];
186
+ const nodes = isSameNodeType ? node.content.content : [node];
185
187
  if (newNodes.length === 0) {
186
188
  newNodes.push({
187
189
  node: nodes,
@@ -301,8 +303,20 @@ export const transformToListNode = (nodes, targetNodeType, schema) => {
301
303
  }
302
304
  });
303
305
  };
304
- export const convertUnwrappedLayoutContent = (nodes, targetNodeType, schema) => {
305
- if (nodes.length === 1 && nodes[0].content.size === 0) {
306
+ export const convertUnwrappedLayoutContent = (nodes, targetNodeType, schema, targetAttrs) => {
307
+ if (nodes.length === 1 && nodes[0].content.size === 0 && !isContainerNodeType(targetNodeType)) {
308
+ if (isBlockNodeType(targetNodeType)) {
309
+ if (['heading', 'paragraph'].includes(targetNodeType.name)) {
310
+ return [targetNodeType.createChecked(targetAttrs)];
311
+ }
312
+ if (targetNodeType.name === 'codeBlock') {
313
+ return [targetNodeType.createChecked()];
314
+ }
315
+ }
316
+ if (isListNodeType(targetNodeType)) {
317
+ const listItem = isTaskList(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
318
+ return [targetNodeType.createChecked(null, listItem)];
319
+ }
306
320
  return nodes;
307
321
  }
308
322
  if (isBlockNodeType(targetNodeType)) {
@@ -56,7 +56,7 @@ export const transformLayoutNode = context => {
56
56
  const newContent = unwrapLayoutNodesToTextNodes(context, targetNodeType);
57
57
  unwrappedContent.push(...newContent);
58
58
  });
59
- const newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema);
59
+ const newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema, targetAttrs);
60
60
  layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, Fragment.fromArray(newColumnContent), child.marks));
61
61
  }
62
62
  });
@@ -1,10 +1,10 @@
1
+ import { transformBetweenListTypes, isTaskList } from '@atlaskit/editor-common/transforms';
1
2
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
2
3
  import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
3
- import { transformListStructure } from './list/transformBetweenListTypes';
4
4
  import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
5
5
  import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
6
6
  import { transformToTaskList } from './list/transformToTaskList';
7
- import { getSupportedListTypesSet, isBulletOrOrderedList, isBlockNodeType, isContainerNodeType, isListNodeType, isTaskList } from './utils';
7
+ import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
8
8
 
9
9
  /**
10
10
  * Transform selection to list type
@@ -165,55 +165,4 @@ export const liftListToBlockType = () => {
165
165
  return null;
166
166
  };
167
167
 
168
- /**
169
- * Transform between different list types
170
- */
171
- export const transformBetweenListTypes = context => {
172
- const {
173
- tr,
174
- sourceNode,
175
- sourcePos,
176
- targetNodeType
177
- } = context;
178
- const {
179
- nodes
180
- } = tr.doc.type.schema;
181
- const sourceListType = sourceNode.type;
182
- const isSourceBulletOrOrdered = isBulletOrOrderedList(sourceListType);
183
- const isTargetTask = isTaskList(targetNodeType);
184
- const isSourceTask = isTaskList(sourceListType);
185
- const isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
186
-
187
- // Check if we need structure transformation
188
- const needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
189
- try {
190
- if (!needsStructureTransform) {
191
- // Simple type change for same structure lists (bullet <-> ordered)
192
- // Apply to the main list
193
- tr.setNodeMarkup(sourcePos, targetNodeType);
194
-
195
- // Apply to nested lists
196
- const listStart = sourcePos;
197
- const listEnd = sourcePos + sourceNode.nodeSize;
198
- const supportedListTypesSet = getSupportedListTypesSet(nodes);
199
- tr.doc.nodesBetween(listStart, listEnd, (node, pos, parent) => {
200
- // Only process nested lists (not the root list we already handled)
201
- if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
202
- const isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
203
- if (isNestedList) {
204
- const shouldTransformNode = node.type === sourceListType || isBulletOrOrderedList(node.type) && isTargetBulletOrOrdered;
205
- if (shouldTransformNode) {
206
- tr.setNodeMarkup(pos, targetNodeType);
207
- }
208
- }
209
- }
210
- return true; // Continue traversing
211
- });
212
- return tr;
213
- } else {
214
- return transformListStructure(context);
215
- }
216
- } catch {
217
- return null;
218
- }
219
- };
168
+ // transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
@@ -110,19 +110,8 @@ export const isContainerNodeType = nodeType => {
110
110
  return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
111
111
  };
112
112
 
113
- // List type utilities
114
- export const isBulletOrOrderedList = nodeType => {
115
- return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
116
- };
117
- export const isTaskList = nodeType => {
118
- return nodeType.name === 'taskList';
119
- };
120
- export const getSupportedListTypes = nodes => {
121
- return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
122
- };
123
- export const getSupportedListTypesSet = nodes => {
124
- return new Set(getSupportedListTypes(nodes));
125
- };
113
+ // List type utilities moved to @atlaskit/editor-common/transforms
114
+
126
115
  export const isLayoutNodeType = nodeType => {
127
116
  return nodeType.name === 'layoutSection';
128
117
  };
@@ -1,4 +1,4 @@
1
- /* block-menu.tsx generated by @compiled/babel-plugin v0.36.1 */
1
+ /* block-menu.tsx generated by @compiled/babel-plugin v0.38.1 */
2
2
  import "./block-menu.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useContext, useEffect } from 'react';
@@ -1,9 +1,9 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { transformListRecursively, isBulletOrOrderedList, isTaskList, getSupportedListTypesSet } from '@atlaskit/editor-common/transforms';
2
3
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
3
4
  import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
4
5
  import { getInlineNodeTextContent } from '../inline-node-transforms';
5
- import { transformListRecursively } from '../list/transformBetweenListTypes';
6
- import { getContentSupportChecker, getSupportedListTypesSet, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isBulletOrOrderedList, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType, isTaskList } from '../utils';
6
+ import { getContentSupportChecker, isBlockNode, isBlockNodeForExtraction, isBlockNodeType, isContainerNode, isContainerNodeType, isHeadingOrParagraphNode, isListNode, isListNodeType } from '../utils';
7
7
  export var unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(context, finalTargetNodeType) {
8
8
  var tr = context.tr,
9
9
  sourceNode = context.sourceNode,
@@ -13,10 +13,16 @@ export var unwrapLayoutNodesToTextNodes = function unwrapLayoutNodesToTextNodes(
13
13
  var isValid = getContentSupportChecker(finalTargetNodeType);
14
14
  var createTextNode = function createTextNode(node) {
15
15
  var isTextNode = node.type.name === 'text';
16
- if (isValid(node) && !isTextNode) {
17
- return node;
16
+ var nodeToTransform = node;
17
+ if (isContainerNodeType(finalTargetNodeType) || isListNodeType(finalTargetNodeType)) {
18
+ nodeToTransform = node.mark(node.marks.filter(function (mark) {
19
+ return !['alignment', 'indentation'].includes(mark.type.name);
20
+ }));
18
21
  }
19
- return targetNodeType.createChecked(targetAttrs, isTextNode ? node : node.content, node.marks);
22
+ if (isValid(nodeToTransform) && !isTextNode) {
23
+ return nodeToTransform;
24
+ }
25
+ return targetNodeType.createChecked(targetAttrs, isTextNode ? nodeToTransform : nodeToTransform.content, nodeToTransform.marks);
20
26
  };
21
27
  if (isBlockNode(sourceNode)) {
22
28
  // code block acts like a container, we need to unwrap it
@@ -183,21 +189,17 @@ var transformToContainerNode = function transformToContainerNode(nodes, targetNo
183
189
  canBeTransformed: false
184
190
  });
185
191
  } else {
186
- // Remove alignment marks as container nodes don't support them
187
- var nodeWithValidAttrs = node.mark(node.marks.filter(function (mark) {
188
- return mark.type.name !== 'alignment';
189
- }));
190
192
  var isSameNodeType = node.type === targetNodeType;
191
193
 
192
194
  // If the node is not valid and not the same type, we cannot transform it
193
- if (!isNodeValid(nodeWithValidAttrs) && !isSameNodeType) {
195
+ if (!isNodeValid(node) && !isSameNodeType) {
194
196
  newNodes.push({
195
197
  node: node,
196
198
  canBeTransformed: false
197
199
  });
198
200
  return;
199
201
  }
200
- var _nodes = isSameNodeType ? node.content.content : [nodeWithValidAttrs];
202
+ var _nodes = isSameNodeType ? node.content.content : [node];
201
203
  if (newNodes.length === 0) {
202
204
  newNodes.push({
203
205
  node: _nodes,
@@ -315,8 +317,20 @@ export var transformToListNode = function transformToListNode(nodes, targetNodeT
315
317
  }
316
318
  });
317
319
  };
318
- export var convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema) {
319
- if (nodes.length === 1 && nodes[0].content.size === 0) {
320
+ export var convertUnwrappedLayoutContent = function convertUnwrappedLayoutContent(nodes, targetNodeType, schema, targetAttrs) {
321
+ if (nodes.length === 1 && nodes[0].content.size === 0 && !isContainerNodeType(targetNodeType)) {
322
+ if (isBlockNodeType(targetNodeType)) {
323
+ if (['heading', 'paragraph'].includes(targetNodeType.name)) {
324
+ return [targetNodeType.createChecked(targetAttrs)];
325
+ }
326
+ if (targetNodeType.name === 'codeBlock') {
327
+ return [targetNodeType.createChecked()];
328
+ }
329
+ }
330
+ if (isListNodeType(targetNodeType)) {
331
+ var listItem = isTaskList(targetNodeType) ? schema.nodes.taskItem.createChecked() : schema.nodes.listItem.createChecked(null, schema.nodes.paragraph.createChecked());
332
+ return [targetNodeType.createChecked(null, listItem)];
333
+ }
320
334
  return nodes;
321
335
  }
322
336
  if (isBlockNodeType(targetNodeType)) {
@@ -53,7 +53,7 @@ export var transformLayoutNode = function transformLayoutNode(context) {
53
53
  var newContent = unwrapLayoutNodesToTextNodes(context, targetNodeType);
54
54
  unwrappedContent.push.apply(unwrappedContent, _toConsumableArray(newContent));
55
55
  });
56
- var newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema);
56
+ var newColumnContent = convertUnwrappedLayoutContent(unwrappedContent, targetNodeType, schema, targetAttrs);
57
57
  layoutColumnNodes.push(layoutColumn.createChecked(child.attrs, Fragment.fromArray(newColumnContent), child.marks));
58
58
  }
59
59
  });
@@ -1,11 +1,11 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import { transformBetweenListTypes, isTaskList } from '@atlaskit/editor-common/transforms';
2
3
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
3
4
  import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
4
- import { transformListStructure } from './list/transformBetweenListTypes';
5
5
  import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
6
6
  import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
7
7
  import { transformToTaskList } from './list/transformToTaskList';
8
- import { getSupportedListTypesSet, isBulletOrOrderedList, isBlockNodeType, isContainerNodeType, isListNodeType, isTaskList } from './utils';
8
+ import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
9
9
 
10
10
  /**
11
11
  * Transform selection to list type
@@ -152,51 +152,4 @@ export var liftListToBlockType = function liftListToBlockType() {
152
152
  return null;
153
153
  };
154
154
 
155
- /**
156
- * Transform between different list types
157
- */
158
- export var transformBetweenListTypes = function transformBetweenListTypes(context) {
159
- var tr = context.tr,
160
- sourceNode = context.sourceNode,
161
- sourcePos = context.sourcePos,
162
- targetNodeType = context.targetNodeType;
163
- var nodes = tr.doc.type.schema.nodes;
164
- var sourceListType = sourceNode.type;
165
- var isSourceBulletOrOrdered = isBulletOrOrderedList(sourceListType);
166
- var isTargetTask = isTaskList(targetNodeType);
167
- var isSourceTask = isTaskList(sourceListType);
168
- var isTargetBulletOrOrdered = isBulletOrOrderedList(targetNodeType);
169
-
170
- // Check if we need structure transformation
171
- var needsStructureTransform = isSourceBulletOrOrdered && isTargetTask || isSourceTask && isTargetBulletOrOrdered;
172
- try {
173
- if (!needsStructureTransform) {
174
- // Simple type change for same structure lists (bullet <-> ordered)
175
- // Apply to the main list
176
- tr.setNodeMarkup(sourcePos, targetNodeType);
177
-
178
- // Apply to nested lists
179
- var listStart = sourcePos;
180
- var listEnd = sourcePos + sourceNode.nodeSize;
181
- var supportedListTypesSet = getSupportedListTypesSet(nodes);
182
- tr.doc.nodesBetween(listStart, listEnd, function (node, pos, parent) {
183
- // Only process nested lists (not the root list we already handled)
184
- if (supportedListTypesSet.has(node.type) && pos !== sourcePos) {
185
- var isNestedList = parent && (supportedListTypesSet.has(parent.type) || parent.type === nodes.listItem);
186
- if (isNestedList) {
187
- var shouldTransformNode = node.type === sourceListType || isBulletOrOrderedList(node.type) && isTargetBulletOrOrdered;
188
- if (shouldTransformNode) {
189
- tr.setNodeMarkup(pos, targetNodeType);
190
- }
191
- }
192
- }
193
- return true; // Continue traversing
194
- });
195
- return tr;
196
- } else {
197
- return transformListStructure(context);
198
- }
199
- } catch (_unused) {
200
- return null;
201
- }
202
- };
155
+ // transformBetweenListTypes is now imported from @atlaskit/editor-common/transforms
@@ -110,19 +110,8 @@ export var isContainerNodeType = function isContainerNodeType(nodeType) {
110
110
  return ['panel', 'expand', 'blockquote'].includes(nodeType.name);
111
111
  };
112
112
 
113
- // List type utilities
114
- export var isBulletOrOrderedList = function isBulletOrOrderedList(nodeType) {
115
- return nodeType.name === 'bulletList' || nodeType.name === 'orderedList';
116
- };
117
- export var isTaskList = function isTaskList(nodeType) {
118
- return nodeType.name === 'taskList';
119
- };
120
- export var getSupportedListTypes = function getSupportedListTypes(nodes) {
121
- return [nodes.bulletList, nodes.orderedList, nodes.taskList].filter(Boolean);
122
- };
123
- export var getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
124
- return new Set(getSupportedListTypes(nodes));
125
- };
113
+ // List type utilities moved to @atlaskit/editor-common/transforms
114
+
126
115
  export var isLayoutNodeType = function isLayoutNodeType(nodeType) {
127
116
  return nodeType.name === 'layoutSection';
128
117
  };
@@ -1,4 +1,4 @@
1
- /* block-menu.tsx generated by @compiled/babel-plugin v0.36.1 */
1
+ /* block-menu.tsx generated by @compiled/babel-plugin v0.38.1 */
2
2
  import "./block-menu.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { useContext, useEffect } from 'react';
@@ -1,4 +1,5 @@
1
- import type { TransformContext, TransformFunction } from './types';
1
+ import type { TransformContext } from '@atlaskit/editor-common/transforms';
2
+ import type { TransformFunction } from './types';
2
3
  /**
3
4
  * Transform selection to container type
4
5
  */