@atlaskit/editor-plugin-block-type 4.0.10 → 4.0.12

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 (62) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/blockTypePlugin.js +9 -11
  3. package/dist/cjs/pm-plugins/block-types.js +9 -2
  4. package/dist/cjs/pm-plugins/commands/block-type.js +63 -15
  5. package/dist/cjs/pm-plugins/commands/wrapSelectionIn.js +61 -0
  6. package/dist/cjs/pm-plugins/keymap.js +6 -4
  7. package/dist/cjs/pm-plugins/main.js +15 -7
  8. package/dist/cjs/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  9. package/dist/cjs/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  10. package/dist/cjs/pm-plugins/ui/ToolbarBlockType/index.js +22 -19
  11. package/dist/cjs/pm-plugins/ui/ToolbarBlockType/styled.js +1 -1
  12. package/dist/cjs/pm-plugins/utils.js +17 -1
  13. package/dist/es2019/blockTypePlugin.js +11 -9
  14. package/dist/es2019/index.js +3 -0
  15. package/dist/es2019/pm-plugins/block-types.js +8 -1
  16. package/dist/es2019/pm-plugins/commands/block-type.js +61 -13
  17. package/dist/es2019/pm-plugins/commands/wrapSelectionIn.js +54 -0
  18. package/dist/es2019/pm-plugins/keymap.js +3 -1
  19. package/dist/es2019/pm-plugins/main.js +12 -6
  20. package/dist/es2019/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  21. package/dist/es2019/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  22. package/dist/es2019/pm-plugins/ui/ToolbarBlockType/index.js +12 -6
  23. package/dist/es2019/pm-plugins/ui/ToolbarBlockType/styled.js +2 -2
  24. package/dist/es2019/pm-plugins/utils.js +15 -1
  25. package/dist/es2019/ui/consts.js +3 -0
  26. package/dist/esm/blockTypePlugin.js +11 -8
  27. package/dist/esm/index.js +3 -0
  28. package/dist/esm/pm-plugins/block-types.js +8 -1
  29. package/dist/esm/pm-plugins/commands/block-type.js +62 -15
  30. package/dist/esm/pm-plugins/commands/wrapSelectionIn.js +55 -0
  31. package/dist/esm/pm-plugins/keymap.js +3 -1
  32. package/dist/esm/pm-plugins/main.js +14 -6
  33. package/dist/esm/pm-plugins/ui/FloatingToolbarComponent.js +5 -0
  34. package/dist/esm/pm-plugins/ui/PrimaryToolbarComponent.js +7 -2
  35. package/dist/esm/pm-plugins/ui/ToolbarBlockType/index.js +22 -19
  36. package/dist/esm/pm-plugins/ui/ToolbarBlockType/styled.js +2 -2
  37. package/dist/esm/pm-plugins/utils.js +17 -1
  38. package/dist/esm/ui/consts.js +3 -0
  39. package/dist/types/blockTypePlugin.d.ts +0 -2
  40. package/dist/types/blockTypePluginType.d.ts +2 -1
  41. package/dist/types/index.d.ts +1 -1
  42. package/dist/types/pm-plugins/block-types.d.ts +1 -0
  43. package/dist/types/pm-plugins/commands/block-type.d.ts +6 -5
  44. package/dist/types/pm-plugins/commands/wrapSelectionIn.d.ts +3 -0
  45. package/dist/types/pm-plugins/main.d.ts +3 -1
  46. package/dist/types/pm-plugins/types.d.ts +1 -0
  47. package/dist/types/pm-plugins/ui/ToolbarBlockType/index.d.ts +2 -1
  48. package/dist/types-ts4.5/blockTypePlugin.d.ts +0 -2
  49. package/dist/types-ts4.5/blockTypePluginType.d.ts +2 -1
  50. package/dist/types-ts4.5/index.d.ts +1 -1
  51. package/dist/types-ts4.5/pm-plugins/block-types.d.ts +1 -0
  52. package/dist/types-ts4.5/pm-plugins/commands/block-type.d.ts +6 -5
  53. package/dist/types-ts4.5/pm-plugins/commands/wrapSelectionIn.d.ts +3 -0
  54. package/dist/types-ts4.5/pm-plugins/main.d.ts +3 -1
  55. package/dist/types-ts4.5/pm-plugins/types.d.ts +1 -0
  56. package/dist/types-ts4.5/pm-plugins/ui/ToolbarBlockType/index.d.ts +2 -1
  57. package/package.json +6 -6
  58. package/dist/cjs/pm-plugins/commands/index.js +0 -62
  59. package/dist/es2019/pm-plugins/commands/index.js +0 -3
  60. package/dist/esm/pm-plugins/commands/index.js +0 -3
  61. package/dist/types/pm-plugins/commands/index.d.ts +0 -4
  62. package/dist/types-ts4.5/pm-plugins/commands/index.d.ts +0 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/editor-plugin-block-type
