@atlaskit/editor-common 111.19.1 → 111.19.3

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 (48) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-jira/tsconfig.json +3 -0
  4. package/afm-products/tsconfig.json +3 -0
  5. package/dist/cjs/block-menu/index.js +6 -0
  6. package/dist/cjs/block-menu/key.js +2 -1
  7. package/dist/cjs/experiences/ExperienceCheckPopupMutation.js +220 -0
  8. package/dist/cjs/experiences/index.js +7 -0
  9. package/dist/cjs/keymaps/index.js +5 -1
  10. package/dist/cjs/messages/block-menu.js +8 -1
  11. package/dist/cjs/messages/syncBlock.js +5 -0
  12. package/dist/cjs/monitoring/error.js +1 -1
  13. package/dist/cjs/ui/DropList/index.js +1 -1
  14. package/dist/es2019/block-menu/index.js +1 -1
  15. package/dist/es2019/block-menu/key.js +1 -0
  16. package/dist/es2019/experiences/ExperienceCheckPopupMutation.js +141 -0
  17. package/dist/es2019/experiences/index.js +1 -0
  18. package/dist/es2019/keymaps/index.js +5 -1
  19. package/dist/es2019/messages/block-menu.js +8 -1
  20. package/dist/es2019/messages/syncBlock.js +5 -0
  21. package/dist/es2019/monitoring/error.js +1 -1
  22. package/dist/es2019/ui/DropList/index.js +1 -1
  23. package/dist/esm/block-menu/index.js +1 -1
  24. package/dist/esm/block-menu/key.js +1 -0
  25. package/dist/esm/experiences/ExperienceCheckPopupMutation.js +215 -0
  26. package/dist/esm/experiences/index.js +1 -0
  27. package/dist/esm/keymaps/index.js +5 -1
  28. package/dist/esm/messages/block-menu.js +8 -1
  29. package/dist/esm/messages/syncBlock.js +5 -0
  30. package/dist/esm/monitoring/error.js +1 -1
  31. package/dist/esm/ui/DropList/index.js +1 -1
  32. package/dist/types/block-menu/index.d.ts +1 -1
  33. package/dist/types/block-menu/key.d.ts +1 -0
  34. package/dist/types/experiences/ExperienceCheckPopupMutation.d.ts +46 -0
  35. package/dist/types/experiences/index.d.ts +2 -0
  36. package/dist/types/messages/block-menu.d.ts +5 -0
  37. package/dist/types/messages/syncBlock.d.ts +5 -0
  38. package/dist/types/provider-factory/quick-insert-provider.d.ts +0 -2
  39. package/dist/types/types/type-ahead.d.ts +1 -0
  40. package/dist/types-ts4.5/block-menu/index.d.ts +1 -1
  41. package/dist/types-ts4.5/block-menu/key.d.ts +1 -0
  42. package/dist/types-ts4.5/experiences/ExperienceCheckPopupMutation.d.ts +46 -0
  43. package/dist/types-ts4.5/experiences/index.d.ts +2 -0
  44. package/dist/types-ts4.5/messages/block-menu.d.ts +5 -0
  45. package/dist/types-ts4.5/messages/syncBlock.d.ts +5 -0
  46. package/dist/types-ts4.5/provider-factory/quick-insert-provider.d.ts +0 -2
  47. package/dist/types-ts4.5/types/type-ahead.d.ts +1 -0
  48. package/package.json +6 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 111.19.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`57f499d6937db`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/57f499d6937db) -
