@atlaskit/editor-plugin-block-type 4.0.11 → 4.0.13

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 (46) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/blockTypePlugin.js +9 -4
  3. package/dist/cjs/pm-plugins/block-types.js +9 -2
  4. package/dist/cjs/pm-plugins/commands/block-type.js +64 -15
  5. package/dist/cjs/pm-plugins/commands/wrapSelectionIn.js +61 -0
  6. package/dist/cjs/pm-plugins/main.js +12 -4
  7. package/dist/cjs/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  8. package/dist/cjs/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  9. package/dist/cjs/pm-plugins/ui/ToolbarBlockType/index.js +22 -19
  10. package/dist/cjs/pm-plugins/ui/ToolbarBlockType/styled.js +1 -1
  11. package/dist/cjs/pm-plugins/utils.js +17 -1
  12. package/dist/es2019/blockTypePlugin.js +10 -6
  13. package/dist/es2019/pm-plugins/block-types.js +8 -1
  14. package/dist/es2019/pm-plugins/commands/block-type.js +61 -13
  15. package/dist/es2019/pm-plugins/commands/wrapSelectionIn.js +54 -0
  16. package/dist/es2019/pm-plugins/main.js +11 -5
  17. package/dist/es2019/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  18. package/dist/es2019/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  19. package/dist/es2019/pm-plugins/ui/ToolbarBlockType/index.js +12 -6
  20. package/dist/es2019/pm-plugins/ui/ToolbarBlockType/styled.js +2 -2
  21. package/dist/es2019/pm-plugins/utils.js +15 -1
  22. package/dist/esm/blockTypePlugin.js +10 -5
  23. package/dist/esm/pm-plugins/block-types.js +8 -1
  24. package/dist/esm/pm-plugins/commands/block-type.js +62 -15
  25. package/dist/esm/pm-plugins/commands/wrapSelectionIn.js +55 -0
  26. package/dist/esm/pm-plugins/main.js +13 -5
  27. package/dist/esm/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  28. package/dist/esm/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  29. package/dist/esm/pm-plugins/ui/ToolbarBlockType/index.js +22 -19
  30. package/dist/esm/pm-plugins/ui/ToolbarBlockType/styled.js +2 -2
  31. package/dist/esm/pm-plugins/utils.js +17 -1
  32. package/dist/types/blockTypePluginType.d.ts +2 -1
  33. package/dist/types/pm-plugins/block-types.d.ts +1 -0
  34. package/dist/types/pm-plugins/commands/block-type.d.ts +6 -4
  35. package/dist/types/pm-plugins/commands/wrapSelectionIn.d.ts +3 -0
  36. package/dist/types/pm-plugins/main.d.ts +3 -1
  37. package/dist/types/pm-plugins/types.d.ts +1 -0
  38. package/dist/types/pm-plugins/ui/ToolbarBlockType/index.d.ts +2 -1
  39. package/dist/types-ts4.5/blockTypePluginType.d.ts +2 -1
  40. package/dist/types-ts4.5/pm-plugins/block-types.d.ts +1 -0
  41. package/dist/types-ts4.5/pm-plugins/commands/block-type.d.ts +6 -4
  42. package/dist/types-ts4.5/pm-plugins/commands/wrapSelectionIn.d.ts +3 -0
  43. package/dist/types-ts4.5/pm-plugins/main.d.ts +3 -1
  44. package/dist/types-ts4.5/pm-plugins/types.d.ts +1 -0
  45. package/dist/types-ts4.5/pm-plugins/ui/ToolbarBlockType/index.d.ts +2 -1
  46. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/editor-plugin-block-type
2
2
 
