UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

63 lines (60 loc) 3.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapStep = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _codeBlock = require("@atlaskit/editor-common/code-block"); var _utils = require("@atlaskit/editor-common/utils"); var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals"); var _marks = require("../marks"); var _utils2 = require("../utils"); /** * Wraps nodes into the target container type. * When wrapping into expand, any expand children are converted to nestedExpand * since expand cannot be a direct child of expand. * * Preserves breakout marks when both source and target nodes support resizing * (codeBlock, expand, layoutSection). */ var wrapStep = exports.wrapStep = function wrapStep(nodes, context) { var schema = context.schema, targetNodeTypeName = context.targetNodeTypeName, fromNode = context.fromNode; // When wrapping into expand, convert any expand children to nestedExpand // since expand cannot be a direct child of expand var processedNodes = nodes; if (targetNodeTypeName === 'expand') { processedNodes = nodes.map(function (node) { if (node.type.name === 'expand') { var nestedExpandNode = (0, _utils2.convertExpandToNestedExpand)(node, schema); return nestedExpandNode !== null && nestedExpandNode !== void 0 ? nestedExpandNode : node; } return node; }); } var targetNodeType = schema.nodes[targetNodeTypeName]; var isExpandType = targetNodeTypeName === 'expand' || targetNodeTypeName === 'nestedExpand'; var isCodeBlock = targetNodeTypeName === 'codeBlock'; var nodeAttrs = isExpandType ? { localId: crypto.randomUUID() } : isCodeBlock ? (0, _codeBlock.getDefaultCodeBlockAttrs)() : {}; // platform_editor_lovability_resize_dividers_panels supports breakout resizing on panels and rules, // but rule is NOT a supported transform source/target var breakoutResizableNodesList = (0, _expValEquals.expValEquals)('platform_editor_lovability_resize_dividers_panels', 'isEnabled', true) ? [].concat((0, _toConsumableArray2.default)(_utils.breakoutResizableNodes), ['panel']) : _utils.breakoutResizableNodes; var sourceSupportsBreakout = breakoutResizableNodesList.includes(fromNode.type.name); var targetSupportsBreakout = breakoutResizableNodesList.includes(targetNodeType.name); var shouldPreserveBreakout = sourceSupportsBreakout && targetSupportsBreakout; var marks; if (shouldPreserveBreakout) { var breakoutMark = fromNode.marks.find(function (mark) { return mark.type.name === 'breakout'; }); if (breakoutMark) { marks = [breakoutMark]; } } var outputNode = targetNodeType.createAndFill(nodeAttrs, (0, _marks.removeDisallowedMarks)(processedNodes, schema.nodes[targetNodeTypeName]), marks); return outputNode ? [outputNode] : nodes; };