8
+ Extract ExperienceCheckPopupMutation logic to be reusable for block menu experience tracking
9
+ - [`7ea2e225c0abb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/7ea2e225c0abb) -
10
+ [ux] Minor styling, wording changes for block menu and sync blocks
11
+
12
+ ## 111.19.2
13
+
14
+ ### Patch Changes
15
+
16
+ - [`e18437c28f9ab`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/e18437c28f9ab) -
17
+ Improve synced blocks robustness.
18
+ - Updated dependencies
19
+
3
20
  ## 111.19.1
4
21
 
5
22
  ### Patch Changes
@@ -44,6 +44,9 @@
44
44
  {
45
45
  "path": "../../../uip/atlassian-context/afm-cc/tsconfig.json"
46
46
  },
47
+ {
48
+ "path": "../../../helpers/browser-apis/afm-cc/tsconfig.json"
49
+ },
47
50
  {
48
51
  "path": "../../../design-system/button/afm-cc/tsconfig.json"
49
52
  },
@@ -44,6 +44,9 @@
44
44
  {
45
45
  "path": "../../../uip/atlassian-context/afm-jira/tsconfig.json"
46
46
  },
47
+ {
48
+ "path": "../../../helpers/browser-apis/afm-jira/tsconfig.json"
49
+ },
47
50
  {
48
51
  "path": "../../../design-system/button/afm-jira/tsconfig.json"
49
52
  },
@@ -44,6 +44,9 @@
44
44
  {
45
45
  "path": "../../../uip/atlassian-context/afm-products/tsconfig.json"
46
46
  },
47
+ {
48
+ "path": "../../../helpers/browser-apis/afm-products/tsconfig.json"
49
+ },
47
50
  {
48
51
  "path": "../../../design-system/button/afm-products/tsconfig.json"
49
52
  },
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "BLOCK_MENU_SECTION_RANK", {
57
57
  return _rankDeprecated.BLOCK_MENU_SECTION_RANK;
58
58
  }
59
59
  });
60
+ Object.defineProperty(exports, "BLOCK_MENU_TEST_ID", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _key.BLOCK_MENU_TEST_ID;
64
+ }
65
+ });
60
66
  Object.defineProperty(exports, "COPY_LINK_MENU_ITEM", {
61
67
  enumerable: true,
62
68
  get: function get() {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TRANSFORM_SUGGESTED_MENU_SECTION = exports.TRANSFORM_SUGGESTED_MENU_ITEM = exports.TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM = exports.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM = exports.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM = exports.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM = exports.TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM = exports.TRANSFORM_STRUCTURE_MENU_SECTION = exports.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM = exports.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM = exports.TRANSFORM_STRUCTURE_DECISION_MENU_ITEM = exports.TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM = exports.TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM = exports.TRANSFORM_MENU_SECTION = exports.TRANSFORM_MENU_ITEM = exports.TRANSFORM_HEADINGS_MENU_SECTION = exports.TRANSFORM_HEADINGS_H6_MENU_ITEM = exports.TRANSFORM_HEADINGS_H5_MENU_ITEM = exports.TRANSFORM_HEADINGS_H4_MENU_ITEM = exports.TRANSFORM_HEADINGS_H3_MENU_ITEM = exports.TRANSFORM_HEADINGS_H2_MENU_ITEM = exports.TRANSFORM_HEADINGS_H1_MENU_ITEM = exports.TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM = exports.TRANSFORM_CREATE_MENU_SECTION = exports.TRANSFORM_CLEAR_MENU_SECTION = exports.TRANSFORM_CLEAR_MENU_ITEM = exports.POSITION_MOVE_UP_MENU_ITEM = exports.POSITION_MOVE_DOWN_MENU_ITEM = exports.POSITION_MENU_SECTION = exports.DELETE_MENU_SECTION = exports.DELETE_MENU_ITEM = exports.BLOCK_MENU_ACTION_TEST_ID = exports.BLOCK_ACTIONS_MENU_SECTION = exports.BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM = exports.BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM = exports.BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM = void 0;
6
+ exports.TRANSFORM_SUGGESTED_MENU_SECTION = exports.TRANSFORM_SUGGESTED_MENU_ITEM = exports.TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM = exports.TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM = exports.TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM = exports.TRANSFORM_STRUCTURE_PANEL_MENU_ITEM = exports.TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM = exports.TRANSFORM_STRUCTURE_MENU_SECTION = exports.TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM = exports.TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM = exports.TRANSFORM_STRUCTURE_DECISION_MENU_ITEM = exports.TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM = exports.TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM = exports.TRANSFORM_MENU_SECTION = exports.TRANSFORM_MENU_ITEM = exports.TRANSFORM_HEADINGS_MENU_SECTION = exports.TRANSFORM_HEADINGS_H6_MENU_ITEM = exports.TRANSFORM_HEADINGS_H5_MENU_ITEM = exports.TRANSFORM_HEADINGS_H4_MENU_ITEM = exports.TRANSFORM_HEADINGS_H3_MENU_ITEM = exports.TRANSFORM_HEADINGS_H2_MENU_ITEM = exports.TRANSFORM_HEADINGS_H1_MENU_ITEM = exports.TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM = exports.TRANSFORM_CREATE_MENU_SECTION = exports.TRANSFORM_CLEAR_MENU_SECTION = exports.TRANSFORM_CLEAR_MENU_ITEM = exports.POSITION_MOVE_UP_MENU_ITEM = exports.POSITION_MOVE_DOWN_MENU_ITEM = exports.POSITION_MENU_SECTION = exports.DELETE_MENU_SECTION = exports.DELETE_MENU_ITEM = exports.BLOCK_MENU_TEST_ID = exports.BLOCK_MENU_ACTION_TEST_ID = exports.BLOCK_ACTIONS_MENU_SECTION = exports.BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM = exports.BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM = exports.BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM = void 0;
7
7
  // Transformation
8
8
 
9
9
  var TRANSFORM_MENU_SECTION = exports.TRANSFORM_MENU_SECTION = {
@@ -120,6 +120,7 @@ var DELETE_MENU_SECTION = exports.DELETE_MENU_SECTION = {
120
120
  var DELETE_MENU_ITEM = exports.DELETE_MENU_ITEM = {
121
121
  key: 'delete-menu-item'
122
122
  };
123
+ var BLOCK_MENU_TEST_ID = exports.BLOCK_MENU_TEST_ID = 'editor-block-menu';
123
124
 
124
125
  // Experience tracking test IDs
125
126
  // Used by experience tracking to detect menu action clicks
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ExperienceCheckPopupMutation = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _browserApis = require("@atlaskit/browser-apis");
12
+ var _consts = require("./consts");
13
+ var _experienceUtils = require("./experience-utils");
14
+ 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; } } }; }
15
+ 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; } }
16
+ 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; }
17
+ /**
18
+ * Popup check type determines how popups are observed based on their DOM location:
19
+ * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
20
+ * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
21
+ * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
22
+ */
23
+ var ExperienceCheckPopupMutation = exports.ExperienceCheckPopupMutation = /*#__PURE__*/function () {
24
+ function ExperienceCheckPopupMutation(_ref) {
25
+ var getEditorDom = _ref.getEditorDom,
26
+ getTarget = _ref.getTarget,
27
+ nestedElementQuery = _ref.nestedElementQuery,
28
+ _ref$type = _ref.type,
29
+ type = _ref$type === void 0 ? 'editorRoot' : _ref$type;
30
+ (0, _classCallCheck2.default)(this, ExperienceCheckPopupMutation);
31
+ (0, _defineProperty2.default)(this, "observers", []);
32
+ this.getEditorDom = getEditorDom;
33
+ this.getTarget = getTarget;
34
+ this.nestedElementQuery = nestedElementQuery;
35
+ this.type = type;
36
+ }
37
+
38
+ /**
39
+ * Returns the list of DOM elements to observe based on popup type.
40
+ */
41
+ return (0, _createClass2.default)(ExperienceCheckPopupMutation, [{
42
+ key: "getObserveTargets",
43
+ value: function getObserveTargets() {
44
+ switch (this.type) {
45
+ case 'inline':
46
+ return this.getInlineTargets();
47
+ case 'editorRoot':
48
+ return this.getEditorRootTargets();
49
+ case 'editorContent':
50
+ return this.getEditorContentTargets();
51
+ }
52
+ }
53
+
54
+ /**
55
+ * For 'editorContent' type: observe the target (mount point) and any existing
56
+ * [data-editor-popup] wrappers within it. Content-level popups and modals
57
+ * appear in portal containers.
58
+ */
59
+ }, {
60
+ key: "getEditorContentTargets",
61
+ value: function getEditorContentTargets() {
62
+ var target = this.getTarget();
63
+ if (!target) {
64
+ return [];
65
+ }
66
+ var targets = [target];
67
+ var wrappers = target.querySelectorAll('[data-editor-popup]');
68
+ var _iterator = _createForOfIteratorHelper(wrappers),
69
+ _step;
70
+ try {
71
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
72
+ var wrapper = _step.value;
73
+ targets.push(wrapper);
74
+ }
75
+ } catch (err) {
76
+ _iterator.e(err);
77
+ } finally {
78
+ _iterator.f();
79
+ }
80
+ return targets;
81
+ }
82
+
83
+ /**
84
+ * For 'inline' type: observe the target element directly.
85
+ * The caller is responsible for resolving the correct container
86
+ * (e.g. the toolbar button-group) via the getTarget function.
87
+ */
88
+ }, {
89
+ key: "getInlineTargets",
90
+ value: function getInlineTargets() {
91
+ var target = this.getTarget();
92
+ if (!target) {
93
+ return [];
94
+ }
95
+ return [target];
96
+ }
97
+
98
+ /**
99
+ * For 'editorRoot' type: observe the actual editor root container.
100
+ * The editorDom is the ProseMirror element, but popups appear as direct children
101
+ * of the parent .akEditor container. So we observe the parent of editorDom.
102
+ */
103
+ }, {
104
+ key: "getEditorRootTargets",
105
+ value: function getEditorRootTargets() {
106
+ var targets = [];
107
+ var editorDom = this.getEditorDom();
108
+ if (editorDom) {
109
+ var editorRoot = editorDom.closest('.akEditor') || editorDom.parentElement;
110
+ if (editorRoot instanceof HTMLElement) {
111
+ targets.push(editorRoot);
112
+ var wrappers = editorRoot.querySelectorAll('[data-editor-popup]');
113
+ var _iterator2 = _createForOfIteratorHelper(wrappers),
114
+ _step2;
115
+ try {
116
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
117
+ var wrapper = _step2.value;
118
+ targets.push(wrapper);
119
+ }
120
+ } catch (err) {
121
+ _iterator2.e(err);
122
+ } finally {
123
+ _iterator2.f();
124
+ }
125
+ }
126
+ }
127
+ return targets;
128
+ }
129
+ }, {
130
+ key: "start",
131
+ value: function start(callback) {
132
+ var _this = this;
133
+ this.stop();
134
+ var target = this.getTarget();
135
+ var doc = (0, _browserApis.getDocument)();
136
+ if (!target || !doc) {
137
+ callback({
138
+ status: 'failure',
139
+ reason: _consts.EXPERIENCE_FAILURE_REASON.DOM_MUTATION_TARGET_NOT_FOUND
140
+ });
141
+ return;
142
+ }
143
+ var observeTargets = this.getObserveTargets();
144
+ var query = this.nestedElementQuery;
145
+ var observe = function observe(el) {
146
+ var observer = new MutationObserver(onMutation);
147
+ observer.observe(el, {
148
+ childList: true
149
+ });
150
+ _this.observers.push(observer);
151
+ };
152
+ var onMutation = function onMutation(mutations) {
153
+ var _iterator3 = _createForOfIteratorHelper(mutations),
154
+ _step3;
155
+ try {
156
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
157
+ var mutation = _step3.value;
158
+ if (mutation.type !== 'childList') {
159
+ continue;
160
+ }
161
+ var _iterator4 = _createForOfIteratorHelper(mutation.addedNodes),
162
+ _step4;
163
+ try {
164
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
165
+ var node = _step4.value;
166
+ if (!(node instanceof HTMLElement)) {
167
+ continue;
168
+ }
169
+ var found = (0, _experienceUtils.popupWithNestedElement)(node, query) || node.matches(query) || !!node.querySelector(query);
170
+ if (found) {
171
+ callback({
172
+ status: 'success'
173
+ });
174
+ return;
175
+ }
176
+ }
177
+ } catch (err) {
178
+ _iterator4.e(err);
179
+ } finally {
180
+ _iterator4.f();
181
+ }
182
+ }
183
+ } catch (err) {
184
+ _iterator3.e(err);
185
+ } finally {
186
+ _iterator3.f();
187
+ }
188
+ };
189
+ var _iterator5 = _createForOfIteratorHelper(observeTargets),
190
+ _step5;
191
+ try {
192
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
193
+ var observeTarget = _step5.value;
194
+ observe(observeTarget);
195
+ }
196
+ } catch (err) {
197
+ _iterator5.e(err);
198
+ } finally {
199
+ _iterator5.f();
200
+ }
201
+ }
202
+ }, {
203
+ key: "stop",
204
+ value: function stop() {
205
+ var _iterator6 = _createForOfIteratorHelper(this.observers),
206
+ _step6;
207
+ try {
208
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
209
+ var observer = _step6.value;
210
+ observer.disconnect();
211
+ }
212
+ } catch (err) {
213
+ _iterator6.e(err);
214
+ } finally {
215
+ _iterator6.f();
216
+ }
217
+ this.observers = [];
218
+ }
219
+ }]);
220
+ }();
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "ExperienceCheckDomMutation", {
39
39
  return _ExperienceCheckDomMutation.ExperienceCheckDomMutation;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "ExperienceCheckPopupMutation", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _ExperienceCheckPopupMutation.ExperienceCheckPopupMutation;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "ExperienceCheckTimeout", {
43
49
  enumerable: true,
44
50
  get: function get() {
@@ -73,5 +79,6 @@ var _Experience = require("./Experience");
73
79
  var _consts = require("./consts");
74
80
  var _ExperienceCheckComposite = require("./ExperienceCheckComposite");
75
81
  var _ExperienceCheckDomMutation = require("./ExperienceCheckDomMutation");
82
+ var _ExperienceCheckPopupMutation = require("./ExperienceCheckPopupMutation");
76
83
  var _ExperienceCheckTimeout = require("./ExperienceCheckTimeout");
77
84
  var _experienceUtils = require("./experience-utils");
@@ -165,7 +165,11 @@ var redo = exports.redo = makeKeymap('Redo', 'Ctrl-y', 'Mod-Shift-z');
165
165
  var openHelp = exports.openHelp = makeKeyMapWithCommon('Open Help', 'Mod-/');
166
166
  var addLink = exports.addLink = makeKeyMapWithCommon('Link', 'Mod-k');
167
167
  var addInlineComment = exports.addInlineComment = makeKeyMapWithCommon('Annotate', 'Mod-Alt-c');
168
- var copyLinkToBlock = exports.copyLinkToBlock = makeKeyMapWithCommon('Copy link to block', 'Mod-Alt-a');
168
+ // [FEATURE FLAG: platform_editor_block_menu_v2_patch_3]
169
+ // Updated wording from "Copy link to block" to "Copy link to selection" for better UX clarity.
170
+ // The actual displayed text is conditionally shown in the UI component based on the flag.
171
+ // To clean up: This can remain as-is since it's the canonical name for the action.
172
+ var copyLinkToBlock = exports.copyLinkToBlock = makeKeyMapWithCommon('Copy link to selection', 'Mod-Alt-a');
169
173
  var submit = exports.submit = makeKeyMapWithCommon('Submit Content', 'Mod-Enter');
170
174
  var enter = exports.enter = makeKeyMapWithCommon('Enter', 'Enter');
171
175
  var shiftEnter = exports.shiftEnter = makeKeyMapWithCommon('Shift Enter', 'Shift-Enter');
@@ -24,9 +24,16 @@ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
24
24
  copyLink: {
25
25
  id: 'fabric.editor.block.menu.copy.link',
26
26
  defaultMessage: 'Copy link',
27
- description: 'Copy link to the selected block'
27
+ description: 'Copy link to the selected content'
28
28
  },
29
29
  copyLinkToBlock: {
30
+ id: 'fabric.editor.block.menu.copy.link.to.block',
31
+ defaultMessage: 'Copy link to selection',
32
+ description: 'Copy link to the selected content'
33
+ },
34
+ // [FEATURE FLAG: platform_editor_block_menu_v2_patch_3]
35
+ // Old message retained for flag-off state. To clean up: remove this when flag is removed.
36
+ copyLinkToBlockOld: {
30
37
  id: 'fabric.editor.block.menu.copy.link.to.block',
31
38
  defaultMessage: 'Copy link to block',
32
39
  description: 'Copy link to the selected block'
@@ -186,6 +186,11 @@ var syncBlockMessages = exports.syncBlockMessages = (0, _reactIntlNext.defineMes
186
186
  defaultMessage: 'You appear to be offline. Please connect to the internet to create synced content.',
187
187
  description: 'Description in flag which appears when a sync block cannot be created in offline mode'
188
188
  },
189
+ loadingSyncedContent: {
190
+ id: 'fabric.editor.syncedBlockLoadingSyncedContent',
191
+ defaultMessage: 'Loading synced content',
192
+ description: 'Accessible label for the loading spinner shown while synced block content is being fetched'
193
+ },
189
194
  generalErrorDescription: {
190
195
  id: 'fabric.editor.syncedBlockGeneralErrorDescription',
191
196
  defaultMessage: "We're unable to display this content at the moment.",
@@ -19,7 +19,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
19
19
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
20
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
21
21
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
22
- var packageVersion = "111.19.0";
22
+ var packageVersion = "111.19.2";
23
23
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
24
24
  // Remove URL as it has UGC
25
25
  // Ignored via go/ees007
@@ -24,7 +24,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
24
24
  * @jsx jsx
25
25
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "111.19.0";
27
+ var packageVersion = "111.19.2";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @atlaskit/editor/no-re-export */
2
2
  export { messages } from './messages';
3
- export { BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM, BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM, BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, DELETE_MENU_SECTION, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MOVE_UP_MENU_ITEM, POSITION_MOVE_DOWN_MENU_ITEM, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_ITEM, TRANSFORM_CLEAR_MENU_SECTION, TRANSFORM_CLEAR_MENU_ITEM, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_HEADINGS_H3_MENU_ITEM, TRANSFORM_HEADINGS_H4_MENU_ITEM, TRANSFORM_HEADINGS_H5_MENU_ITEM, TRANSFORM_HEADINGS_H6_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_DECISION_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_ITEM, TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM, BLOCK_MENU_ACTION_TEST_ID } from './key';
3
+ export { BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM, BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM, BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, DELETE_MENU_SECTION, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MOVE_UP_MENU_ITEM, POSITION_MOVE_DOWN_MENU_ITEM, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_ITEM, TRANSFORM_CLEAR_MENU_SECTION, TRANSFORM_CLEAR_MENU_ITEM, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_HEADINGS_H3_MENU_ITEM, TRANSFORM_HEADINGS_H4_MENU_ITEM, TRANSFORM_HEADINGS_H5_MENU_ITEM, TRANSFORM_HEADINGS_H6_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_DECISION_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_ITEM, TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM, BLOCK_MENU_ACTION_TEST_ID, BLOCK_MENU_TEST_ID } from './key';
4
4
  export { FORMAT_HEADING_1_MENU_ITEM, FORMAT_HEADING_2_MENU_ITEM, FORMAT_HEADING_3_MENU_ITEM, FORMAT_HEADING_4_MENU_ITEM, FORMAT_HEADING_5_MENU_ITEM, FORMAT_HEADING_6_MENU_ITEM, FORMAT_PARAGRAPH_MENU_ITEM, FORMAT_QUOTE_MENU_ITEM, FORMAT_EXPAND_MENU_ITEM, FORMAT_LAYOUT_MENU_ITEM, FORMAT_PANEL_MENU_ITEM, FORMAT_CODE_BLOCK_MENU_ITEM, FORMAT_BULLETED_LIST_MENU_ITEM, FORMAT_NUMBERED_LIST_MENU_ITEM, FORMAT_TASK_LIST_MENU_ITEM, COPY_MENU_SECTION, MOVE_UP_DOWN_MENU_SECTION, COPY_LINK_MENU_ITEM, MOVE_UP_MENU_ITEM, MOVE_DOWN_MENU_ITEM, NESTED_FORMAT_MENU_SECTION, FORMAT_MENU_ITEM, NESTED_FORMAT_MENU, PRIMARY_MENU_SECTION, ADD_BLOCKS_MENU_SECTION, CREATE_SYNCED_BLOCK_MENU_ITEM } from './key-deprecated';
5
5
  export { MAIN_BLOCK_MENU_SECTION_RANK, TRANSFORM_MENU_SECTION_RANK, TRANSFORM_MENU_ITEM_RANK, TRANSFORM_HEADINGS_MENU_SECTION_RANK, TRANSFORM_STRUCTURE_MENU_SECTION_RANK, TRANSFORM_CLEAR_MENU_SECTION_RANK, BLOCK_ACTIONS_MENU_SECTION_RANK, POSITION_MENU_SECTION_RANK, DELETE_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_SECTION_RANK, TRANSFORM_CREATE_MENU_SECTION_RANK } from './rank';
6
6
  export { FORMAT_NESTED_MENU_RANK, FORMAT_NESTED_MENU_RANK_REVISED, BLOCK_MENU_SECTION_RANK, PRIMARY_MENU_SECTION_RANK, COPY_MENU_SECTION_RANK, DELETE_SECTION_RANK, MOVE_BLOCK_SECTION_RANK, ADD_BLOCKS_MENU_SECTION_RANK } from './rank-deprecated';
@@ -114,6 +114,7 @@ export const DELETE_MENU_SECTION = {
114
114
  export const DELETE_MENU_ITEM = {
115
115
  key: 'delete-menu-item'
116
116
  };
117
+ export const BLOCK_MENU_TEST_ID = 'editor-block-menu';
117
118
 
118
119
  // Experience tracking test IDs
119
120
  // Used by experience tracking to detect menu action clicks
@@ -0,0 +1,141 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { getDocument } from '@atlaskit/browser-apis';
3
+ import { EXPERIENCE_FAILURE_REASON } from './consts';
4
+ import { popupWithNestedElement } from './experience-utils';
5
+
6
+ /**
7
+ * Popup check type determines how popups are observed based on their DOM location:
8
+ * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
9
+ * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
10
+ * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
11
+ */
12
+
13
+ export class ExperienceCheckPopupMutation {
14
+ constructor({
15
+ getEditorDom,
16
+ getTarget,
17
+ nestedElementQuery,
18
+ type = 'editorRoot'
19
+ }) {
20
+ _defineProperty(this, "observers", []);
21
+ this.getEditorDom = getEditorDom;
22
+ this.getTarget = getTarget;
23
+ this.nestedElementQuery = nestedElementQuery;
24
+ this.type = type;
25
+ }
26
+
27
+ /**
28
+ * Returns the list of DOM elements to observe based on popup type.
29
+ */
30
+ getObserveTargets() {
31
+ switch (this.type) {
32
+ case 'inline':
33
+ return this.getInlineTargets();
34
+ case 'editorRoot':
35
+ return this.getEditorRootTargets();
36
+ case 'editorContent':
37
+ return this.getEditorContentTargets();
38
+ }
39
+ }
40
+
41
+ /**
42
+ * For 'editorContent' type: observe the target (mount point) and any existing
43
+ * [data-editor-popup] wrappers within it. Content-level popups and modals
44
+ * appear in portal containers.
45
+ */
46
+ getEditorContentTargets() {
47
+ const target = this.getTarget();
48
+ if (!target) {
49
+ return [];
50
+ }
51
+ const targets = [target];
52
+ const wrappers = target.querySelectorAll('[data-editor-popup]');
53
+ for (const wrapper of wrappers) {
54
+ targets.push(wrapper);
55
+ }
56
+ return targets;
57
+ }
58
+
59
+ /**
60
+ * For 'inline' type: observe the target element directly.
61
+ * The caller is responsible for resolving the correct container
62
+ * (e.g. the toolbar button-group) via the getTarget function.
63
+ */
64
+ getInlineTargets() {
65
+ const target = this.getTarget();
66
+ if (!target) {
67
+ return [];
68
+ }
69
+ return [target];
70
+ }
71
+
72
+ /**
73
+ * For 'editorRoot' type: observe the actual editor root container.
74
+ * The editorDom is the ProseMirror element, but popups appear as direct children
75
+ * of the parent .akEditor container. So we observe the parent of editorDom.
76
+ */
77
+ getEditorRootTargets() {
78
+ const targets = [];
79
+ const editorDom = this.getEditorDom();
80
+ if (editorDom) {
81
+ const editorRoot = editorDom.closest('.akEditor') || editorDom.parentElement;
82
+ if (editorRoot instanceof HTMLElement) {
83
+ targets.push(editorRoot);
84
+ const wrappers = editorRoot.querySelectorAll('[data-editor-popup]');
85
+ for (const wrapper of wrappers) {
86
+ targets.push(wrapper);
87
+ }
88
+ }
89
+ }
90
+ return targets;
91
+ }
92
+ start(callback) {
93
+ this.stop();
94
+ const target = this.getTarget();
95
+ const doc = getDocument();
96
+ if (!target || !doc) {
97
+ callback({
98
+ status: 'failure',
99
+ reason: EXPERIENCE_FAILURE_REASON.DOM_MUTATION_TARGET_NOT_FOUND
100
+ });
101
+ return;
102
+ }
103
+ const observeTargets = this.getObserveTargets();
104
+ const query = this.nestedElementQuery;
105
+ const observe = el => {
106
+ const observer = new MutationObserver(onMutation);
107
+ observer.observe(el, {
108
+ childList: true
109
+ });
110
+ this.observers.push(observer);
111
+ };
112
+ const onMutation = mutations => {
113
+ for (const mutation of mutations) {
114
+ if (mutation.type !== 'childList') {
115
+ continue;
116
+ }
117
+ for (const node of mutation.addedNodes) {
118
+ if (!(node instanceof HTMLElement)) {
119
+ continue;
120
+ }
121
+ const found = popupWithNestedElement(node, query) || node.matches(query) || !!node.querySelector(query);
122
+ if (found) {
123
+ callback({
124
+ status: 'success'
125
+ });
126
+ return;
127
+ }
128
+ }
129
+ }
130
+ };
131
+ for (const observeTarget of observeTargets) {
132
+ observe(observeTarget);
133
+ }
134
+ }
135
+ stop() {
136
+ for (const observer of this.observers) {
137
+ observer.disconnect();
138
+ }
139
+ this.observers = [];
140
+ }
141
+ }
@@ -5,5 +5,6 @@ export { Experience } from './Experience';
5
5
  export { EXPERIENCE_ABORT_REASON, EXPERIENCE_FAILURE_REASON, EXPERIENCE_ID } from './consts';
6
6
  export { ExperienceCheckComposite } from './ExperienceCheckComposite';
7
7
  export { ExperienceCheckDomMutation } from './ExperienceCheckDomMutation';
8
+ export { ExperienceCheckPopupMutation } from './ExperienceCheckPopupMutation';
8
9
  export { ExperienceCheckTimeout } from './ExperienceCheckTimeout';
9
10
  export { containsPopupWithNestedElement, popupWithNestedElement, getPopupContainerFromEditorView, getNodeQuery } from './experience-utils';
@@ -52,7 +52,11 @@ export const redo = makeKeymap('Redo', 'Ctrl-y', 'Mod-Shift-z');
52
52
  export const openHelp = makeKeyMapWithCommon('Open Help', 'Mod-/');
53
53
  export const addLink = makeKeyMapWithCommon('Link', 'Mod-k');
54
54
  export const addInlineComment = makeKeyMapWithCommon('Annotate', 'Mod-Alt-c');
55
- export const copyLinkToBlock = makeKeyMapWithCommon('Copy link to block', 'Mod-Alt-a');
55
+ // [FEATURE FLAG: platform_editor_block_menu_v2_patch_3]
56
+ // Updated wording from "Copy link to block" to "Copy link to selection" for better UX clarity.
57
+ // The actual displayed text is conditionally shown in the UI component based on the flag.
58
+ // To clean up: This can remain as-is since it's the canonical name for the action.
59
+ export const copyLinkToBlock = makeKeyMapWithCommon('Copy link to selection', 'Mod-Alt-a');
56
60
  export const submit = makeKeyMapWithCommon('Submit Content', 'Mod-Enter');
57
61
  export const enter = makeKeyMapWithCommon('Enter', 'Enter');
58
62
  export const shiftEnter = makeKeyMapWithCommon('Shift Enter', 'Shift-Enter');
@@ -18,9 +18,16 @@ export const messages = defineMessages({
18
18
  copyLink: {
19
19
  id: 'fabric.editor.block.menu.copy.link',
20
20
  defaultMessage: 'Copy link',
21
- description: 'Copy link to the selected block'
21
+ description: 'Copy link to the selected content'
22
22
  },
23
23
  copyLinkToBlock: {
24
+ id: 'fabric.editor.block.menu.copy.link.to.block',
25
+ defaultMessage: 'Copy link to selection',
26
+ description: 'Copy link to the selected content'
27
+ },
28
+ // [FEATURE FLAG: platform_editor_block_menu_v2_patch_3]
29
+ // Old message retained for flag-off state. To clean up: remove this when flag is removed.
30
+ copyLinkToBlockOld: {
24
31
  id: 'fabric.editor.block.menu.copy.link.to.block',
25
32
  defaultMessage: 'Copy link to block',
26
33
  description: 'Copy link to the selected block'
@@ -180,6 +180,11 @@ export const syncBlockMessages = defineMessages({
180
180
  defaultMessage: 'You appear to be offline. Please connect to the internet to create synced content.',
181
181
  description: 'Description in flag which appears when a sync block cannot be created in offline mode'
182
182
  },
183
+ loadingSyncedContent: {
184
+ id: 'fabric.editor.syncedBlockLoadingSyncedContent',
185
+ defaultMessage: 'Loading synced content',
186
+ description: 'Accessible label for the loading spinner shown while synced block content is being fetched'
187
+ },
183
188
  generalErrorDescription: {
184
189
  id: 'fabric.editor.syncedBlockGeneralErrorDescription',
185
190
  defaultMessage: `We're unable to display this content at the moment.`,
@@ -4,7 +4,7 @@ import { isFedRamp } from './environment';
4
4
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
5
5
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
6
6
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
7
- const packageVersion = "111.19.0";
7
+ const packageVersion = "111.19.2";
8
8
  const sanitiseSentryEvents = (data, _hint) => {
9
9
  // Remove URL as it has UGC
10
10
  // Ignored via go/ees007
@@ -14,7 +14,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import { fg } from '@atlaskit/platform-feature-flags';
15
15
  import Layer from '../Layer';
16
16
  const packageName = "@atlaskit/editor-common";
17
- const packageVersion = "111.19.0";
17
+ const packageVersion = "111.19.2";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable @atlaskit/editor/no-re-export */
2
2
  export { messages } from './messages';
3
- export { BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM, BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM, BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, DELETE_MENU_SECTION, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MOVE_UP_MENU_ITEM, POSITION_MOVE_DOWN_MENU_ITEM, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_ITEM, TRANSFORM_CLEAR_MENU_SECTION, TRANSFORM_CLEAR_MENU_ITEM, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_HEADINGS_H3_MENU_ITEM, TRANSFORM_HEADINGS_H4_MENU_ITEM, TRANSFORM_HEADINGS_H5_MENU_ITEM, TRANSFORM_HEADINGS_H6_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_DECISION_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_ITEM, TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM, BLOCK_MENU_ACTION_TEST_ID } from './key';
3
+ export { BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_FEATURED_EXTENSION_SLOT_MENU_ITEM, BLOCK_ACTIONS_CREATE_SYNCED_BLOCK_MENU_ITEM, BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, DELETE_MENU_SECTION, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MOVE_UP_MENU_ITEM, POSITION_MOVE_DOWN_MENU_ITEM, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_ITEM, TRANSFORM_CLEAR_MENU_SECTION, TRANSFORM_CLEAR_MENU_ITEM, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_HEADINGS_H3_MENU_ITEM, TRANSFORM_HEADINGS_H4_MENU_ITEM, TRANSFORM_HEADINGS_H5_MENU_ITEM, TRANSFORM_HEADINGS_H6_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_DECISION_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM, TRANSFORM_SUGGESTED_MENU_ITEM, TRANSFORM_DEFAULT_EXTENSION_SLOT_MENU_ITEM, BLOCK_MENU_ACTION_TEST_ID, BLOCK_MENU_TEST_ID } from './key';
4
4
  export { FORMAT_HEADING_1_MENU_ITEM, FORMAT_HEADING_2_MENU_ITEM, FORMAT_HEADING_3_MENU_ITEM, FORMAT_HEADING_4_MENU_ITEM, FORMAT_HEADING_5_MENU_ITEM, FORMAT_HEADING_6_MENU_ITEM, FORMAT_PARAGRAPH_MENU_ITEM, FORMAT_QUOTE_MENU_ITEM, FORMAT_EXPAND_MENU_ITEM, FORMAT_LAYOUT_MENU_ITEM, FORMAT_PANEL_MENU_ITEM, FORMAT_CODE_BLOCK_MENU_ITEM, FORMAT_BULLETED_LIST_MENU_ITEM, FORMAT_NUMBERED_LIST_MENU_ITEM, FORMAT_TASK_LIST_MENU_ITEM, COPY_MENU_SECTION, MOVE_UP_DOWN_MENU_SECTION, COPY_LINK_MENU_ITEM, MOVE_UP_MENU_ITEM, MOVE_DOWN_MENU_ITEM, NESTED_FORMAT_MENU_SECTION, FORMAT_MENU_ITEM, NESTED_FORMAT_MENU, PRIMARY_MENU_SECTION, ADD_BLOCKS_MENU_SECTION, CREATE_SYNCED_BLOCK_MENU_ITEM } from './key-deprecated';
5
5
  export { MAIN_BLOCK_MENU_SECTION_RANK, TRANSFORM_MENU_SECTION_RANK, TRANSFORM_MENU_ITEM_RANK, TRANSFORM_HEADINGS_MENU_SECTION_RANK, TRANSFORM_STRUCTURE_MENU_SECTION_RANK, TRANSFORM_CLEAR_MENU_SECTION_RANK, BLOCK_ACTIONS_MENU_SECTION_RANK, POSITION_MENU_SECTION_RANK, DELETE_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_SECTION_RANK, TRANSFORM_CREATE_MENU_SECTION_RANK } from './rank';
6
6
  export { FORMAT_NESTED_MENU_RANK, FORMAT_NESTED_MENU_RANK_REVISED, BLOCK_MENU_SECTION_RANK, PRIMARY_MENU_SECTION_RANK, COPY_MENU_SECTION_RANK, DELETE_SECTION_RANK, MOVE_BLOCK_SECTION_RANK, ADD_BLOCKS_MENU_SECTION_RANK } from './rank-deprecated';