3
+ ## 4.0.13
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 4.0.12
10
+
11
+ ### Patch Changes
12
+
13
+ - [#180067](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/180067)
14
+ [`fdee6c449ca83`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/fdee6c449ca83) -
15
+ [ux] Adding block quote as an option to the text formatting menu for full page editors
16
+ - Updated dependencies
17
+
3
18
  ## 4.0.11
4
19
 
5
20
  ### Patch Changes
@@ -153,7 +153,7 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
153
153
  name: 'blockType',
154
154
  plugin: function plugin(_ref5) {
155
155
  var dispatch = _ref5.dispatch;
156
- return (0, _main.createPlugin)(api, dispatch, options && options.lastNodeMustBeParagraph);
156
+ return (0, _main.createPlugin)(api, dispatch, options && options.lastNodeMustBeParagraph, options === null || options === void 0 ? void 0 : options.includeBlockQuoteAsTextstyleOption);
157
157
  }
158
158
  }, {
159
159
  name: 'blockTypeInputRule',
@@ -185,7 +185,12 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
185
185
  commands: {
186
186
  setTextLevel: function setTextLevel(level, inputMethod) {
187
187
  var _api$analytics4;
188
- return (0, _blockType.setBlockTypeWithAnalytics)(level, inputMethod, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
188
+ var fromBlockQuote = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
189
+ return (0, _blockType.setBlockTypeWithAnalytics)(level, inputMethod, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, fromBlockQuote);
190
+ },
191
+ insertBlockQuote: function insertBlockQuote(inputMethod) {
192
+ var _api$analytics5;
193
+ return (0, _blockType.insertBlockQuoteWithAnalyticsCommand)(inputMethod, api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
189
194
  }
190
195
  },
191
196
  getSharedState: function getSharedState(editorState) {
@@ -222,9 +227,9 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
222
227
  }
223
228
  },
224
229
  quickInsert: function quickInsert(intl) {
225
- var _api$analytics5, _api$analytics6;
230
+ var _api$analytics6, _api$analytics7;
226
231
  var exclude = options && options.allowBlockType && options.allowBlockType.exclude ? options.allowBlockType.exclude : [];
227
- return [].concat((0, _toConsumableArray2.default)(blockquotePluginOptions(intl, exclude.indexOf('blockquote') === -1, api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions)), (0, _toConsumableArray2.default)(headingPluginOptions(intl, exclude.indexOf('heading') === -1, api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions)));
232
+ return [].concat((0, _toConsumableArray2.default)(blockquotePluginOptions(intl, exclude.indexOf('blockquote') === -1, api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions)), (0, _toConsumableArray2.default)(headingPluginOptions(intl, exclude.indexOf('heading') === -1, api === null || api === void 0 || (_api$analytics7 = api.analytics) === null || _api$analytics7 === void 0 ? void 0 : _api$analytics7.actions)));
228
233
  }
229
234
  }
230
235
  };
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WRAPPER_BLOCK_TYPES = exports.TEXT_BLOCK_TYPES = exports.PANEL = exports.OTHER = exports.NORMAL_TEXT = exports.HEADING_6 = exports.HEADING_5 = exports.HEADING_4 = exports.HEADING_3 = exports.HEADING_2 = exports.HEADING_1 = exports.HEADINGS_BY_NAME = exports.HEADINGS_BY_LEVEL = exports.CODE_BLOCK = exports.BLOCK_QUOTE = exports.ALL_BLOCK_TYPES = void 0;
6
+ exports.getBlockTypesInDropdown = exports.WRAPPER_BLOCK_TYPES = exports.TEXT_BLOCK_TYPES = exports.PANEL = exports.OTHER = exports.NORMAL_TEXT = exports.HEADING_6 = exports.HEADING_5 = exports.HEADING_4 = exports.HEADING_3 = exports.HEADING_2 = exports.HEADING_1 = exports.HEADINGS_BY_NAME = exports.HEADINGS_BY_LEVEL = exports.CODE_BLOCK = exports.BLOCK_QUOTE = exports.ALL_BLOCK_TYPES = void 0;
7
7
  var _messages = require("@atlaskit/editor-common/messages");
8
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
8
9
  var NORMAL_TEXT = exports.NORMAL_TEXT = {
9
10
  name: 'normal',
10
11
  title: _messages.blockTypeMessages.normal,
@@ -56,7 +57,8 @@ var HEADING_6 = exports.HEADING_6 = {
56
57
  var BLOCK_QUOTE = exports.BLOCK_QUOTE = {
57
58
  name: 'blockquote',
58
59
  title: _messages.blockTypeMessages.blockquote,
59
- nodeName: 'blockquote'
60
+ nodeName: 'blockquote',
61
+ tagName: 'blockquote'
60
62
  };
61
63
  var CODE_BLOCK = exports.CODE_BLOCK = {
62
64
  name: 'codeblock',
@@ -76,6 +78,11 @@ var OTHER = exports.OTHER = {
76
78
  var TEXT_BLOCK_TYPES = exports.TEXT_BLOCK_TYPES = [NORMAL_TEXT, HEADING_1, HEADING_2, HEADING_3, HEADING_4, HEADING_5, HEADING_6];
77
79
  var WRAPPER_BLOCK_TYPES = exports.WRAPPER_BLOCK_TYPES = [BLOCK_QUOTE, CODE_BLOCK, PANEL];
78
80
  var ALL_BLOCK_TYPES = exports.ALL_BLOCK_TYPES = TEXT_BLOCK_TYPES.concat(WRAPPER_BLOCK_TYPES);
81
+ var getBlockTypesInDropdown = exports.getBlockTypesInDropdown = function getBlockTypesInDropdown(includeBlockQuoteAsTextstyleOption) {
82
+ return (0, _experiments.editorExperiment)('platform_editor_blockquote_in_text_formatting_menu', true, {
83
+ exposure: true
84
+ }) && includeBlockQuoteAsTextstyleOption ? [].concat(TEXT_BLOCK_TYPES, [BLOCK_QUOTE]) : TEXT_BLOCK_TYPES;
85
+ };
79
86
  var HEADINGS_BY_LEVEL = exports.HEADINGS_BY_LEVEL = TEXT_BLOCK_TYPES.reduce(function (acc, blockType) {
80
87
  if (blockType.level && blockType.nodeName === 'heading') {
81
88
  acc[blockType.level] = blockType;
@@ -4,16 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.insertBlockQuoteWithAnalytics = exports.cleanUpAtTheStartOfDocument = void 0;
7
+ exports.insertBlockQuoteWithAnalyticsCommand = insertBlockQuoteWithAnalyticsCommand;
7
8
  exports.setBlockType = setBlockType;
8
9
  exports.setBlockTypeWithAnalytics = setBlockTypeWithAnalytics;
9
10
  exports.setHeading = setHeading;
10
11
  exports.setHeadingWithAnalytics = void 0;
12
+ exports.setNormalText = setNormalText;
11
13
  exports.setNormalTextWithAnalytics = setNormalTextWithAnalytics;
12
14
  var _analytics = require("@atlaskit/editor-common/analytics");
13
15
  var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
14
16
  var _utils = require("@atlaskit/editor-common/utils");
17
+ var _model = require("@atlaskit/editor-prosemirror/model");
15
18
  var _editorTables = require("@atlaskit/editor-tables");
16
19
  var _blockTypes = require("../block-types");
20
+ var _wrapSelectionIn = require("./wrapSelectionIn");
17
21
  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; } } }; }
18
22
  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; } }
19
23
  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; }
