@atlaskit/editor-common 111.19.2 → 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.
- package/CHANGELOG.md +9 -0
- package/afm-cc/tsconfig.json +3 -0
- package/afm-jira/tsconfig.json +3 -0
- package/afm-products/tsconfig.json +3 -0
- package/dist/cjs/block-menu/index.js +6 -0
- package/dist/cjs/block-menu/key.js +2 -1
- package/dist/cjs/experiences/ExperienceCheckPopupMutation.js +220 -0
- package/dist/cjs/experiences/index.js +7 -0
- package/dist/cjs/keymaps/index.js +5 -1
- package/dist/cjs/messages/block-menu.js +8 -1
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/es2019/block-menu/index.js +1 -1
- package/dist/es2019/block-menu/key.js +1 -0
- package/dist/es2019/experiences/ExperienceCheckPopupMutation.js +141 -0
- package/dist/es2019/experiences/index.js +1 -0
- package/dist/es2019/keymaps/index.js +5 -1
- package/dist/es2019/messages/block-menu.js +8 -1
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/esm/block-menu/index.js +1 -1
- package/dist/esm/block-menu/key.js +1 -0
- package/dist/esm/experiences/ExperienceCheckPopupMutation.js +215 -0
- package/dist/esm/experiences/index.js +1 -0
- package/dist/esm/keymaps/index.js +5 -1
- package/dist/esm/messages/block-menu.js +8 -1
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/types/block-menu/index.d.ts +1 -1
- package/dist/types/block-menu/key.d.ts +1 -0
- package/dist/types/experiences/ExperienceCheckPopupMutation.d.ts +46 -0
- package/dist/types/experiences/index.d.ts +2 -0
- package/dist/types/messages/block-menu.d.ts +5 -0
- package/dist/types/provider-factory/quick-insert-provider.d.ts +0 -2
- package/dist/types/types/type-ahead.d.ts +1 -0
- package/dist/types-ts4.5/block-menu/index.d.ts +1 -1
- package/dist/types-ts4.5/block-menu/key.d.ts +1 -0
- package/dist/types-ts4.5/experiences/ExperienceCheckPopupMutation.d.ts +46 -0
- package/dist/types-ts4.5/experiences/index.d.ts +2 -0
- package/dist/types-ts4.5/messages/block-menu.d.ts +5 -0
- package/dist/types-ts4.5/provider-factory/quick-insert-provider.d.ts +0 -2
- package/dist/types-ts4.5/types/type-ahead.d.ts +1 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
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
|
+
|
|
3
12
|
## 111.19.2
|
|
4
13
|
|
|
5
14
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
package/afm-jira/tsconfig.json
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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'
|
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
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'
|
|
@@ -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.
|
|
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.
|
|
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';
|
|
@@ -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
|
-
|
|
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
|
|
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'
|
|
@@ -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.
|
|
13
|
+
var packageVersion = "111.19.2";
|
|
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.
|
|
24
|
+
var packageVersion = "111.19.2";
|
|
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;
|
|
@@ -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';
|
|
@@ -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;
|
|
@@ -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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-common",
|
|
3
|
-
"version": "111.19.
|
|
3
|
+
"version": "111.19.3",
|
|
4
4
|
"description": "A package that contains common classes and components for editor and renderer",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"@atlaskit/analytics-namespaced-context": "^7.2.0",
|
|
38
38
|
"@atlaskit/analytics-next": "^11.1.0",
|
|
39
39
|
"@atlaskit/atlassian-context": "^0.6.0",
|
|
40
|
+
"@atlaskit/browser-apis": "^0.0.1",
|
|
40
41
|
"@atlaskit/button": "^23.9.0",
|
|
41
42
|
"@atlaskit/codemod-utils": "^4.2.0",
|
|
42
43
|
"@atlaskit/css": "^0.19.0",
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
"@atlaskit/task-decision": "^19.2.0",
|
|
82
83
|
"@atlaskit/textfield": "^8.2.0",
|
|
83
84
|
"@atlaskit/theme": "^21.0.0",
|
|
84
|
-
"@atlaskit/tmp-editor-statsig": "^29.
|
|
85
|
+
"@atlaskit/tmp-editor-statsig": "^29.6.0",
|
|
85
86
|
"@atlaskit/tokens": "^11.0.0",
|
|
86
87
|
"@atlaskit/tooltip": "^20.14.0",
|
|
87
88
|
"@atlaskit/width-detector": "^5.0.0",
|
|
@@ -177,6 +178,9 @@
|
|
|
177
178
|
"platform_editor_blocktaskitem_patch_3": {
|
|
178
179
|
"type": "boolean"
|
|
179
180
|
},
|
|
181
|
+
"platform_editor_block_menu_v2_patch_3": {
|
|
182
|
+
"type": "boolean"
|
|
183
|
+
},
|
|
180
184
|
"media-perf-uplift-mutation-fix": {
|
|
181
185
|
"type": "boolean"
|
|
182
186
|
},
|