2
2
 
3
+ ## 4.0.12
4
+
5
+ ### Patch Changes
6
+
7
+ - [#180067](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/180067)
8
+ [`fdee6c449ca83`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/fdee6c449ca83) -
9
+ [ux] Adding block quote as an option to the text formatting menu for full page editors
10
+ - Updated dependencies
11
+
12
+ ## 4.0.11
13
+
14
+ ### Patch Changes
15
+
16
+ - [#176596](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/176596)
17
+ [`86e9b63cc47f0`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/86e9b63cc47f0) -
18
+ Remove internal re-exports
19
+ - Updated dependencies
20
+
3
21
  ## 4.0.10
4
22
 
5
23
  ### Patch Changes
@@ -5,12 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.blockTypePlugin = void 0;
8
- Object.defineProperty(exports, "pluginKey", {
9
- enumerable: true,
10
- get: function get() {
11
- return _main.pluginKey;
12
- }
13
- });
14
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
9
  var _react = _interopRequireDefault(require("react"));
16
10
  var _adfSchema = require("@atlaskit/adf-schema");
@@ -21,7 +15,6 @@ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
21
15
  var _types = require("@atlaskit/editor-common/types");
22
16
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
23
17
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
24
- var _commands = require("./pm-plugins/commands");
25
18
  var _blockType = require("./pm-plugins/commands/block-type");
26
19
  var _inputRule = _interopRequireDefault(require("./pm-plugins/input-rule"));
27
20
  var _keymap = _interopRequireDefault(require("./pm-plugins/keymap"));
@@ -160,7 +153,7 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
160
153
  name: 'blockType',
161
154
  plugin: function plugin(_ref5) {
162
155
  var dispatch = _ref5.dispatch;
163
- 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);
164
157
  }
165
158
  }, {
166
159
  name: 'blockTypeInputRule',
@@ -192,7 +185,12 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
192
185
  commands: {
193
186
  setTextLevel: function setTextLevel(level, inputMethod) {
194
187
  var _api$analytics4;
195
- return (0, _commands.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);
196
194
  }
197
195
  },
198
196
  getSharedState: function getSharedState(editorState) {
@@ -229,9 +227,9 @@ var blockTypePlugin = exports.blockTypePlugin = function blockTypePlugin(_ref3)
229
227
  }
230
228
  },
231
229
  quickInsert: function quickInsert(intl) {
232
- var _api$analytics5, _api$analytics6;
230
+ var _api$analytics6, _api$analytics7;
233
231
  var exclude = options && options.allowBlockType && options.allowBlockType.exclude ? options.allowBlockType.exclude : [];
234
- 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)));
235
233
  }
236
234
  }
237
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,6 +4,7 @@ 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;
@@ -13,8 +14,10 @@ exports.setNormalTextWithAnalytics = setNormalTextWithAnalytics;
13
14
  var _analytics = require("@atlaskit/editor-common/analytics");
14
15
  var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
15
16
  var _utils = require("@atlaskit/editor-common/utils");
17
+ var _model = require("@atlaskit/editor-prosemirror/model");
16
18
  var _editorTables = require("@atlaskit/editor-tables");
17
19
  var _blockTypes = require("../block-types");
20
+ var _wrapSelectionIn = require("./wrapSelectionIn");
18
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; } } }; }
19
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; } }
20
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; }
@@ -36,7 +39,7 @@ function setBlockType(name) {
36
39
  return null;
37
40
  };
38
41
  }
