@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.
- package/CHANGELOG.md +20 -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/messages/table.js +20 -0
- 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/messages/table.js +20 -0
- 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/messages/table.js +20 -0
- 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/messages/table.d.ts +20 -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/messages/table.d.ts +20 -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,25 @@
|
|
|
1
1
|
# @atlaskit/editor-common
|
|
2
2
|
|
|
3
|
+
## 111.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`edfa57e62aec0`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/edfa57e62aec0) -
|
|
8
|
+
Adding i18n for the table move row/column help dialog text
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
|
|
14
|
+
## 111.19.3
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- [`57f499d6937db`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/57f499d6937db) -
|
|
19
|
+
Extract ExperienceCheckPopupMutation logic to be reusable for block menu experience tracking
|
|
20
|
+
- [`7ea2e225c0abb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/7ea2e225c0abb) -
|
|
21
|
+
[ux] Minor styling, wording changes for block menu and sync blocks
|
|
22
|
+
|
|
3
23
|
## 111.19.2
|
|
4
24
|
|
|
5
25
|
### 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'
|
|
@@ -96,21 +96,41 @@ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
|
|
|
96
96
|
defaultMessage: 'Move {0, plural, one {column} other {columns}} left',
|
|
97
97
|
description: 'Moves a column or columns to the left.'
|
|
98
98
|
},
|
|
99
|
+
moveColumnLeftHelpDialogLabel: {
|
|
100
|
+
id: 'fabric.editor.moveColumnLeftHelpDialogLabel',
|
|
101
|
+
defaultMessage: 'Move column left',
|
|
102
|
+
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'
|
|
103
|
+
},
|
|
99
104
|
moveColumnRight: {
|
|
100
105
|
id: 'fabric.editor.moveColumnRight',
|
|
101
106
|
defaultMessage: 'Move {0, plural, one {column} other {columns}} right',
|
|
102
107
|
description: 'Moves a column or columns to the right.'
|
|
103
108
|
},
|
|
109
|
+
moveColumnRightHelpDialogLabel: {
|
|
110
|
+
id: 'fabric.editor.moveColumnRightHelpDialogLabel',
|
|
111
|
+
defaultMessage: 'Move column right',
|
|
112
|
+
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'
|
|
113
|
+
},
|
|
104
114
|
moveRowUp: {
|
|
105
115
|
id: 'fabric.editor.moveRowUp',
|
|
106
116
|
defaultMessage: 'Move {0, plural, one {row} other {rows}} up',
|
|
107
117
|
description: 'Moves a row or selected rows up.'
|
|
108
118
|
},
|
|
119
|
+
moveRowUpHelpDialogLabel: {
|
|
120
|
+
id: 'fabric.editor.moveRowUpHelpDialogLabel',
|
|
121
|
+
defaultMessage: 'Move row up',
|
|
122
|
+
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'
|
|
123
|
+
},
|
|
109
124
|
moveRowDown: {
|
|
110
125
|
id: 'fabric.editor.moveDownDown',
|
|
111
126
|
defaultMessage: 'Move {0, plural, one {row} other {rows}} down',
|
|
112
127
|
description: 'Moves a row or selected rows down.'
|
|
113
128
|
},
|
|
129
|
+
moveRowDownHelpDialogLabel: {
|
|
130
|
+
id: 'fabric.editor.moveRowDownHelpDialogLabel',
|
|
131
|
+
defaultMessage: 'Move row down',
|
|
132
|
+
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'
|
|
133
|
+
},
|
|
114
134
|
insertRowDrag: {
|
|
115
135
|
id: 'fabric.editor.insertRowDrag',
|
|
116
136
|
defaultMessage: 'Insert row',
|
|
@@ -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.3";
|
|
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.3";
|
|
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'
|