@atlaskit/editor-common 111.19.2 → 111.20.0

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 +20 -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/table.js +20 -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/table.js +20 -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/table.js +20 -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/table.d.ts +20 -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/table.d.ts +20 -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
@@ -90,21 +90,41 @@ export const messages = defineMessages({
90
90
  defaultMessage: 'Move {0, plural, one {column} other {columns}} left',
91
91
  description: 'Moves a column or columns to the left.'
92
92
  },
93
+ moveColumnLeftHelpDialogLabel: {
94
+ id: 'fabric.editor.moveColumnLeftHelpDialogLabel',
95
+ defaultMessage: 'Move column left',
96
+ description: 'Description of a keymap that moves one column or multiple columns left, this is in the help dialog and can be simpler than the puralisation version'
97
+ },
93
98
  moveColumnRight: {
94
99
  id: 'fabric.editor.moveColumnRight',
95
100
  defaultMessage: 'Move {0, plural, one {column} other {columns}} right',
96
101
  description: 'Moves a column or columns to the right.'
97
102
  },
103
+ moveColumnRightHelpDialogLabel: {
104
+ id: 'fabric.editor.moveColumnRightHelpDialogLabel',
105
+ defaultMessage: 'Move column right',
106
+ description: 'Description of a keymap that moves one column or multiple columns right, this is in the help dialog and can be simpler than the puralisation version'
107
+ },
98
108
  moveRowUp: {
99
109
  id: 'fabric.editor.moveRowUp',
100
110
  defaultMessage: 'Move {0, plural, one {row} other {rows}} up',
101
111
  description: 'Moves a row or selected rows up.'
102
112
  },
113
+ moveRowUpHelpDialogLabel: {
114
+ id: 'fabric.editor.moveRowUpHelpDialogLabel',
115
+ defaultMessage: 'Move row up',
116
+ description: 'Description of a keymap that moves one row or multiple rows up, this is in the help dialog and can be simpler than the puralisation version'
117
+ },
103
118
  moveRowDown: {
104
119
  id: 'fabric.editor.moveDownDown',
105
120
  defaultMessage: 'Move {0, plural, one {row} other {rows}} down',
106
121
  description: 'Moves a row or selected rows down.'
107
122
  },
123
+ moveRowDownHelpDialogLabel: {
124
+ id: 'fabric.editor.moveRowDownHelpDialogLabel',
125
+ defaultMessage: 'Move row down',
126
+ description: 'Description of a keymap that moves one row or multiple rows down, this is in the help dialog and can be simpler than the puralisation version'
127
+ },
108
128
  insertRowDrag: {
109
129
  id: 'fabric.editor.insertRowDrag',
110
130
  defaultMessage: 'Insert row',
@@ -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.1";
7
+ const packageVersion = "111.19.3";
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.1";
17
+ const packageVersion = "111.19.3";
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';
@@ -114,6 +114,7 @@ export var DELETE_MENU_SECTION = {
114
114
  export var DELETE_MENU_ITEM = {
115
115
  key: 'delete-menu-item'
116
116
  };
117
+ export var 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,215 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ 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; } } }; }
5
+ 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; } }
6
+ 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; }
7
+ import { getDocument } from '@atlaskit/browser-apis';
8
+ import { EXPERIENCE_FAILURE_REASON } from './consts';
9
+ import { popupWithNestedElement } from './experience-utils';
10
+
11
+ /**
12
+ * Popup check type determines how popups are observed based on their DOM location:
13
+ * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
14
+ * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
15
+ * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
16
+ */
17
+
18
+ export var ExperienceCheckPopupMutation = /*#__PURE__*/function () {
19
+ function ExperienceCheckPopupMutation(_ref) {
20
+ var getEditorDom = _ref.getEditorDom,
21
+ getTarget = _ref.getTarget,
22
+ nestedElementQuery = _ref.nestedElementQuery,
23
+ _ref$type = _ref.type,
24
+ type = _ref$type === void 0 ? 'editorRoot' : _ref$type;
25
+ _classCallCheck(this, ExperienceCheckPopupMutation);
26
+ _defineProperty(this, "observers", []);
27
+ this.getEditorDom = getEditorDom;
28
+ this.getTarget = getTarget;
29
+ this.nestedElementQuery = nestedElementQuery;
30
+ this.type = type;
31
+ }
32
+
33
+ /**
34
+ * Returns the list of DOM elements to observe based on popup type.
35
+ */
36
+ return _createClass(ExperienceCheckPopupMutation, [{
37
+ key: "getObserveTargets",
38
+ value: function getObserveTargets() {
39
+ switch (this.type) {
40
+ case 'inline':
41
+ return this.getInlineTargets();
42
+ case 'editorRoot':
43
+ return this.getEditorRootTargets();
44
+ case 'editorContent':
45
+ return this.getEditorContentTargets();
46
+ }
47
+ }
48
+
49
+ /**
50
+ * For 'editorContent' type: observe the target (mount point) and any existing
51
+ * [data-editor-popup] wrappers within it. Content-level popups and modals
52
+ * appear in portal containers.
53
+ */
54
+ }, {
55
+ key: "getEditorContentTargets",
56
+ value: function getEditorContentTargets() {
57
+ var target = this.getTarget();
58
+ if (!target) {
59
+ return [];
60
+ }
61
+ var targets = [target];
62
+ var wrappers = target.querySelectorAll('[data-editor-popup]');
63
+ var _iterator = _createForOfIteratorHelper(wrappers),
64
+ _step;
65
+ try {
66
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
67
+ var wrapper = _step.value;
68
+ targets.push(wrapper);
69
+ }
70
+ } catch (err) {
71
+ _iterator.e(err);
72
+ } finally {
73
+ _iterator.f();
74
+ }
75
+ return targets;
76
+ }
77
+
78
+ /**
79
+ * For 'inline' type: observe the target element directly.
80
+ * The caller is responsible for resolving the correct container
81
+ * (e.g. the toolbar button-group) via the getTarget function.
82
+ */
83
+ }, {
84
+ key: "getInlineTargets",
85
+ value: function getInlineTargets() {
86
+ var target = this.getTarget();
87
+ if (!target) {
88
+ return [];
89
+ }
90
+ return [target];
91
+ }
92
+
93
+ /**
94
+ * For 'editorRoot' type: observe the actual editor root container.
95
+ * The editorDom is the ProseMirror element, but popups appear as direct children
96
+ * of the parent .akEditor container. So we observe the parent of editorDom.
97
+ */
98
+ }, {
99
+ key: "getEditorRootTargets",
100
+ value: function getEditorRootTargets() {
101
+ var targets = [];
102
+ var editorDom = this.getEditorDom();
103
+ if (editorDom) {
104
+ var editorRoot = editorDom.closest('.akEditor') || editorDom.parentElement;
105
+ if (editorRoot instanceof HTMLElement) {
106
+ targets.push(editorRoot);
107
+ var wrappers = editorRoot.querySelectorAll('[data-editor-popup]');
108
+ var _iterator2 = _createForOfIteratorHelper(wrappers),
109
+ _step2;
110
+ try {
111
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
112
+ var wrapper = _step2.value;
113
+ targets.push(wrapper);
114
+ }
115
+ } catch (err) {
116
+ _iterator2.e(err);
117
+ } finally {
118
+ _iterator2.f();
119
+ }
120
+ }
121
+ }
122
+ return targets;
123
+ }
124
+ }, {
125
+ key: "start",
126
+ value: function start(callback) {
127
+ var _this = this;
128
+ this.stop();
129
+ var target = this.getTarget();
130
+ var doc = getDocument();
131
+ if (!target || !doc) {
132
+ callback({
133
+ status: 'failure',
134
+ reason: EXPERIENCE_FAILURE_REASON.DOM_MUTATION_TARGET_NOT_FOUND
135
+ });
136
+ return;
137
+ }
138
+ var observeTargets = this.getObserveTargets();
139
+ var query = this.nestedElementQuery;
140
+ var observe = function observe(el) {
141
+ var observer = new MutationObserver(onMutation);
142
+ observer.observe(el, {
143
+ childList: true
144
+ });
145
+ _this.observers.push(observer);
146
+ };
147
+ var onMutation = function onMutation(mutations) {
148
+ var _iterator3 = _createForOfIteratorHelper(mutations),
149
+ _step3;
150
+ try {
151
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
152
+ var mutation = _step3.value;
153
+ if (mutation.type !== 'childList') {
154
+ continue;
155
+ }
156
+ var _iterator4 = _createForOfIteratorHelper(mutation.addedNodes),
157
+ _step4;
158
+ try {
159
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
160
+ var node = _step4.value;
161
+ if (!(node instanceof HTMLElement)) {
162
+ continue;
163
+ }
164
+ var found = popupWithNestedElement(node, query) || node.matches(query) || !!node.querySelector(query);
165
+ if (found) {
166
+ callback({
167
+ status: 'success'
168
+ });
169
+ return;
170
+ }
171
+ }
172
+ } catch (err) {
173
+ _iterator4.e(err);
174
+ } finally {
175
+ _iterator4.f();
176
+ }
177
+ }
178
+ } catch (err) {
179
+ _iterator3.e(err);
180
+ } finally {
181
+ _iterator3.f();
182
+ }
183
+ };
184
+ var _iterator5 = _createForOfIteratorHelper(observeTargets),
185
+ _step5;
186
+ try {
187
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
188
+ var observeTarget = _step5.value;
189
+ observe(observeTarget);
190
+ }
191
+ } catch (err) {
192
+ _iterator5.e(err);
193
+ } finally {
194
+ _iterator5.f();
195
+ }
196
+ }
197
+ }, {
198
+ key: "stop",
199
+ value: function stop() {
200
+ var _iterator6 = _createForOfIteratorHelper(this.observers),
201
+ _step6;
202
+ try {
203
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
204
+ var observer = _step6.value;
205
+ observer.disconnect();
206
+ }
207
+ } catch (err) {
208
+ _iterator6.e(err);
209
+ } finally {
210
+ _iterator6.f();
211
+ }
212
+ this.observers = [];
213
+ }
214
+ }]);
215
+ }();
@@ -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';
@@ -53,7 +53,11 @@ export var redo = makeKeymap('Redo', 'Ctrl-y', 'Mod-Shift-z');
53
53
  export var openHelp = makeKeyMapWithCommon('Open Help', 'Mod-/');