@@ -35,7 +39,7 @@ function setBlockType(name) {
35
39
  return null;
36
40
  };
37
41
  }
38
- function setHeading(level) {
42
+ function setHeading(level, fromBlockQuote) {
39
43
  return function (_ref2) {
40
44
  var tr = _ref2.tr;
41
45
  var selection = tr.selection,
@@ -44,32 +48,45 @@ function setHeading(level) {
44
48
  ranges.forEach(function (_ref3) {
45
49
  var $from = _ref3.$from,
46
50
  $to = _ref3.$to;
47
- tr.setBlockType($from.pos, $to.pos, schema.nodes.heading, {
48
- level: level
49
- });
51
+ if (fromBlockQuote) {
52
+ var range = $from.blockRange($to);
53
+ if (!range) {
54
+ return;
55
+ }
56
+ var content = $from.node().content;
57
+ var headingNode = schema.nodes.heading.createChecked({
58
+ level: level
59
+ }, content);
60
+ var slice = new _model.Slice(_model.Fragment.from(headingNode), 0, 0);
61
+ tr.replaceRange(range.start, range.end, slice);
62
+ } else {
63
+ tr.setBlockType($from.pos, $to.pos, schema.nodes.heading, {
64
+ level: level
65
+ });
66
+ }
50
67
  });
51
68
  return tr;
52
69
  };
53
70
  }
54
- function setBlockTypeWithAnalytics(name, inputMethod, editorAnalyticsApi) {
71
+ function setBlockTypeWithAnalytics(name, inputMethod, editorAnalyticsApi, fromBlockQuote) {
55
72
  return function (_ref4) {
56
73
  var tr = _ref4.tr;
57
74
  var nodes = tr.doc.type.schema.nodes;
58
75
  if (name === 'normal' && nodes.paragraph) {
59
- return setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi)({
76
+ return setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi, fromBlockQuote)({
60
77
  tr: tr
61
78
  });
62
79
  }
63
80
  var headingBlockType = _blockTypes.HEADINGS_BY_NAME[name];
64
81
  if (headingBlockType && nodes.heading && headingBlockType.level) {
65
- return setHeadingWithAnalytics(headingBlockType.level, inputMethod, editorAnalyticsApi)({
82
+ return setHeadingWithAnalytics(headingBlockType.level, inputMethod, editorAnalyticsApi, fromBlockQuote)({
66
83
  tr: tr
67
84
  });
68
85
  }
69
86
  return null;
70
87
  };
71
88
  }
72
- function setNormalText() {
89
+ function setNormalText(fromBlockQuote) {
73
90
  return function (_ref5) {
74
91
  var tr = _ref5.tr;
75
92
  var selection = tr.selection,
@@ -78,7 +95,15 @@ function setNormalText() {
78
95
  ranges.forEach(function (_ref6) {
79
96
  var $from = _ref6.$from,
80
97
  $to = _ref6.$to;
81
- tr.setBlockType($from.pos, $to.pos, schema.nodes.paragraph);
98
+ if (fromBlockQuote) {
99
+ var range = $from.blockRange($to);
100
+ if (!range) {
101
+ return;
102
+ }
103
+ tr.lift(range, 0);
104
+ } else {
105
+ tr.setBlockType($from.pos, $to.pos, schema.nodes.paragraph);
106
+ }
82
107
  });
83
108
  return tr;
84
109
  };
@@ -120,7 +145,7 @@ function withCurrentHeadingLevel(fn) {
120
145
  });
121
146
  };
122
147
  }
123
- function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi) {
148
+ function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi, fromBlockQuote) {
124
149
  return withCurrentHeadingLevel(function (previousHeadingLevel) {
125
150
  return function (_ref8) {
126
151
  var tr = _ref8.tr;
@@ -135,13 +160,13 @@ function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi) {
135
160
  previousHeadingLevel: previousHeadingLevel
136
161
  }
137
162
  })(tr);
138
- return setNormalText()({
163
+ return setNormalText(fromBlockQuote)({
139
164
  tr: tr
140
165
  });
141
166
  };
142
167
  });
143
168
  }
144
- var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHeadingWithAnalytics(newHeadingLevel, inputMethod, editorAnalyticsApi) {
169
+ var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHeadingWithAnalytics(newHeadingLevel, inputMethod, editorAnalyticsApi, fromBlockQuote) {
145
170
  return withCurrentHeadingLevel(function (previousHeadingLevel) {
146
171
  return function (_ref9) {
147
172
  var tr = _ref9.tr;
@@ -156,7 +181,7 @@ var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHead
156
181
  previousHeadingLevel: previousHeadingLevel
157
182
  }
158
183
  })(tr);
159
- return setHeading(newHeadingLevel)({
184
+ return setHeading(newHeadingLevel, fromBlockQuote)({
160
185
  tr: tr
161
186
  });
162
187
  };
@@ -191,9 +216,33 @@ var insertBlockQuoteWithAnalytics = exports.insertBlockQuoteWithAnalytics = func
191
216
  }
192
217
  })(insertBlockQuote());
193
218
  };
219
+ function insertBlockQuoteWithAnalyticsCommand(inputMethod, editorAnalyticsApi) {
220
+ return withCurrentHeadingLevel(function (previousHeadingLevel) {
221
+ return function (_ref10) {
222
+ var tr = _ref10.tr;
223
+ var nodes = tr.doc.type.schema.nodes;
224
+
225
+ // TODO: analytics event
226
+
227
+ // editorAnalyticsApi?.attachAnalyticsEvent({
228
+ // action: ACTION.FORMATTED,
229
+ // actionSubject: ACTION_SUBJECT.TEXT,
230
+ // eventType: EVENT_TYPE.TRACK,
231
+ // actionSubjectId: ACTION_SUBJECT_ID.FORMAT_BLOCK_QUOTE,
232
+ // attributes: {
233
+ // inputMethod: inputMethod,
234
+ // },
235
+ // })(tr);
236
+
237
+ return (0, _wrapSelectionIn.wrapSelectionInBlockType)(nodes.blockquote)({
238
+ tr: tr
239
+ });
240
+ };
241
+ });
242
+ }
194
243
  var cleanUpAtTheStartOfDocument = exports.cleanUpAtTheStartOfDocument = function cleanUpAtTheStartOfDocument(state, dispatch) {
195
- var _ref10 = state.selection,
196
- $cursor = _ref10.$cursor;
244
+ var _ref11 = state.selection,
245
+ $cursor = _ref11.$cursor;
197
246
  if ($cursor && !$cursor.nodeBefore && !$cursor.nodeAfter && $cursor.pos === 1) {
198
247
  var tr = state.tr,
199
248
  schema = state.schema;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.wrapSelectionInBlockType = wrapSelectionInBlockType;
7
+ var _model = require("@atlaskit/editor-prosemirror/model");
8
+ var _transform = require("@atlaskit/editor-prosemirror/transform");
9
+ function wrapSelectionInBlockType(nodeType) {
10
+ return function (_ref) {
11
+ var tr = _ref.tr;
12
+ var nodes = tr.doc.type.schema.nodes;
13
+ var _tr$doc$type$schema$m = tr.doc.type.schema.marks,
14
+ alignment = _tr$doc$type$schema$m.alignment,
15
+ indentation = _tr$doc$type$schema$m.indentation;
16
+ if (nodes.paragraph && nodes.blockquote) {
17
+ /**Remove alignment and indentation marks from the selection */
18
+ var marksToRemove = [alignment, indentation];
19
+ var hasMark = function hasMark(mark) {
20
+ return marksToRemove.indexOf(mark.type) > -1;
21
+ };
22
+ var not = function not(fn) {
23
+ return function (arg) {
24
+ return !fn(arg);
25
+ };
26
+ };
27
+
28
+ /**
29
+ * When you need to toggle the selection
30
+ * when another type which does not allow alignment is applied
31
+ */
32
+ tr.doc.nodesBetween(tr.selection.from, tr.selection.to, function (node, pos) {
33
+ if (node.type === nodes.paragraph && node.marks.some(hasMark)) {
34
+ var resolvedPos = tr.doc.resolve(pos);
35
+ var withoutBlockMarks = node.marks.filter(not(hasMark));
36
+ tr = tr.setNodeMarkup(resolvedPos.pos, undefined, node.attrs, withoutBlockMarks);
37
+ }
38
+ });
39
+
40
+ /** Get range and wrapping needed for the selection */
41
+ var _tr$selection = tr.selection,
42
+ $from = _tr$selection.$from,
43
+ $to = _tr$selection.$to;
44
+ var range = $from.blockRange($to);
45
+ var wrapping = range && (0, _transform.findWrapping)(range, nodes.blockquote);
46
+ if (wrapping) {
47
+ /** Wrap the selection */
48
+ tr.wrap(range, wrapping).scrollIntoView();
49
+ } else {
50
+ /** If wrapping is not possible, replace with a blockquote */
51
+ var start = $from.start();
52
+ var end = $to.end();
53
+ var content = $from.node().content;
54
+ var blockquote = nodes.blockquote.create({}, nodes.paragraph.create({}, content));
55
+ var slice = new _model.Slice(_model.Fragment.from(blockquote), 0, 0);
56
+ tr.replaceRange(start, end, slice).scrollIntoView();
57
+ }
58
+ }
59
+ return tr;
60
+ };
61
+ }
@@ -25,6 +25,8 @@ var blockTypeForNode = function blockTypeForNode(node, schema) {
25
25
  }
26
26
  } else if (node.type === schema.nodes.paragraph) {
27
27
  return _blockTypes.NORMAL_TEXT;
28
+ } else if (node.type === schema.nodes.blockquote) {
29
+ return _blockTypes.BLOCK_QUOTE;
28
30
  }
29
31
  return _blockTypes.OTHER;
30
32
  };
@@ -67,6 +69,7 @@ var detectBlockType = function detectBlockType(availableBlockTypes, state) {
67
69
  } else if (blockType !== _blockTypes.OTHER && blockType !== nodeBlockType[0]) {
68
70
  blockType = _blockTypes.OTHER;
69
71
  }
72
+ return false;
70
73
  }
71
74
  });