39
- function setHeading(level) {
42
+ function setHeading(level, fromBlockQuote) {
40
43
  return function (_ref2) {
41
44
  var tr = _ref2.tr;
42
45
  var selection = tr.selection,
@@ -45,32 +48,45 @@ function setHeading(level) {
45
48
  ranges.forEach(function (_ref3) {
46
49
  var $from = _ref3.$from,
47
50
  $to = _ref3.$to;
48
- tr.setBlockType($from.pos, $to.pos, schema.nodes.heading, {
49
- level: level
50
- });
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
+ }
51
67
  });
52
68
  return tr;
53
69
  };
54
70
  }
55
- function setBlockTypeWithAnalytics(name, inputMethod, editorAnalyticsApi) {
71
+ function setBlockTypeWithAnalytics(name, inputMethod, editorAnalyticsApi, fromBlockQuote) {
56
72
  return function (_ref4) {
57
73
  var tr = _ref4.tr;
58
74
  var nodes = tr.doc.type.schema.nodes;
59
75
  if (name === 'normal' && nodes.paragraph) {
60
- return setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi)({
76
+ return setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi, fromBlockQuote)({
61
77
  tr: tr
62
78
  });
63
79
  }
64
80
  var headingBlockType = _blockTypes.HEADINGS_BY_NAME[name];
65
81
  if (headingBlockType && nodes.heading && headingBlockType.level) {
66
- return setHeadingWithAnalytics(headingBlockType.level, inputMethod, editorAnalyticsApi)({
82
+ return setHeadingWithAnalytics(headingBlockType.level, inputMethod, editorAnalyticsApi, fromBlockQuote)({
67
83
  tr: tr
68
84
  });
69
85
  }
70
86
  return null;
71
87
  };
72
88
  }
73
- function setNormalText() {
89
+ function setNormalText(fromBlockQuote) {
74
90
  return function (_ref5) {
75
91
  var tr = _ref5.tr;
76
92
  var selection = tr.selection,
@@ -79,7 +95,15 @@ function setNormalText() {
79
95
  ranges.forEach(function (_ref6) {
80
96
  var $from = _ref6.$from,
81
97
  $to = _ref6.$to;
82
- 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
+ }
83
107
  });
84
108
  return tr;
85
109
  };
@@ -121,7 +145,7 @@ function withCurrentHeadingLevel(fn) {
121
145
  });
122
146
  };
123
147
  }
124
- function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi) {
148
+ function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi, fromBlockQuote) {
125
149
  return withCurrentHeadingLevel(function (previousHeadingLevel) {
126
150
  return function (_ref8) {
127
151
  var tr = _ref8.tr;
@@ -136,13 +160,13 @@ function setNormalTextWithAnalytics(inputMethod, editorAnalyticsApi) {
136
160
  previousHeadingLevel: previousHeadingLevel
137
161
  }
138
162
  })(tr);
139
- return setNormalText()({
163
+ return setNormalText(fromBlockQuote)({
140
164
  tr: tr
141
165
  });
142
166
  };
143
167
  });
144
168
  }
145
- var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHeadingWithAnalytics(newHeadingLevel, inputMethod, editorAnalyticsApi) {
169
+ var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHeadingWithAnalytics(newHeadingLevel, inputMethod, editorAnalyticsApi, fromBlockQuote) {
146
170
  return withCurrentHeadingLevel(function (previousHeadingLevel) {
147
171
  return function (_ref9) {
148
172
  var tr = _ref9.tr;
@@ -157,7 +181,7 @@ var setHeadingWithAnalytics = exports.setHeadingWithAnalytics = function setHead
157
181
  previousHeadingLevel: previousHeadingLevel
158
182
  }
159
183
  })(tr);
160
- return setHeading(newHeadingLevel)({
184
+ return setHeading(newHeadingLevel, fromBlockQuote)({
161
185
  tr: tr
162
186
  });
163
187
  };
@@ -192,9 +216,33 @@ var insertBlockQuoteWithAnalytics = exports.insertBlockQuoteWithAnalytics = func
192
216
  }
193
217
  })(insertBlockQuote());
194
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
+ }
195
243
  var cleanUpAtTheStartOfDocument = exports.cleanUpAtTheStartOfDocument = function cleanUpAtTheStartOfDocument(state, dispatch) {
196
- var _ref10 = state.selection,
197
- $cursor = _ref10.$cursor;
244
+ var _ref11 = state.selection,
245
+ $cursor = _ref11.$cursor;
198
246
  if ($cursor && !$cursor.nodeBefore && !$cursor.nodeAfter && $cursor.pos === 1) {
199
247
  var tr = state.tr,
200
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
+ }
@@ -11,12 +11,14 @@ var _utils = require("@atlaskit/editor-common/utils");
11
11
  var _commands = require("@atlaskit/editor-prosemirror/commands");
12
12
  var _history = require("@atlaskit/editor-prosemirror/history");
13
13
  var blockTypes = _interopRequireWildcard(require("./block-types"));
14
- var _commands2 = require("./commands");
14
+ var _blockType = require("./commands/block-type");
15
+ var _deleteAndMoveCursor = require("./commands/delete-and-move-cursor");
16
+ var _deleteBlockContent = require("./commands/delete-block-content");
15
17
  var _utils2 = require("./utils");
16
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
- var backspaceCommand = (0, _commands.chainCommands)(_commands2.cleanUpAtTheStartOfDocument, (0, _commands2.deleteBlockContent)(_utils2.isNodeAWrappingBlockNode), _commands2.deleteAndMoveCursor);
19
- var del = (0, _commands.chainCommands)((0, _utils.deleteEmptyParagraphAndMoveBlockUp)(_utils2.isNodeAWrappingBlockNode), (0, _commands2.deleteBlockContent)(_utils2.isNodeAWrappingBlockNode), _commands2.deleteAndMoveCursor);
20
+ var backspaceCommand = (0, _commands.chainCommands)(_blockType.cleanUpAtTheStartOfDocument, (0, _deleteBlockContent.deleteBlockContent)(_utils2.isNodeAWrappingBlockNode), _deleteAndMoveCursor.deleteAndMoveCursor);
21
+ var del = (0, _commands.chainCommands)((0, _utils.deleteEmptyParagraphAndMoveBlockUp)(_utils2.isNodeAWrappingBlockNode), (0, _deleteBlockContent.deleteBlockContent)(_utils2.isNodeAWrappingBlockNode), _deleteAndMoveCursor.deleteAndMoveCursor);
20
22
  function keymapPlugin(editorAnalyticsApi, schema, _featureFlags) {
21
23
  var list = {};
22
24
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.insertNewLine.common, (0, _utils.insertNewLineWithAnalytics)(editorAnalyticsApi), list);
@@ -28,7 +30,7 @@ function keymapPlugin(editorAnalyticsApi, schema, _featureFlags) {
28
30
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.deleteKey.common, del, list);
29
31
  (0, _keymaps.bindKeymapWithCommand)(_keymaps.forwardDelete.mac, del, list);
30
32
  if (schema.nodes[blockTypes.BLOCK_QUOTE.nodeName]) {
31
- (0, _keymaps.bindKeymapWithCommand)((0, _keymaps.findShortcutByKeymap)(_keymaps.toggleBlockQuote), (0, _commands2.insertBlockQuoteWithAnalytics)(_analytics.INPUT_METHOD.KEYBOARD, editorAnalyticsApi), list);
33
+ (0, _keymaps.bindKeymapWithCommand)((0, _keymaps.findShortcutByKeymap)(_keymaps.toggleBlockQuote), (0, _blockType.insertBlockQuoteWithAnalytics)(_analytics.INPUT_METHOD.KEYBOARD, editorAnalyticsApi), list);
32
34
  }
33
35
  return (0, _keymaps.keymap)(list);
34
36
  }
@@ -12,7 +12,7 @@ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
12
  var _state = require("@atlaskit/editor-prosemirror/state");
13
13
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
14
14
  var _blockTypes = require("./block-types");
15
- var _commands = require("./commands");
15
+ var _blockType = require("./commands/block-type");
16
16
  var _consts = require("./consts");
17
17
  var _utils = require("./utils");
18
18
  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; }
@@ -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,18 +69,19 @@ 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;
73
76
  };
74
77
  var autoformatHeading = function autoformatHeading(headingLevel, editorAnalyticsApi) {
75
78
  if (headingLevel === 0) {
76
- return (0, _commands.setNormalTextWithAnalytics)(_analytics.INPUT_METHOD.FORMATTING, editorAnalyticsApi);
79
+ return (0, _blockType.setNormalTextWithAnalytics)(_analytics.INPUT_METHOD.FORMATTING, editorAnalyticsApi);
77
80
  }
78
- return (0, _commands.setHeadingWithAnalytics)(headingLevel, _analytics.INPUT_METHOD.FORMATTING, editorAnalyticsApi);
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