54
54
  export var addLink = makeKeyMapWithCommon('Link', 'Mod-k');
55
55
  export var addInlineComment = makeKeyMapWithCommon('Annotate', 'Mod-Alt-c');
56
- export var copyLinkToBlock = makeKeyMapWithCommon('Copy link to block', 'Mod-Alt-a');
56
+ // [FEATURE FLAG: platform_editor_block_menu_v2_patch_3]
57
+ // Updated wording from "Copy link to block" to "Copy link to selection" for better UX clarity.
58
+ // The actual displayed text is conditionally shown in the UI component based on the flag.
59
+ // To clean up: This can remain as-is since it's the canonical name for the action.
60
+ export var copyLinkToBlock = makeKeyMapWithCommon('Copy link to selection', 'Mod-Alt-a');
57
61
  export var submit = makeKeyMapWithCommon('Submit Content', 'Mod-Enter');
58
62
  export var enter = makeKeyMapWithCommon('Enter', 'Enter');
59
63
  export var shiftEnter = makeKeyMapWithCommon('Shift Enter', 'Shift-Enter');
@@ -18,9 +18,16 @@ export var 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'
@@ -90,21 +90,41 @@ export var messages = defineMessages({
90
90
  defaultMessage: 'Move {0, plural, one {column} other {columns}} left',
91
91
  description: 'Moves a column or columns to the left.'
92
92
  },
93
+ moveColumnLeftHelpDialogLabel: {
94
+ id: 'fabric.editor.moveColumnLeftHelpDialogLabel',
95
+ defaultMessage: 'Move column left',
96
+ description: 'Description of a keymap that moves one column or multiple columns left, this is in the help dialog and can be simpler than the puralisation version'
97
+ },
93
98
  moveColumnRight: {
94
99
  id: 'fabric.editor.moveColumnRight',
95
100
  defaultMessage: 'Move {0, plural, one {column} other {columns}} right',
96
101
  description: 'Moves a column or columns to the right.'
97
102
  },
103
+ moveColumnRightHelpDialogLabel: {
104
+ id: 'fabric.editor.moveColumnRightHelpDialogLabel',
105
+ defaultMessage: 'Move column right',
106
+ description: 'Description of a keymap that moves one column or multiple columns right, this is in the help dialog and can be simpler than the puralisation version'
107
+ },
98
108
  moveRowUp: {
99
109
  id: 'fabric.editor.moveRowUp',
100
110
  defaultMessage: 'Move {0, plural, one {row} other {rows}} up',
101
111
  description: 'Moves a row or selected rows up.'
102
112
  },
113
+ moveRowUpHelpDialogLabel: {
114
+ id: 'fabric.editor.moveRowUpHelpDialogLabel',
115
+ defaultMessage: 'Move row up',
116
+ description: 'Description of a keymap that moves one row or multiple rows up, this is in the help dialog and can be simpler than the puralisation version'
117
+ },
103
118
  moveRowDown: {
104
119
  id: 'fabric.editor.moveDownDown',
105
120
  defaultMessage: 'Move {0, plural, one {row} other {rows}} down',
106
121
  description: 'Moves a row or selected rows down.'
107
122
  },
123
+ moveRowDownHelpDialogLabel: {
124
+ id: 'fabric.editor.moveRowDownHelpDialogLabel',
125
+ defaultMessage: 'Move row down',
126
+ description: 'Description of a keymap that moves one row or multiple rows down, this is in the help dialog and can be simpler than the puralisation version'
127
+ },
108
128
  insertRowDrag: {
109
129
  id: 'fabric.editor.insertRowDrag',
110
130
  defaultMessage: 'Insert row',
@@ -10,7 +10,7 @@ import { isFedRamp } from './environment';
10
10
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
11
11
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
12
12
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
13
- var packageVersion = "111.19.1";
13
+ var packageVersion = "111.19.3";
14
14
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
15
15
  // Remove URL as it has UGC
16
16
  // Ignored via go/ees007
@@ -21,7 +21,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
21
21
  import { fg } from '@atlaskit/platform-feature-flags';
22
22
  import Layer from '../Layer';
23
23
  var packageName = "@atlaskit/editor-common";
24
- var packageVersion = "111.19.1";
24
+ var packageVersion = "111.19.3";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -1,5 +1,5 @@
1
1
  export { messages } from './messages';
2
- 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';
2
+ 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';
3
3
  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';
4
4
  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';
5
5
  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';
@@ -103,6 +103,7 @@ export declare const DELETE_MENU_SECTION: {
103
103
  export declare const DELETE_MENU_ITEM: {
104
104
  key: string;
105
105
  };
106
+ export declare const BLOCK_MENU_TEST_ID = "editor-block-menu";
106
107
  export declare const BLOCK_MENU_ACTION_TEST_ID: {
107
108
  readonly MOVE_UP: "block-menu-move-up";
108
109
  readonly MOVE_DOWN: "block-menu-move-down";
@@ -0,0 +1,46 @@
1
+ import type { ExperienceCheck, ExperienceCheckCallback } from './ExperienceCheck';
2
+ /**
3
+ * Popup check type determines how popups are observed based on their DOM location:
4
+ * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
5
+ * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
6
+ * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
7
+ */
8
+ export type PopupCheckType = 'inline' | 'editorRoot' | 'editorContent';
9
+ export type ExperienceCheckPopupMutationConfig = {
10
+ getEditorDom: () => HTMLElement | undefined | null;
11
+ getTarget: () => HTMLElement | undefined | null;
12
+ nestedElementQuery: string;
13
+ type?: PopupCheckType;
14
+ };
15
+ export declare class ExperienceCheckPopupMutation implements ExperienceCheck {
16
+ private getEditorDom;
17
+ private getTarget;
18
+ private nestedElementQuery;
19
+ private observers;
20
+ private type;
21
+ constructor({ getEditorDom, getTarget, nestedElementQuery, type, }: ExperienceCheckPopupMutationConfig);
22
+ /**
23
+ * Returns the list of DOM elements to observe based on popup type.
24
+ */
25
+ private getObserveTargets;
26
+ /**
27
+ * For 'editorContent' type: observe the target (mount point) and any existing
28
+ * [data-editor-popup] wrappers within it. Content-level popups and modals
29
+ * appear in portal containers.
30
+ */
31
+ private getEditorContentTargets;
32
+ /**
33
+ * For 'inline' type: observe the target element directly.
34
+ * The caller is responsible for resolving the correct container
35
+ * (e.g. the toolbar button-group) via the getTarget function.
36
+ */
37
+ private getInlineTargets;
38
+ /**
39
+ * For 'editorRoot' type: observe the actual editor root container.
40
+ * The editorDom is the ProseMirror element, but popups appear as direct children
41
+ * of the parent .akEditor container. So we observe the parent of editorDom.
42
+ */
43
+ private getEditorRootTargets;
44
+ start(callback: ExperienceCheckCallback): void;
45
+ stop(): void;
46
+ }
@@ -2,7 +2,9 @@ export { Experience } from './Experience';
2
2
  export { EXPERIENCE_ABORT_REASON, EXPERIENCE_FAILURE_REASON, EXPERIENCE_ID } from './consts';
3
3
  export { ExperienceCheckComposite } from './ExperienceCheckComposite';
4
4
  export { ExperienceCheckDomMutation } from './ExperienceCheckDomMutation';
5
+ export { ExperienceCheckPopupMutation } from './ExperienceCheckPopupMutation';
5
6
  export { ExperienceCheckTimeout } from './ExperienceCheckTimeout';
7
+ export type { ExperienceCheckPopupMutationConfig, PopupCheckType } from './ExperienceCheckPopupMutation';
6
8
  export type { ExperienceCheck, ExperienceCheckCallback, ExperienceCheckResult, } from './ExperienceCheck';
7
9
  export type { ExperienceCheckDomMutationConfig, ExperienceCheckDomMutationObserveConfig, ExperienceDomMutationCheckOptions, } from './ExperienceCheckDomMutation';
8
10
  export { containsPopupWithNestedElement, popupWithNestedElement, getPopupContainerFromEditorView, getNodeQuery, } from './experience-utils';
@@ -24,6 +24,11 @@ export declare const messages: {
24
24
  defaultMessage: string;
25
25
  description: string;
26
26
  };
27
+ copyLinkToBlockOld: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
27
32
  linkCopiedToClipboard: {
28
33
  id: string;
29
34
  defaultMessage: string;
@@ -89,21 +89,41 @@ export declare const messages: {
89
89
  defaultMessage: string;
90
90
  description: string;
91
91
  };
92
+ moveColumnLeftHelpDialogLabel: {
93
+ id: string;
94
+ defaultMessage: string;
95
+ description: string;
96
+ };
92
97
  moveColumnRight: {
93
98
  id: string;
94
99
  defaultMessage: string;
95
100
  description: string;
96
101
  };
102
+ moveColumnRightHelpDialogLabel: {
103
+ id: string;
104
+ defaultMessage: string;
105
+ description: string;
106
+ };
97
107
  moveRowUp: {
98
108
  id: string;
99
109
  defaultMessage: string;
100
110
  description: string;
101
111
  };
112
+ moveRowUpHelpDialogLabel: {
113
+ id: string;
114
+ defaultMessage: string;
115
+ description: string;
116
+ };
102
117
  moveRowDown: {
103
118
  id: string;
104
119
  defaultMessage: string;
105
120
  description: string;
106
121
  };
122
+ moveRowDownHelpDialogLabel: {
123
+ id: string;
124
+ defaultMessage: string;
125
+ description: string;
126
+ };
107
127
  insertRowDrag: {
108
128
  id: string;
109
129
  defaultMessage: string;
@@ -23,8 +23,6 @@ export type QuickInsertItem = TypeAheadItem & {
23
23
  id?: QuickInsertItemId;
24
24
  /** other names used to find the item */
25
25
  keywords?: Array<string>;
26
- /** optional sorting priority */
27
- priority?: number;
28
26
  };
29
27
  export type QuickInsertProvider = {
30
28
  getItems: () => Promise<Array<QuickInsertItem>>;
@@ -40,6 +40,7 @@ export type TypeAheadItem = {
40
40
  key?: string | number;
41
41
  keyshortcut?: string;
42
42
  lozenge?: ReactNode;
43
+ priority?: number;
43
44
  render?: (props: TypeAheadItemRenderProps) => React.ReactElement<TypeAheadItemRenderProps> | null;
44
45
  testId?: string;
45
46
  title: string;
@@ -1,5 +1,5 @@
1
1
  export { messages } from './messages';
2
- 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';
2
+ 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';
3
3
  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';
4
4
  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';
5
5
  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';
@@ -103,6 +103,7 @@ export declare const DELETE_MENU_SECTION: {
103
103
  export declare const DELETE_MENU_ITEM: {
104
104
  key: string;
105
105
  };
106
+ export declare const BLOCK_MENU_TEST_ID = "editor-block-menu";
106
107
  export declare const BLOCK_MENU_ACTION_TEST_ID: {
107
108
  readonly MOVE_UP: "block-menu-move-up";
108
109
  readonly MOVE_DOWN: "block-menu-move-down";
@@ -0,0 +1,46 @@
1
+ import type { ExperienceCheck, ExperienceCheckCallback } from './ExperienceCheck';
2
+ /**
3
+ * Popup check type determines how popups are observed based on their DOM location:
4
+ * - 'inline': Popups appearing in toolbar button-groups (emoji, media, table selector, image)
5
+ * - 'editorRoot': Popups attached to editor root (e.g., mention popups)
6
+ * - 'editorContent': Content-level popups or modals in portal containers (e.g., block menu)
7
+ */
8
+ export type PopupCheckType = 'inline' | 'editorRoot' | 'editorContent';
9
+ export type ExperienceCheckPopupMutationConfig = {
10
+ getEditorDom: () => HTMLElement | undefined | null;
11
+ getTarget: () => HTMLElement | undefined | null;
12
+ nestedElementQuery: string;
13
+ type?: PopupCheckType;
14
+ };
15
+ export declare class ExperienceCheckPopupMutation implements ExperienceCheck {
16
+ private getEditorDom;
17
+ private getTarget;
18
+ private nestedElementQuery;
19
+ private observers;
20
+ private type;
21
+ constructor({ getEditorDom, getTarget, nestedElementQuery, type, }: ExperienceCheckPopupMutationConfig);
22
+ /**
23
+ * Returns the list of DOM elements to observe based on popup type.
24
+ */
25
+ private getObserveTargets;
26
+ /**
27
+ * For 'editorContent' type: observe the target (mount point) and any existing
28
+ * [data-editor-popup] wrappers within it. Content-level popups and modals
29
+ * appear in portal containers.
30
+ */
31
+ private getEditorContentTargets;
32
+ /**
33
+ * For 'inline' type: observe the target element directly.
34
+ * The caller is responsible for resolving the correct container
35
+ * (e.g. the toolbar button-group) via the getTarget function.
36
+ */
37
+ private getInlineTargets;
38
+ /**
39
+ * For 'editorRoot' type: observe the actual editor root container.
40
+ * The editorDom is the ProseMirror element, but popups appear as direct children
41
+ * of the parent .akEditor container. So we observe the parent of editorDom.
42
+ */
43
+ private getEditorRootTargets;
44
+ start(callback: ExperienceCheckCallback): void;
45
+ stop(): void;
46
+ }
@@ -2,7 +2,9 @@ export { Experience } from './Experience';
2
2
  export { EXPERIENCE_ABORT_REASON, EXPERIENCE_FAILURE_REASON, EXPERIENCE_ID } from './consts';
3
3
  export { ExperienceCheckComposite } from './ExperienceCheckComposite';
4
4
  export { ExperienceCheckDomMutation } from './ExperienceCheckDomMutation';
5
+ export { ExperienceCheckPopupMutation } from './ExperienceCheckPopupMutation';
5
6
  export { ExperienceCheckTimeout } from './ExperienceCheckTimeout';
7
+ export type { ExperienceCheckPopupMutationConfig, PopupCheckType } from './ExperienceCheckPopupMutation';
6
8
  export type { ExperienceCheck, ExperienceCheckCallback, ExperienceCheckResult, } from './ExperienceCheck';
7
9
  export type { ExperienceCheckDomMutationConfig, ExperienceCheckDomMutationObserveConfig, ExperienceDomMutationCheckOptions, } from './ExperienceCheckDomMutation';
8
10
  export { containsPopupWithNestedElement, popupWithNestedElement, getPopupContainerFromEditorView, getNodeQuery, } from './experience-utils';