72
75
  return blockType || _blockTypes.OTHER;
@@ -78,7 +81,7 @@ var autoformatHeading = function autoformatHeading(headingLevel, editorAnalytics
78
81
  return (0, _blockType.setHeadingWithAnalytics)(headingLevel, _analytics.INPUT_METHOD.FORMATTING, editorAnalyticsApi);
79
82
  };
80
83
  var pluginKey = exports.pluginKey = new _state.PluginKey('blockTypePlugin');
81
- var createPlugin = exports.createPlugin = function createPlugin(editorAPI, dispatch, lastNodeMustBeParagraph) {
84
+ var createPlugin = exports.createPlugin = function createPlugin(editorAPI, dispatch, lastNodeMustBeParagraph, includeBlockQuoteAsTextstyleOption) {
82
85
  var _editorAPI$analytics;
83
86
  var editorAnalyticsApi = editorAPI === null || editorAPI === void 0 || (_editorAPI$analytics = editorAPI.analytics) === null || _editorAPI$analytics === void 0 ? void 0 : _editorAPI$analytics.actions;
84
87
  var altKeyLocation = 0;
@@ -101,16 +104,21 @@ var createPlugin = exports.createPlugin = function createPlugin(editorAPI, dispa
101
104
  var availableWrapperBlockTypes = _blockTypes.WRAPPER_BLOCK_TYPES.filter(function (blockType) {
102
105
  return isBlockTypeSchemaSupported(blockType, state);
103
106
  });
107
+ var BLOCK_TYPES_IN_DROPDOWN = (0, _blockTypes.getBlockTypesInDropdown)(includeBlockQuoteAsTextstyleOption);
108
+ var availableBlockTypesInDropdown = BLOCK_TYPES_IN_DROPDOWN.filter(function (blockType) {
109
+ return isBlockTypeSchemaSupported(blockType, state);
110
+ });
104
111
  return {
105
- currentBlockType: detectBlockType(availableBlockTypes, state),
112
+ currentBlockType: detectBlockType(availableBlockTypesInDropdown, state),
106
113
  blockTypesDisabled: (0, _utils.areBlockTypesDisabled)(state),
107
114
  availableBlockTypes: availableBlockTypes,
108
- availableWrapperBlockTypes: availableWrapperBlockTypes
115
+ availableWrapperBlockTypes: availableWrapperBlockTypes,
116
+ availableBlockTypesInDropdown: availableBlockTypesInDropdown
109
117
  };
110
118
  },
111
119
  apply: function apply(_tr, oldPluginState, _oldState, newState) {
112
120
  var newPluginState = _objectSpread(_objectSpread({}, oldPluginState), {}, {
113
- currentBlockType: detectBlockType(oldPluginState.availableBlockTypes, newState),
121
+ currentBlockType: detectBlockType(oldPluginState.availableBlockTypesInDropdown, newState),
114
122
  blockTypesDisabled: (0, _utils.areBlockTypesDisabled)(newState)
115
123
  });
116
124
  if (newPluginState.currentBlockType !== oldPluginState.currentBlockType || newPluginState.blockTypesDisabled !== oldPluginState.blockTypesDisabled) {
@@ -26,12 +26,17 @@ function FloatingToolbarComponent(_ref) {
26
26
  var _api$core, _api$blockType;
27
27
  return api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(api === null || api === void 0 || (_api$blockType = api.blockType) === null || _api$blockType === void 0 || (_api$blockType = _api$blockType.commands) === null || _api$blockType === void 0 ? void 0 : _api$blockType.setTextLevel(name, _analytics.INPUT_METHOD.FLOATING_TB));
28
28
  }, [api]);
29
+ var wrapBlockQuote = (0, _react.useCallback)(function () {
30
+ var _api$core2, _api$blockType2;
31
+ return api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions.execute(api === null || api === void 0 || (_api$blockType2 = api.blockType) === null || _api$blockType2 === void 0 || (_api$blockType2 = _api$blockType2.commands) === null || _api$blockType2 === void 0 ? void 0 : _api$blockType2.insertBlockQuote(_analytics.INPUT_METHOD.TOOLBAR));
32
+ }, [api]);
29
33
  return /*#__PURE__*/_react.default.createElement(_ToolbarBlockType.default, {
30
34
  isSmall: FloatingToolbarSettings.isSmall,
31
35
  isDisabled: FloatingToolbarSettings.disabled,
32
36
  isReducedSpacing: FloatingToolbarSettings.isToolbarReducedSpacing,
33
37
  setTextLevel: boundSetBlockType,
34
38
  pluginState: blockTypeState,
39
+ wrapBlockQuote: wrapBlockQuote,
35
40
  shouldUseDefaultRole: FloatingToolbarSettings.shouldUseDefaultRole,
36
41
  api: api
37
42
  });
@@ -20,15 +20,20 @@ function PrimaryToolbarComponent(_ref) {
20
20
  shouldUseDefaultRole = _ref.shouldUseDefaultRole;
21
21
  var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['blockType']),
22
22
  blockTypeState = _useSharedPluginState.blockTypeState;
23
- var boundSetBlockType = function boundSetBlockType(name) {
23
+ var boundSetBlockType = function boundSetBlockType(name, fromBlockQuote) {
24
24
  var _api$core, _api$blockType;
25
- return api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(api === null || api === void 0 || (_api$blockType = api.blockType) === null || _api$blockType === void 0 || (_api$blockType = _api$blockType.commands) === null || _api$blockType === void 0 ? void 0 : _api$blockType.setTextLevel(name, _analytics.INPUT_METHOD.TOOLBAR));
25
+ return api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(api === null || api === void 0 || (_api$blockType = api.blockType) === null || _api$blockType === void 0 || (_api$blockType = _api$blockType.commands) === null || _api$blockType === void 0 ? void 0 : _api$blockType.setTextLevel(name, _analytics.INPUT_METHOD.TOOLBAR, fromBlockQuote));
26
+ };
27
+ var wrapBlockQuote = function wrapBlockQuote() {
28
+ var _api$core2, _api$blockType2;
29
+ return api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 ? void 0 : _api$core2.actions.execute(api === null || api === void 0 || (_api$blockType2 = api.blockType) === null || _api$blockType2 === void 0 || (_api$blockType2 = _api$blockType2.commands) === null || _api$blockType2 === void 0 ? void 0 : _api$blockType2.insertBlockQuote(_analytics.INPUT_METHOD.TOOLBAR));
26
30
  };
27
31
  return /*#__PURE__*/_react.default.createElement(_ToolbarBlockType.default, {
28
32
  isSmall: isSmall,
29
33
  isDisabled: disabled,
30
34
  isReducedSpacing: isToolbarReducedSpacing,
31
35
  setTextLevel: boundSetBlockType,
36
+ wrapBlockQuote: wrapBlockQuote,
32
37
  pluginState: blockTypeState,
33
38
  popupsMountPoint: popupsMountPoint,
34
39
  popupsBoundariesElement: popupsBoundariesElement,
@@ -7,10 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
11
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
12
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
14
  var _react = _interopRequireDefault(require("react"));
16
15
  var _react2 = require("@emotion/react");
@@ -24,42 +23,40 @@ var _blocktypeButton = require("./blocktype-button");
24
23
  var _styled = require("./styled");
25
24
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
26
25
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
- function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = (0, _getPrototypeOf2.default)(t); if (r) { var s = (0, _getPrototypeOf2.default)(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return (0, _possibleConstructorReturn2.default)(this, e); }; }
26
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
28
27
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /**
29
28
  * @jsxRuntime classic
30
29
  * @jsx jsx
31
30
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
32
31
  // eslint-disable-next-line @repo/internal/react/no-class-components
33
32
  var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
34
- (0, _inherits2.default)(ToolbarBlockType, _React$PureComponent);
35
- var _super = _createSuper(ToolbarBlockType);
36
33
  function ToolbarBlockType() {
37
34
  var _this;
38
35
  (0, _classCallCheck2.default)(this, ToolbarBlockType);
39
36
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
40
37
  args[_key] = arguments[_key];
41
38
  }
42
- _this = _super.call.apply(_super, [this].concat(args));
43
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
39
+ _this = _callSuper(this, ToolbarBlockType, [].concat(args));
40
+ (0, _defineProperty2.default)(_this, "state", {
44
41
  active: false,
45
42
  isOpenedByKeyboard: false,
46
43
  typographyTheme: undefined,
47
44
  observer: null
48
45
  });
49
46
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onOpenChange", function (attrs) {
47
+ (0, _defineProperty2.default)(_this, "onOpenChange", function (attrs) {
51
48
  _this.setState(_objectSpread(_objectSpread({}, _this.state), {}, {
52
49
  active: attrs.isOpen,
53
50
  isOpenedByKeyboard: attrs.isOpenedByKeyboard
54
51
  }));
55
52
  });
56
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleTriggerClick", function () {
53
+ (0, _defineProperty2.default)(_this, "handleTriggerClick", function () {
57
54
  _this.onOpenChange({
58
55
  isOpen: !_this.state.active,
59
56
  isOpenedByKeyboard: false
60
57
  });
61
58
  });
62
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleTriggerByKeyboard", function (event) {
59
+ (0, _defineProperty2.default)(_this, "handleTriggerByKeyboard", function (event) {
63
60
  if (event.key === 'Enter' || event.key === ' ') {
64
61
  event.preventDefault();
65
62
  _this.onOpenChange({
@@ -68,12 +65,12 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
68
65
  });
69
66
  }
70
67
  });
71
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createItems", function () {
68
+ (0, _defineProperty2.default)(_this, "createItems", function () {
72
69
  var formatMessage = _this.props.intl.formatMessage;
73
70
  var _this$props$pluginSta = _this.props.pluginState,
74
71
  currentBlockType = _this$props$pluginSta.currentBlockType,
75
- availableBlockTypes = _this$props$pluginSta.availableBlockTypes;
76
- var items = availableBlockTypes.map(function (blockType, index) {
72
+ availableBlockTypesInDropdown = _this$props$pluginSta.availableBlockTypesInDropdown;
73
+ var items = availableBlockTypesInDropdown.map(function (blockType, index) {
77
74
  var isActive = currentBlockType === blockType;
78
75
  var tagName = blockType.tagName || 'p';
79
76
  var Tag = tagName;
@@ -101,12 +98,17 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
101
98
  items: items
102
99
  }];
103
100
  });
104
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleSelectBlockType", function (_ref) {
101
+ (0, _defineProperty2.default)(_this, "handleSelectBlockType", function (_ref) {
105
102
  var item = _ref.item,
106
103
  _ref$shouldCloseMenu = _ref.shouldCloseMenu,
107
104
  shouldCloseMenu = _ref$shouldCloseMenu === void 0 ? true : _ref$shouldCloseMenu;
108
105
  var blockType = item.value;
109
- _this.props.setTextLevel(blockType.name);
106
+ if (blockType.name === 'blockquote') {
107
+ _this.props.wrapBlockQuote(blockType.name);
108
+ } else {
109
+ var fromBlockQuote = _this.props.pluginState.currentBlockType.name === 'blockquote';
110
+ _this.props.setTextLevel(blockType.name, fromBlockQuote);
111
+ }
110
112
  if (shouldCloseMenu) {
111
113
  _this.setState(_objectSpread(_objectSpread({}, _this.state), {}, {
112
114
  active: false
@@ -115,7 +117,8 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
115
117
  });
116
118
  return _this;
117
119
  }
118
- (0, _createClass2.default)(ToolbarBlockType, [{
120
+ (0, _inherits2.default)(ToolbarBlockType, _React$PureComponent);
121
+ return (0, _createClass2.default)(ToolbarBlockType, [{
119
122
  key: "componentDidMount",
120
123
  value: function componentDidMount() {
121
124
  var _this2 = this;
@@ -155,6 +158,7 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
155
158
  currentBlockType = _this$props$pluginSta2.currentBlockType,
156
159
  blockTypesDisabled = _this$props$pluginSta2.blockTypesDisabled,
157
160
  availableBlockTypes = _this$props$pluginSta2.availableBlockTypes,
161
+ availableBlockTypesInDropdown = _this$props$pluginSta2.availableBlockTypesInDropdown,
158
162
  shouldUseDefaultRole = _this$props.shouldUseDefaultRole,
159
163
  formatMessage = _this$props.intl.formatMessage,
160
164
  api = _this$props.api;
@@ -164,12 +168,12 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
164
168
  if (isHeadingDisabled) {
165
169
  return null;
166
170
  }
167
- var blockTypeTitles = availableBlockTypes.filter(function (blockType) {
171
+ var blockTypeTitles = availableBlockTypesInDropdown.filter(function (blockType) {
168
172
  return blockType.name === currentBlockType.name;
169
173
  }).map(function (blockType) {
170
174
  return blockType.title;
171
175
  });
172
- if (!this.props.isDisabled && !blockTypesDisabled) {
176
+ if (!this.props.isDisabled && (!blockTypesDisabled || currentBlockType.name === 'blockquote')) {
173
177
  var items = this.createItems();
174
178
  return (
175
179
  // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage, @atlaskit/ui-styling-standard/no-imported-style-values -- Ignored via go/DSP-18766
@@ -235,6 +239,5 @@ var ToolbarBlockType = /*#__PURE__*/function (_React$PureComponent) {
235
239
  );
236
240
  }
237
241
  }]);
238
- return ToolbarBlockType;
239
242
  }(_react.default.PureComponent);
240
243
  var _default = exports.default = (0, _reactIntlNext.injectIntl)(ToolbarBlockType);
@@ -20,7 +20,7 @@ var blockTypeMenuItemStyle = exports.blockTypeMenuItemStyle = function blockType
20
20
  return function () {
21
21
  return (0, _react.css)(
22
22
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
23
- (0, _styles.headingsSharedStyles)(typographyTheme), {
23
+ tagName === 'blockquote' ? _styles.blockquoteSharedStyles : (0, _styles.headingsSharedStyles)(typographyTheme), {
24
24
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
25
25
  '>': {
26
26
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
@@ -7,6 +7,7 @@ exports.areBlockTypesDisabled = areBlockTypesDisabled;
7
7
  exports.isNodeAWrappingBlockNode = exports.createWrappingTextBlockRule = exports.createJoinNodesRule = void 0;
8
8
  var _utils = require("@atlaskit/editor-common/utils");
9
9
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
+ var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
10
11
  var _blockTypes = require("./block-types");
11
12
  var isNodeAWrappingBlockNode = exports.isNodeAWrappingBlockNode = function isNodeAWrappingBlockNode(node) {
12
13
  if (!node) {
@@ -82,7 +83,22 @@ function getSelectedWrapperNodes(state) {
82
83
  */
83
84
  function areBlockTypesDisabled(state) {
84
85
  var nodesTypes = getSelectedWrapperNodes(state);
85
- var panel = state.schema.nodes.panel;
86
+ var _state$schema$nodes2 = state.schema.nodes,
87
+ panel = _state$schema$nodes2.panel,
88
+ blockquote = _state$schema$nodes2.blockquote;
89
+ if ((0, _experiments.editorExperiment)('platform_editor_blockquote_in_text_formatting_menu', true)) {
90
+ var hasQuote = false;
91
+ var _state$selection2 = state.selection,
92
+ $from = _state$selection2.$from,
93
+ $to = _state$selection2.$to;
94
+ state.doc.nodesBetween($from.pos, $to.pos, function (node) {
95
+ hasQuote = node.type === blockquote;
96
+ return !hasQuote;
97
+ });
98
+ return nodesTypes.filter(function (type) {
99
+ return type !== panel;
100
+ }).length > 0 || hasQuote;
101
+ }
86
102
  return nodesTypes.filter(function (type) {
87
103
  return type !== panel;
88
104
  }).length > 0;
@@ -7,7 +7,7 @@ import { IconHeading, IconQuote } from '@atlaskit/editor-common/quick-insert';
7
7
  import { ToolbarSize } from '@atlaskit/editor-common/types';
8
8
  import { fg } from '@atlaskit/platform-feature-flags';
9
9
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
10
- import { setBlockTypeWithAnalytics, insertBlockQuoteWithAnalytics } from './pm-plugins/commands/block-type';
10
+ import { setBlockTypeWithAnalytics, insertBlockQuoteWithAnalytics, insertBlockQuoteWithAnalyticsCommand } from './pm-plugins/commands/block-type';
11
11
  import inputRulePlugin from './pm-plugins/input-rule';
12
12
  import keymapPlugin from './pm-plugins/keymap';
13
13
  import { createPlugin, pluginKey } from './pm-plugins/main';
@@ -143,7 +143,7 @@ const blockTypePlugin = ({
143
143
  name: 'blockType',
144
144
  plugin: ({
145
145
  dispatch
146
- }) => createPlugin(api, dispatch, options && options.lastNodeMustBeParagraph)
146
+ }) => createPlugin(api, dispatch, options && options.lastNodeMustBeParagraph, options === null || options === void 0 ? void 0 : options.includeBlockQuoteAsTextstyleOption)
147
147
  }, {
148
148
  name: 'blockTypeInputRule',
149
149
  plugin: ({
@@ -174,9 +174,13 @@ const blockTypePlugin = ({
174
174
  }
175
175
  },
176
176
  commands: {
177
- setTextLevel(level, inputMethod) {
177
+ setTextLevel(level, inputMethod, fromBlockQuote = false) {
178
178
  var _api$analytics4;
179
- return setBlockTypeWithAnalytics(level, inputMethod, api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
179
+ return setBlockTypeWithAnalytics(level, inputMethod, api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, fromBlockQuote);
180
+ },
181
+ insertBlockQuote(inputMethod) {
182
+ var _api$analytics5;
183
+ return insertBlockQuoteWithAnalyticsCommand(inputMethod, api === null || api === void 0 ? void 0 : (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions);
180
184
  }
181
185
  },
182
186
  getSharedState(editorState) {
@@ -213,9 +217,9 @@ const blockTypePlugin = ({
213
217
  }
214
218
  },
215
219
  quickInsert: intl => {
216
- var _api$analytics5, _api$analytics6;
220
+ var _api$analytics6, _api$analytics7;
217
221
  const exclude = options && options.allowBlockType && options.allowBlockType.exclude ? options.allowBlockType.exclude : [];
218
- return [...blockquotePluginOptions(intl, exclude.indexOf('blockquote') === -1, api === null || api === void 0 ? void 0 : (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions), ...headingPluginOptions(intl, exclude.indexOf('heading') === -1, api === null || api === void 0 ? void 0 : (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions)];
222
+ return [...blockquotePluginOptions(intl, exclude.indexOf('blockquote') === -1, api === null || api === void 0 ? void 0 : (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions), ...headingPluginOptions(intl, exclude.indexOf('heading') === -1, api === null || api === void 0 ? void 0 : (_api$analytics7 = api.analytics) === null || _api$analytics7 === void 0 ? void 0 : _api$analytics7.actions)];
219
223
  }
220
224
  }
221
225
  };