@atlaskit/editor-plugin-insert-block 28.0.5 → 29.0.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/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenu.js +113 -16
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuContent.js +12 -9
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuItem.js +7 -2
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +2 -0
- package/dist/cjs/ui/registered-insert-menu/RegisteredInsertMenuList.js +137 -51
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenu.js +98 -11
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuContent.js +11 -7
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuItem.js +7 -2
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +2 -0
- package/dist/es2019/ui/registered-insert-menu/RegisteredInsertMenuList.js +99 -21
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenu.js +113 -16
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuContent.js +13 -10
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuItem.js +7 -2
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.compiled.css +2 -0
- package/dist/esm/ui/registered-insert-menu/RegisteredInsertMenuList.js +138 -52
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenu.d.ts +3 -1
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuItem.d.ts +1 -0
- package/dist/types/ui/registered-insert-menu/RegisteredInsertMenuList.d.ts +7 -2
- package/package.json +32 -32
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-insert-block
|
|
2
2
|
|
|
3
|
+
## 29.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
|
|
9
|
+
## 28.0.6
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [`f93da47c0d069`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f93da47c0d069) -
|
|
14
|
+
Add shared illustrated empty states and search outcome analytics for registered slash, Plus and
|
|
15
|
+
Element Browser searches under platform_editor_slash_command. Refresh resolved registrations on
|
|
16
|
+
search edits and retain eligible Ask Rovo and host Marketplace recovery. Remove duplicate top
|
|
17
|
+
spacing in the Plus menu and show its previews only for directly hovered or keyboard-selected
|
|
18
|
+
items. Subscribe all three registered entry points to live registry updates and rebuild their
|
|
19
|
+
models on search changes, keeping selection and category state valid as items arrive or disappear.
|
|
20
|
+
Omit the Plus footer divider when only the generic empty state is shown.
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
|
|
3
23
|
## 28.0.5
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -17,6 +17,7 @@ var _browserApis = require("@atlaskit/browser-apis");
|
|
|
17
17
|
var _insertBlock = require("@atlaskit/editor-common/messages/insert-block");
|
|
18
18
|
var _keys = require("@atlaskit/editor-common/quick-insert/keys");
|
|
19
19
|
var _registeredMenuModel = require("@atlaskit/editor-common/quick-insert/registered-menu-model");
|
|
20
|
+
var _useSearchAnalytics = require("@atlaskit/editor-common/quick-insert/use-search-analytics");
|
|
20
21
|
var _typeAheadIsSectionOverflowItemKey = require("@atlaskit/editor-common/type-ahead-is-section-overflow-item-key");
|
|
21
22
|
var _typeAheadSurfaceContext = require("@atlaskit/editor-common/type-ahead-surface-context");
|
|
22
23
|
var _createSurfaceContext = require("@atlaskit/editor-ui-control-model/create-surface-context");
|
|
@@ -32,6 +33,7 @@ var styles = {
|
|
|
32
33
|
var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredInsertMenu(_ref) {
|
|
33
34
|
var components = _ref.components,
|
|
34
35
|
emptyStateHandler = _ref.emptyStateHandler,
|
|
36
|
+
fireAnalyticsEvent = _ref.fireAnalyticsEvent,
|
|
35
37
|
getItemRank = _ref.getItemRank,
|
|
36
38
|
editorView = _ref.editorView,
|
|
37
39
|
isOffline = _ref.isOffline,
|
|
@@ -58,6 +60,7 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
58
60
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
59
61
|
selectedItemIndex = _useState6[0],
|
|
60
62
|
setSelectedItemIndex = _useState6[1];
|
|
63
|
+
var selectedItemIndexRef = (0, _react.useRef)(selectedItemIndex);
|
|
61
64
|
var _useState7 = (0, _react.useState)({
|
|
62
65
|
startIndex: -1,
|
|
63
66
|
stopIndex: -1
|
|
@@ -95,6 +98,34 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
95
98
|
surfaceContext: surfaceContext
|
|
96
99
|
});
|
|
97
100
|
}, [components, formatMessage, getItemRank, hasSectionOverflowItems, query, surfaceContext]);
|
|
101
|
+
var _useState9 = (0, _react.useState)(),
|
|
102
|
+
_useState0 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
103
|
+
previewActivation = _useState0[0],
|
|
104
|
+
setPreviewActivation = _useState0[1];
|
|
105
|
+
var activePreviewItemKey = (previewActivation === null || previewActivation === void 0 ? void 0 : previewActivation.model) === model ? previewActivation.itemKey : undefined;
|
|
106
|
+
var searchResultCount = (0, _react.useMemo)(function () {
|
|
107
|
+
return model.sections.reduce(function (count, section) {
|
|
108
|
+
return count + section.filter(function (_ref3) {
|
|
109
|
+
var key = _ref3.key,
|
|
110
|
+
type = _ref3.type;
|
|
111
|
+
return type === 'menu-item' && !(0, _typeAheadIsSectionOverflowItemKey.isSectionOverflowItemKey)(key);
|
|
112
|
+
}).length;
|
|
113
|
+
}, 0);
|
|
114
|
+
}, [model.sections]);
|
|
115
|
+
var flushSearchAnalytics = (0, _useSearchAnalytics.useQuickInsertSearchAnalytics)({
|
|
116
|
+
fireAnalyticsEvent: fireAnalyticsEvent,
|
|
117
|
+
query: query,
|
|
118
|
+
resultCount: searchResultCount,
|
|
119
|
+
surface: 'toolbar'
|
|
120
|
+
});
|
|
121
|
+
var closeWithAnalytics = (0, _react.useCallback)(function () {
|
|
122
|
+
flushSearchAnalytics();
|
|
123
|
+
onClose();
|
|
124
|
+
}, [flushSearchAnalytics, onClose]);
|
|
125
|
+
var selectWithAnalytics = (0, _react.useCallback)(function () {
|
|
126
|
+
flushSearchAnalytics();
|
|
127
|
+
onSelect();
|
|
128
|
+
}, [flushSearchAnalytics, onSelect]);
|
|
98
129
|
var selectableItems = (0, _react.useMemo)(function () {
|
|
99
130
|
return (0, _registeredMenuModel.getQuickInsertMenuRows)(model).filter(function (row) {
|
|
100
131
|
return row.type === 'menu-item';
|
|
@@ -102,26 +133,88 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
102
133
|
}, [model]);
|
|
103
134
|
var itemCount = selectableItems.length + (model.footer ? 1 : 0);
|
|
104
135
|
var selectableItemKeys = (0, _react.useMemo)(function () {
|
|
105
|
-
return [].concat((0, _toConsumableArray2.default)(selectableItems), (0, _toConsumableArray2.default)(model.footer ? [model.footer] : [])).map(function (
|
|
106
|
-
var key =
|
|
136
|
+
return [].concat((0, _toConsumableArray2.default)(selectableItems), (0, _toConsumableArray2.default)(model.footer ? [model.footer] : [])).map(function (_ref4) {
|
|
137
|
+
var key = _ref4.key;
|
|
107
138
|
return key;
|
|
108
139
|
}).join(',');
|
|
109
140
|
}, [model.footer, selectableItems]);
|
|
110
141
|
(0, _react.useLayoutEffect)(function () {
|
|
111
|
-
|
|
142
|
+
var initialItemIndex = itemCount > 0 ? 0 : -1;
|
|
143
|
+
selectedItemIndexRef.current = initialItemIndex;
|
|
144
|
+
setSelectedItemIndex(initialItemIndex);
|
|
112
145
|
}, [itemCount, query, selectableItemKeys]);
|
|
146
|
+
(0, _react.useLayoutEffect)(function () {
|
|
147
|
+
setPreviewActivation(undefined);
|
|
148
|
+
}, [model, query]);
|
|
113
149
|
var isActiveItemMounted = selectedItemIndex >= 0 && selectedItemIndex < itemCount && (selectedItemIndex >= renderedItems.startIndex && selectedItemIndex <= renderedItems.stopIndex || Boolean(model.footer) && selectedItemIndex === itemCount - 1);
|
|
114
150
|
var activeItemId = "".concat(listId, "-").concat(selectedItemIndex);
|
|
151
|
+
var setKeyboardPreview = (0, _react.useCallback)(function (itemIndex) {
|
|
152
|
+
var item = selectableItems[itemIndex];
|
|
153
|
+
setPreviewActivation(item ? {
|
|
154
|
+
itemKey: item.key,
|
|
155
|
+
model: model,
|
|
156
|
+
source: 'keyboard'
|
|
157
|
+
} : undefined);
|
|
158
|
+
}, [model, selectableItems]);
|
|
115
159
|
var selectNextItem = (0, _react.useCallback)(function () {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
160
|
+
var currentIndex = selectedItemIndexRef.current;
|
|
161
|
+
var nextIndex = itemCount === 0 ? -1 : currentIndex < 0 ? 0 : (currentIndex + 1) % itemCount;
|
|
162
|
+
selectedItemIndexRef.current = nextIndex;
|
|
163
|
+
setSelectedItemIndex(nextIndex);
|
|
164
|
+
setKeyboardPreview(nextIndex);
|
|
165
|
+
}, [itemCount, setKeyboardPreview]);
|
|
120
166
|
var selectPreviousItem = (0, _react.useCallback)(function () {
|
|
121
|
-
|
|
122
|
-
|
|
167
|
+
var currentIndex = selectedItemIndexRef.current;
|
|
168
|
+
var previousIndex = itemCount === 0 ? -1 : currentIndex <= 0 ? itemCount - 1 : currentIndex - 1;
|
|
169
|
+
selectedItemIndexRef.current = previousIndex;
|
|
170
|
+
setSelectedItemIndex(previousIndex);
|
|
171
|
+
setKeyboardPreview(previousIndex);
|
|
172
|
+
}, [itemCount, setKeyboardPreview]);
|
|
173
|
+
var onItemHover = (0, _react.useCallback)(function (itemIndex, itemKey) {
|
|
174
|
+
selectedItemIndexRef.current = itemIndex;
|
|
175
|
+
setSelectedItemIndex(itemIndex);
|
|
176
|
+
setPreviewActivation(function (current) {
|
|
177
|
+
if ((current === null || current === void 0 ? void 0 : current.itemKey) === itemKey && (current === null || current === void 0 ? void 0 : current.model) === model && (current === null || current === void 0 ? void 0 : current.source) === 'pointer') {
|
|
178
|
+
return current;
|
|
179
|
+
}
|
|
180
|
+
return itemKey ? {
|
|
181
|
+
itemKey: itemKey,
|
|
182
|
+
model: model,
|
|
183
|
+
source: 'pointer'
|
|
184
|
+
} : undefined;
|
|
185
|
+
});
|
|
186
|
+
}, [model]);
|
|
187
|
+
var onItemFocus = (0, _react.useCallback)(function (itemIndex, itemKey) {
|
|
188
|
+
selectedItemIndexRef.current = itemIndex;
|
|
189
|
+
setSelectedItemIndex(itemIndex);
|
|
190
|
+
setPreviewActivation(function (current) {
|
|
191
|
+
if ((current === null || current === void 0 ? void 0 : current.itemKey) === itemKey && (current === null || current === void 0 ? void 0 : current.model) === model) {
|
|
192
|
+
return current;
|
|
193
|
+
}
|
|
194
|
+
return itemKey ? {
|
|
195
|
+
itemKey: itemKey,
|
|
196
|
+
model: model,
|
|
197
|
+
source: 'keyboard'
|
|
198
|
+
} : undefined;
|
|
199
|
+
});
|
|
200
|
+
}, [model]);
|
|
201
|
+
var onItemLeave = (0, _react.useCallback)(function (itemKey) {
|
|
202
|
+
setPreviewActivation(function (current) {
|
|
203
|
+
return (current === null || current === void 0 ? void 0 : current.source) === 'pointer' && current.itemKey === itemKey ? undefined : current;
|
|
204
|
+
});
|
|
205
|
+
}, []);
|
|
206
|
+
var onItemBlur = (0, _react.useCallback)(function (itemKey) {
|
|
207
|
+
setPreviewActivation(function (current) {
|
|
208
|
+
return (current === null || current === void 0 ? void 0 : current.itemKey) === itemKey ? undefined : current;
|
|
123
209
|
});
|
|
124
|
-
}, [
|
|
210
|
+
}, []);
|
|
211
|
+
var onItemVisibilityChange = (0, _react.useCallback)(function (itemKey, isVisible) {
|
|
212
|
+
if (!isVisible) {
|
|
213
|
+
setPreviewActivation(function (current) {
|
|
214
|
+
return (current === null || current === void 0 ? void 0 : current.source) === 'pointer' && current.itemKey === itemKey ? undefined : current;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}, []);
|
|
125
218
|
var selectActiveItem = (0, _react.useCallback)(function () {
|
|
126
219
|
if (isActiveItemMounted) {
|
|
127
220
|
var _getDocument;
|
|
@@ -130,12 +223,11 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
130
223
|
}, [activeItemId, isActiveItemMounted]);
|
|
131
224
|
var onQueryChange = (0, _react.useCallback)(function (event) {
|
|
132
225
|
setQuery(event.currentTarget.value);
|
|
133
|
-
setSelectedItemIndex(0);
|
|
134
226
|
}, []);
|
|
135
227
|
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
136
228
|
if (event.key === 'Escape') {
|
|
137
229
|
event.preventDefault();
|
|
138
|
-
|
|
230
|
+
closeWithAnalytics();
|
|
139
231
|
return;
|
|
140
232
|
}
|
|
141
233
|
|
|
@@ -159,7 +251,7 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
159
251
|
selectActiveItem();
|
|
160
252
|
break;
|
|
161
253
|
}
|
|
162
|
-
}, [
|
|
254
|
+
}, [closeWithAnalytics, selectActiveItem, selectNextItem, selectPreviousItem]);
|
|
163
255
|
return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
164
256
|
"data-keyboard-navigation-independent": "",
|
|
165
257
|
testId: "registered-insert-menu",
|
|
@@ -186,11 +278,16 @@ var RegisteredInsertMenu = exports.RegisteredInsertMenu = function RegisteredIns
|
|
|
186
278
|
maxHeight: maxHeight,
|
|
187
279
|
menuOpenId: menuOpenId,
|
|
188
280
|
model: model,
|
|
189
|
-
onClose:
|
|
190
|
-
|
|
281
|
+
onClose: selectWithAnalytics,
|
|
282
|
+
onItemFocus: onItemFocus,
|
|
283
|
+
onItemHover: onItemHover,
|
|
284
|
+
onItemBlur: onItemBlur,
|
|
285
|
+
onItemLeave: onItemLeave,
|
|
286
|
+
onItemVisibilityChange: onItemVisibilityChange,
|
|
191
287
|
onRenderedItemsChange: setRenderedItems,
|
|
192
288
|
query: query,
|
|
193
289
|
selectedItemIndex: selectedItemIndex,
|
|
194
|
-
surfaceContext: surfaceContext
|
|
290
|
+
surfaceContext: surfaceContext,
|
|
291
|
+
activePreviewItemKey: activePreviewItemKey
|
|
195
292
|
}));
|
|
196
293
|
};
|
|
@@ -6,13 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.RegisteredInsertMenuContent = void 0;
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
10
|
var _keys = require("@atlaskit/editor-common/quick-insert/keys");
|
|
12
11
|
var _ui = require("@atlaskit/editor-common/ui");
|
|
13
12
|
var _withOuterListeners = _interopRequireDefault(require("@atlaskit/editor-common/with-outer-listeners"));
|
|
14
13
|
var _RegisteredInsertMenu = require("./RegisteredInsertMenu");
|
|
15
14
|
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); }
|
|
15
|
+
var EMPTY_COMPONENTS = [];
|
|
16
|
+
var subscribeToNothing = function subscribeToNothing() {
|
|
17
|
+
return function () {};
|
|
18
|
+
};
|
|
16
19
|
var RegisteredInsertMenuContainer = function RegisteredInsertMenuContainer(_ref) {
|
|
17
20
|
var children = _ref.children;
|
|
18
21
|
var setOutsideClickTargetRef = (0, _react.useContext)(_ui.PlainOutsideClickTargetRefContext);
|
|
@@ -22,7 +25,7 @@ var RegisteredInsertMenuContainer = function RegisteredInsertMenuContainer(_ref)
|
|
|
22
25
|
};
|
|
23
26
|
var RegisteredInsertMenuWithListeners = (0, _withOuterListeners.default)(RegisteredInsertMenuContainer);
|
|
24
27
|
var RegisteredInsertMenuContent = exports.RegisteredInsertMenuContent = function RegisteredInsertMenuContent(_ref2) {
|
|
25
|
-
var _api$quickInsert, _api$quickInsert2;
|
|
28
|
+
var _api$uiControlRegistr2, _api$uiControlRegistr3, _api$quickInsert, _api$analytics, _api$quickInsert2;
|
|
26
29
|
var api = _ref2.api,
|
|
27
30
|
editorView = _ref2.editorView,
|
|
28
31
|
isOffline = _ref2.isOffline,
|
|
@@ -31,13 +34,12 @@ var RegisteredInsertMenuContent = exports.RegisteredInsertMenuContent = function
|
|
|
31
34
|
onDismiss = _ref2.onDismiss,
|
|
32
35
|
onSelect = _ref2.onSelect,
|
|
33
36
|
target = _ref2.target;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
components = _useState2[0];
|
|
37
|
+
var getComponents = (0, _react.useCallback)(function () {
|
|
38
|
+
var _api$uiControlRegistr;
|
|
39
|
+
var components = api === null || api === void 0 || (_api$uiControlRegistr = api.uiControlRegistry) === null || _api$uiControlRegistr === void 0 ? void 0 : _api$uiControlRegistr.actions.getComponents(_keys.MENU.key);
|
|
40
|
+
return components !== null && components !== void 0 && components.length ? components : EMPTY_COMPONENTS;
|
|
41
|
+
}, [api]);
|
|
42
|
+
var components = (0, _react.useSyncExternalStore)((_api$uiControlRegistr2 = api === null || api === void 0 || (_api$uiControlRegistr3 = api.uiControlRegistry) === null || _api$uiControlRegistr3 === void 0 ? void 0 : _api$uiControlRegistr3.actions.subscribe) !== null && _api$uiControlRegistr2 !== void 0 ? _api$uiControlRegistr2 : subscribeToNothing, getComponents, getComponents);
|
|
41
43
|
var onClickOutside = (0, _react.useCallback)(function (event) {
|
|
42
44
|
if (event.target instanceof Node && target !== null && target !== void 0 && target.contains(event.target)) {
|
|
43
45
|
return;
|
|
@@ -50,6 +52,7 @@ var RegisteredInsertMenuContent = exports.RegisteredInsertMenuContent = function
|
|
|
50
52
|
components: components,
|
|
51
53
|
editorView: editorView,
|
|
52
54
|
emptyStateHandler: api === null || api === void 0 || (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 || (_api$quickInsert = _api$quickInsert.sharedState.currentState()) === null || _api$quickInsert === void 0 ? void 0 : _api$quickInsert.emptyStateHandler,
|
|
55
|
+
fireAnalyticsEvent: api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.fireAnalyticsEvent,
|
|
53
56
|
getItemRank: api === null || api === void 0 || (_api$quickInsert2 = api.quickInsert) === null || _api$quickInsert2 === void 0 || (_api$quickInsert2 = _api$quickInsert2.sharedState.currentState()) === null || _api$quickInsert2 === void 0 ? void 0 : _api$quickInsert2.getItemRank,
|
|
54
57
|
isOffline: isOffline,
|
|
55
58
|
maxHeight: maxHeight,
|
|
@@ -4,12 +4,14 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.RegisteredInsertMenuItem = void 0;
|
|
7
|
+
exports.RegisteredInsertMenuPreviewContext = exports.RegisteredInsertMenuItem = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _enums = require("@atlaskit/editor-common/analytics/types/enums");
|
|
10
10
|
var _insert = require("@atlaskit/editor-common/insert");
|
|
11
11
|
var _provider = require("@atlaskit/editor-common/quick-insert/provider");
|
|
12
12
|
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); }
|
|
13
|
+
// Preview updates must remain live while react-virtualized caches row elements during scrolling.
|
|
14
|
+
var RegisteredInsertMenuPreviewContext = exports.RegisteredInsertMenuPreviewContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
13
15
|
var RegisteredInsertMenuItem = exports.RegisteredInsertMenuItem = function RegisteredInsertMenuItem(_ref) {
|
|
14
16
|
var _registration$compone;
|
|
15
17
|
var editorView = _ref.editorView,
|
|
@@ -21,6 +23,8 @@ var RegisteredInsertMenuItem = exports.RegisteredInsertMenuItem = function Regis
|
|
|
21
23
|
registration = _ref.registration,
|
|
22
24
|
surfaceContext = _ref.surfaceContext;
|
|
23
25
|
var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _react.default.Fragment;
|
|
26
|
+
var activePreviewItemKey = (0, _react.useContext)(RegisteredInsertMenuPreviewContext);
|
|
27
|
+
var isPreviewActive = activePreviewItemKey === registration.key;
|
|
24
28
|
var select = (0, _react.useCallback)(function (selectionHandler) {
|
|
25
29
|
// Close first so a registered item may safely focus the editor or open its picker.
|
|
26
30
|
onClose();
|
|
@@ -45,6 +49,7 @@ var RegisteredInsertMenuItem = exports.RegisteredInsertMenuItem = function Regis
|
|
|
45
49
|
isOffline: isOffline,
|
|
46
50
|
item: {
|
|
47
51
|
id: id,
|
|
52
|
+
isPreviewActive: isPreviewActive,
|
|
48
53
|
isSelected: isSelected
|
|
49
54
|
},
|
|
50
55
|
menuOpenId: menuOpenId,
|
|
@@ -52,7 +57,7 @@ var RegisteredInsertMenuItem = exports.RegisteredInsertMenuItem = function Regis
|
|
|
52
57
|
surface: 'toolbar',
|
|
53
58
|
surfaceContext: surfaceContext
|
|
54
59
|
};
|
|
55
|
-
}, [editorView, id, isOffline, isSelected, menuOpenId, select, surfaceContext]);
|
|
60
|
+
}, [editorView, id, isOffline, isPreviewActive, isSelected, menuOpenId, select, surfaceContext]);
|
|
56
61
|
return /*#__PURE__*/_react.default.createElement(_provider.QuickInsertProvider, {
|
|
57
62
|
value: contextValue
|
|
58
63
|
}, /*#__PURE__*/_react.default.createElement(Component, null, null));
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
._1e0c1txw{display:flex}
|
|
5
5
|
._1i531l7x{border-top-color:var(--ds-border,#0b120e24)}
|
|
6
6
|
._1o9zidpf{flex-shrink:0}
|
|
7
|
+
._1q51u2gc{padding-block-start:var(--ds-space-100,8px)}
|
|
7
8
|
._1tkeidpf{min-height:0}
|
|
8
9
|
._2lx21bp4{flex-direction:column}
|
|
10
|
+
._85i5u2gc{padding-block-end:var(--ds-space-100,8px)}
|
|
9
11
|
._uwhke4h9{border-top-width:var(--ds-border-width,1px)}
|
|
@@ -15,6 +15,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
15
15
|
var _react = _interopRequireWildcard(require("react"));
|
|
16
16
|
var _CellMeasurer = require("react-virtualized/dist/commonjs/CellMeasurer");
|
|
17
17
|
var _List = require("react-virtualized/dist/commonjs/List");
|
|
18
|
+
var _emptyState = require("@atlaskit/editor-common/quick-insert/empty-state");
|
|
18
19
|
var _registeredMenuModel = require("@atlaskit/editor-common/quick-insert/registered-menu-model");
|
|
19
20
|
var _useMenuListHeight2 = require("@atlaskit/editor-common/quick-insert/use-menu-list-height");
|
|
20
21
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
@@ -35,24 +36,77 @@ var listAriaProps = {
|
|
|
35
36
|
var styles = {
|
|
36
37
|
content: "_1e0c1txw _2lx21bp4 _1tkeidpf",
|
|
37
38
|
scrollable: "_16jlkb7n _1tkeidpf _18m91wug",
|
|
38
|
-
footer: "
|
|
39
|
+
footer: "_1o9zidpf",
|
|
40
|
+
footerWithDivider: "_1i531l7x _15a5nqa1 _uwhke4h9 _1o9zidpf",
|
|
41
|
+
externalControls: "_1i531l7x _15a5nqa1 _uwhke4h9 _1q51u2gc _85i5u2gc"
|
|
39
42
|
};
|
|
40
|
-
var
|
|
41
|
-
var _model$root$component, _model$root;
|
|
43
|
+
var RegisteredInsertMenuItemRow = function RegisteredInsertMenuItemRow(_ref) {
|
|
42
44
|
var editorView = _ref.editorView,
|
|
43
|
-
|
|
45
|
+
id = _ref.id,
|
|
44
46
|
isOffline = _ref.isOffline,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
maxHeight = _ref.maxHeight,
|
|
47
|
+
isSelected = _ref.isSelected,
|
|
48
|
+
itemIndex = _ref.itemIndex,
|
|
48
49
|
menuOpenId = _ref.menuOpenId,
|
|
49
|
-
model = _ref.model,
|
|
50
50
|
onClose = _ref.onClose,
|
|
51
|
-
|
|
51
|
+
onItemFocus = _ref.onItemFocus,
|
|
52
|
+
onItemBlur = _ref.onItemBlur,
|
|
52
53
|
onItemHover = _ref.onItemHover,
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
onItemLeave = _ref.onItemLeave,
|
|
55
|
+
registration = _ref.registration,
|
|
55
56
|
surfaceContext = _ref.surfaceContext;
|
|
57
|
+
(0, _react.useLayoutEffect)(function () {
|
|
58
|
+
return function () {
|
|
59
|
+
return onItemLeave(registration.key);
|
|
60
|
+
};
|
|
61
|
+
}, [onItemLeave, registration.key]);
|
|
62
|
+
var onBlur = (0, _react.useCallback)(function (event) {
|
|
63
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
64
|
+
onItemBlur(registration.key);
|
|
65
|
+
}
|
|
66
|
+
}, [onItemBlur, registration.key]);
|
|
67
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
68
|
+
onBlur: onBlur,
|
|
69
|
+
onFocus: function onFocus() {
|
|
70
|
+
return onItemFocus(itemIndex, registration.key);
|
|
71
|
+
},
|
|
72
|
+
onMouseLeave: function onMouseLeave() {
|
|
73
|
+
return onItemLeave(registration.key);
|
|
74
|
+
},
|
|
75
|
+
onMouseMove: function onMouseMove() {
|
|
76
|
+
return onItemHover(itemIndex, registration.key);
|
|
77
|
+
}
|
|
78
|
+
}, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuItem.RegisteredInsertMenuItem, {
|
|
79
|
+
editorView: editorView,
|
|
80
|
+
id: id,
|
|
81
|
+
isOffline: isOffline,
|
|
82
|
+
isSelected: isSelected,
|
|
83
|
+
menuOpenId: menuOpenId,
|
|
84
|
+
onClose: onClose,
|
|
85
|
+
registration: registration,
|
|
86
|
+
surfaceContext: surfaceContext
|
|
87
|
+
}));
|
|
88
|
+
};
|
|
89
|
+
var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function RegisteredInsertMenuList(_ref2) {
|
|
90
|
+
var _model$root$component, _model$root;
|
|
91
|
+
var editorView = _ref2.editorView,
|
|
92
|
+
emptyStateHandler = _ref2.emptyStateHandler,
|
|
93
|
+
isOffline = _ref2.isOffline,
|
|
94
|
+
listId = _ref2.listId,
|
|
95
|
+
listLabel = _ref2.listLabel,
|
|
96
|
+
maxHeight = _ref2.maxHeight,
|
|
97
|
+
menuOpenId = _ref2.menuOpenId,
|
|
98
|
+
model = _ref2.model,
|
|
99
|
+
onClose = _ref2.onClose,
|
|
100
|
+
onItemFocus = _ref2.onItemFocus,
|
|
101
|
+
onItemBlur = _ref2.onItemBlur,
|
|
102
|
+
query = _ref2.query,
|
|
103
|
+
onItemHover = _ref2.onItemHover,
|
|
104
|
+
onItemLeave = _ref2.onItemLeave,
|
|
105
|
+
onItemVisibilityChange = _ref2.onItemVisibilityChange,
|
|
106
|
+
onRenderedItemsChange = _ref2.onRenderedItemsChange,
|
|
107
|
+
selectedItemIndex = _ref2.selectedItemIndex,
|
|
108
|
+
surfaceContext = _ref2.surfaceContext,
|
|
109
|
+
activePreviewItemKey = _ref2.activePreviewItemKey;
|
|
56
110
|
var Root = (_model$root$component = (_model$root = model.root) === null || _model$root === void 0 ? void 0 : _model$root.component) !== null && _model$root$component !== void 0 ? _model$root$component : _react.default.Fragment;
|
|
57
111
|
var listRef = (0, _react.useRef)(null);
|
|
58
112
|
var setListRef = (0, _react.useCallback)(function (list) {
|
|
@@ -97,9 +151,9 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
97
151
|
return -1;
|
|
98
152
|
}, [itemIndexByRowIndex, selectedItemIndex]);
|
|
99
153
|
var rowKeySignature = (0, _react.useMemo)(function () {
|
|
100
|
-
return rows.map(function (
|
|
101
|
-
var key =
|
|
102
|
-
type =
|
|
154
|
+
return rows.map(function (_ref3) {
|
|
155
|
+
var key = _ref3.key,
|
|
156
|
+
type = _ref3.type;
|
|
103
157
|
return "".concat(type, ":").concat(key);
|
|
104
158
|
}).join('\0');
|
|
105
159
|
}, [rows]);
|
|
@@ -112,61 +166,75 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
112
166
|
(_listRef$current = listRef.current) === null || _listRef$current === void 0 || _listRef$current.recomputeRowHeights();
|
|
113
167
|
(_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 || _listRef$current2.scrollToPosition(0);
|
|
114
168
|
}, [cache, rowKeySignature]);
|
|
115
|
-
var onRowsRendered = (0, _react.useCallback)(function (
|
|
169
|
+
var onRowsRendered = (0, _react.useCallback)(function (_ref4) {
|
|
116
170
|
var _indexes$, _indexes;
|
|
117
|
-
var overscanStartIndex =
|
|
118
|
-
overscanStopIndex =
|
|
171
|
+
var overscanStartIndex = _ref4.overscanStartIndex,
|
|
172
|
+
overscanStopIndex = _ref4.overscanStopIndex,
|
|
173
|
+
startIndex = _ref4.startIndex,
|
|
174
|
+
stopIndex = _ref4.stopIndex;
|
|
175
|
+
if (activePreviewItemKey) {
|
|
176
|
+
var previewRowIndex = rows.findIndex(function (_ref5) {
|
|
177
|
+
var key = _ref5.key;
|
|
178
|
+
return key === activePreviewItemKey;
|
|
179
|
+
});
|
|
180
|
+
if (previewRowIndex < startIndex || previewRowIndex > stopIndex) {
|
|
181
|
+
onItemVisibilityChange(activePreviewItemKey, false);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
119
184
|
updateHeight();
|
|
120
|
-
var indexes = (0, _toConsumableArray2.default)(itemIndexByRowIndex).filter(function (
|
|
121
|
-
var
|
|
122
|
-
rowIndex =
|
|
185
|
+
var indexes = (0, _toConsumableArray2.default)(itemIndexByRowIndex).filter(function (_ref6) {
|
|
186
|
+
var _ref7 = (0, _slicedToArray2.default)(_ref6, 1),
|
|
187
|
+
rowIndex = _ref7[0];
|
|
123
188
|
return rowIndex >= overscanStartIndex && rowIndex <= overscanStopIndex;
|
|
124
|
-
}).map(function (
|
|
125
|
-
var
|
|
126
|
-
itemIndex =
|
|
189
|
+
}).map(function (_ref8) {
|
|
190
|
+
var _ref9 = (0, _slicedToArray2.default)(_ref8, 2),
|
|
191
|
+
itemIndex = _ref9[1];
|
|
127
192
|
return itemIndex;
|
|
128
193
|
});
|
|
129
194
|
onRenderedItemsChange({
|
|
130
195
|
startIndex: (_indexes$ = indexes[0]) !== null && _indexes$ !== void 0 ? _indexes$ : -1,
|
|
131
196
|
stopIndex: (_indexes = indexes[indexes.length - 1]) !== null && _indexes !== void 0 ? _indexes : -1
|
|
132
197
|
});
|
|
133
|
-
}, [itemIndexByRowIndex, onRenderedItemsChange, updateHeight]);
|
|
134
|
-
var
|
|
198
|
+
}, [activePreviewItemKey, itemIndexByRowIndex, onItemVisibilityChange, onRenderedItemsChange, rows, updateHeight]);
|
|
199
|
+
var onScrollableContentScroll = (0, _react.useCallback)(function (event) {
|
|
200
|
+
if (event.target === event.currentTarget && activePreviewItemKey) {
|
|
201
|
+
onItemVisibilityChange(activePreviewItemKey, false);
|
|
202
|
+
}
|
|
203
|
+
}, [activePreviewItemKey, onItemVisibilityChange]);
|
|
204
|
+
var renderRow = (0, _react.useCallback)(function (_ref0) {
|
|
135
205
|
var _registration$compone;
|
|
136
|
-
var index =
|
|
137
|
-
key =
|
|
138
|
-
parent =
|
|
139
|
-
style =
|
|
206
|
+
var index = _ref0.index,
|
|
207
|
+
key = _ref0.key,
|
|
208
|
+
parent = _ref0.parent,
|
|
209
|
+
style = _ref0.style;
|
|
140
210
|
var registration = rows[index];
|
|
141
211
|
if (!registration) {
|
|
142
212
|
return null;
|
|
143
213
|
}
|
|
144
214
|
var itemIndex = itemIndexByRowIndex.get(index);
|
|
145
|
-
var rowContent = registration.type === 'menu-section' ? ( /*#__PURE__*/_react.default.createElement((_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _react.default.Fragment, null, null)) : /*#__PURE__*/_react.default.createElement(
|
|
146
|
-
onFocus: function onFocus() {
|
|
147
|
-
return onItemHover(itemIndex !== null && itemIndex !== void 0 ? itemIndex : 0);
|
|
148
|
-
},
|
|
149
|
-
onMouseMove: function onMouseMove() {
|
|
150
|
-
return onItemHover(itemIndex !== null && itemIndex !== void 0 ? itemIndex : 0);
|
|
151
|
-
}
|
|
152
|
-
}, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuItem.RegisteredInsertMenuItem, {
|
|
215
|
+
var rowContent = registration.type === 'menu-section' ? ( /*#__PURE__*/_react.default.createElement((_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : _react.default.Fragment, null, null)) : /*#__PURE__*/_react.default.createElement(RegisteredInsertMenuItemRow, {
|
|
153
216
|
editorView: editorView,
|
|
154
217
|
id: "".concat(listId, "-").concat(itemIndex),
|
|
155
218
|
isOffline: isOffline,
|
|
156
219
|
isSelected: itemIndex === selectedItemIndex,
|
|
220
|
+
itemIndex: itemIndex !== null && itemIndex !== void 0 ? itemIndex : 0,
|
|
157
221
|
menuOpenId: menuOpenId,
|
|
158
222
|
onClose: onClose,
|
|
223
|
+
onItemFocus: onItemFocus,
|
|
224
|
+
onItemBlur: onItemBlur,
|
|
225
|
+
onItemHover: onItemHover,
|
|
226
|
+
onItemLeave: onItemLeave,
|
|
159
227
|
registration: registration,
|
|
160
228
|
surfaceContext: surfaceContext
|
|
161
|
-
})
|
|
229
|
+
});
|
|
162
230
|
return /*#__PURE__*/_react.default.createElement(_CellMeasurer.CellMeasurer, {
|
|
163
231
|
key: key,
|
|
164
232
|
cache: cache,
|
|
165
233
|
parent: parent,
|
|
166
234
|
columnIndex: 0,
|
|
167
235
|
rowIndex: index
|
|
168
|
-
}, function (
|
|
169
|
-
var registerChild =
|
|
236
|
+
}, function (_ref1) {
|
|
237
|
+
var registerChild = _ref1.registerChild;
|
|
170
238
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
171
239
|
ref: function ref(element) {
|
|
172
240
|
return registerChild === null || registerChild === void 0 ? void 0 : registerChild(element !== null && element !== void 0 ? element : undefined);
|
|
@@ -174,12 +242,21 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
174
242
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
175
243
|
,
|
|
176
244
|
style: style
|
|
177
|
-
},
|
|
245
|
+
}, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
246
|
+
paddingBlockEnd: index === rows.length - 1 ? 'space.100' : undefined
|
|
247
|
+
}, rowContent));
|
|
178
248
|
});
|
|
179
|
-
}, [cache, editorView, isOffline, itemIndexByRowIndex, listId, menuOpenId, onClose, onItemHover, rows, selectedItemIndex, surfaceContext]);
|
|
249
|
+
}, [cache, editorView, isOffline, itemIndexByRowIndex, listId, menuOpenId, onClose, onItemFocus, onItemBlur, onItemHover, onItemLeave, rows, selectedItemIndex, surfaceContext]);
|
|
180
250
|
var footerItemIndex = itemIndexByRowIndex.size;
|
|
181
251
|
var footerItemId = "".concat(listId, "-").concat(footerItemIndex);
|
|
182
252
|
var hasExternalControls = model.fallbackItems !== undefined && emptyStateHandler !== undefined;
|
|
253
|
+
var hasNoSearchResults = query !== '' && rows.length === 0;
|
|
254
|
+
var externalControls = hasExternalControls && emptyStateHandler ? emptyStateHandler({
|
|
255
|
+
mode: 'inline',
|
|
256
|
+
searchTerm: query,
|
|
257
|
+
showNoResultsMessage: false
|
|
258
|
+
}) : null;
|
|
259
|
+
var showFooterDivider = !hasNoSearchResults || Boolean(externalControls);
|
|
183
260
|
var listMaxHeight = Math.max(0, maxHeight - MENU_SEARCH_HEIGHT - (model.footer ? MENU_FOOTER_HEIGHT : 0));
|
|
184
261
|
var contentStyle = {
|
|
185
262
|
maxHeight: Math.max(0, maxHeight - MENU_SEARCH_HEIGHT)
|
|
@@ -187,9 +264,13 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
187
264
|
var onFooterItemHover = (0, _react.useCallback)(function () {
|
|
188
265
|
return onItemHover(footerItemIndex);
|
|
189
266
|
}, [footerItemIndex, onItemHover]);
|
|
267
|
+
var onFooterItemFocus = (0, _react.useCallback)(function () {
|
|
268
|
+
return onItemFocus(footerItemIndex);
|
|
269
|
+
}, [footerItemIndex, onItemFocus]);
|
|
190
270
|
var footer = model.footer ? /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
191
|
-
|
|
192
|
-
|
|
271
|
+
testId: "registered-insert-menu-footer",
|
|
272
|
+
xcss: showFooterDivider ? styles.footerWithDivider : styles.footer,
|
|
273
|
+
onFocus: onFooterItemFocus,
|
|
193
274
|
onMouseMove: onFooterItemHover
|
|
194
275
|
}, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuItem.RegisteredInsertMenuItem, {
|
|
195
276
|
editorView: editorView,
|
|
@@ -204,11 +285,14 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
204
285
|
if (!model.root) {
|
|
205
286
|
return null;
|
|
206
287
|
}
|
|
207
|
-
return /*#__PURE__*/_react.default.createElement(Root, null, /*#__PURE__*/_react.default.createElement(
|
|
288
|
+
return /*#__PURE__*/_react.default.createElement(Root, null, /*#__PURE__*/_react.default.createElement(_RegisteredInsertMenuItem.RegisteredInsertMenuPreviewContext.Provider, {
|
|
289
|
+
value: activePreviewItemKey
|
|
290
|
+
}, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
208
291
|
xcss: styles.content,
|
|
209
292
|
style: contentStyle
|
|
210
293
|
}, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
211
|
-
xcss: styles.scrollable
|
|
294
|
+
xcss: styles.scrollable,
|
|
295
|
+
onScroll: onScrollableContentScroll
|
|
212
296
|
}, /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
213
297
|
"aria-label": listLabel,
|
|
214
298
|
"aria-owns": model.footer ? footerItemId : undefined,
|
|
@@ -230,9 +314,11 @@ var RegisteredInsertMenuList = exports.RegisteredInsertMenuList = function Regis
|
|
|
230
314
|
scrollToAlignment: "auto",
|
|
231
315
|
scrollToIndex: selectedRowIndex,
|
|
232
316
|
width: LIST_WIDTH
|
|
233
|
-
}))),
|
|
234
|
-
mode:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
317
|
+
}))), hasNoSearchResults && /*#__PURE__*/_react.default.createElement(_emptyState.QuickInsertEmptyState, {
|
|
318
|
+
mode: "inline",
|
|
319
|
+
spacing: "compact"
|
|
320
|
+
}), externalControls && /*#__PURE__*/_react.default.createElement(_compiled.Box, {
|
|
321
|
+
testId: "registered-insert-menu-external-controls",
|
|
322
|
+
xcss: styles.externalControls
|
|
323
|
+
}, externalControls)), footer)));
|
|
238
324
|
};
|