@atlaskit/editor-plugin-type-ahead 0.5.0 → 0.7.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/.eslintrc.js +11 -0
- package/CHANGELOG.md +12 -0
- package/dist/cjs/api.js +215 -0
- package/dist/cjs/commands/insert-type-ahead-item.js +205 -0
- package/dist/cjs/commands/update-list-items.js +23 -0
- package/dist/cjs/commands/update-query.js +27 -0
- package/dist/cjs/commands/update-selected-index.js +27 -0
- package/dist/cjs/constants.js +15 -0
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/insert-utils.js +107 -0
- package/dist/cjs/messages.js +79 -0
- package/dist/cjs/plugin.js +382 -0
- package/dist/cjs/pm-plugins/actions.js +16 -0
- package/dist/cjs/pm-plugins/decorations.js +148 -0
- package/dist/cjs/pm-plugins/input-rules.js +36 -0
- package/dist/cjs/pm-plugins/insert-item-plugin.js +22 -0
- package/dist/cjs/pm-plugins/key.js +8 -0
- package/dist/cjs/pm-plugins/main.js +110 -0
- package/dist/cjs/pm-plugins/reducer.js +158 -0
- package/dist/cjs/pm-plugins/utils.js +18 -0
- package/dist/cjs/stats-modifier.js +42 -0
- package/dist/cjs/transforms/close-type-ahead.js +13 -0
- package/dist/cjs/transforms/open-typeahead-at-cursor.js +75 -0
- package/dist/cjs/transforms/set-selection-before-query.js +18 -0
- package/dist/cjs/ui/AssistiveText.js +120 -0
- package/dist/cjs/ui/InputQuery.js +400 -0
- package/dist/cjs/ui/TypeAheadList.js +285 -0
- package/dist/cjs/ui/TypeAheadListItem.js +181 -0
- package/dist/cjs/ui/TypeAheadPopup.js +230 -0
- package/dist/cjs/ui/WrapperTypeAhead.js +127 -0
- package/dist/cjs/ui/hooks/use-item-insert.js +109 -0
- package/dist/cjs/ui/hooks/use-load-items.js +50 -0
- package/dist/cjs/ui/hooks/use-on-force-select.js +41 -0
- package/dist/cjs/utils.js +130 -0
- package/dist/es2019/api.js +205 -0
- package/dist/es2019/commands/insert-type-ahead-item.js +204 -0
- package/dist/es2019/commands/update-list-items.js +17 -0
- package/dist/es2019/commands/update-query.js +21 -0
- package/dist/es2019/commands/update-selected-index.js +21 -0
- package/dist/es2019/constants.js +9 -0
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/insert-utils.js +106 -0
- package/dist/es2019/messages.js +73 -0
- package/dist/es2019/plugin.js +381 -0
- package/dist/es2019/pm-plugins/actions.js +10 -0
- package/dist/es2019/pm-plugins/decorations.js +148 -0
- package/dist/es2019/pm-plugins/input-rules.js +29 -0
- package/dist/es2019/pm-plugins/insert-item-plugin.js +16 -0
- package/dist/es2019/pm-plugins/key.js +2 -0
- package/dist/es2019/pm-plugins/main.js +106 -0
- package/dist/es2019/pm-plugins/reducer.js +160 -0
- package/dist/es2019/pm-plugins/utils.js +12 -0
- package/dist/es2019/stats-modifier.js +33 -0
- package/dist/es2019/transforms/close-type-ahead.js +7 -0
- package/dist/es2019/transforms/open-typeahead-at-cursor.js +71 -0
- package/dist/es2019/transforms/set-selection-before-query.js +10 -0
- package/dist/es2019/ui/AssistiveText.js +88 -0
- package/dist/es2019/ui/InputQuery.js +393 -0
- package/dist/es2019/ui/TypeAheadList.js +273 -0
- package/dist/es2019/ui/TypeAheadListItem.js +216 -0
- package/dist/es2019/ui/TypeAheadPopup.js +233 -0
- package/dist/es2019/ui/WrapperTypeAhead.js +109 -0
- package/dist/es2019/ui/hooks/use-item-insert.js +112 -0
- package/dist/es2019/ui/hooks/use-load-items.js +41 -0
- package/dist/es2019/ui/hooks/use-on-force-select.js +38 -0
- package/dist/es2019/utils.js +126 -0
- package/dist/esm/api.js +209 -0
- package/dist/esm/commands/insert-type-ahead-item.js +198 -0
- package/dist/esm/commands/update-list-items.js +17 -0
- package/dist/esm/commands/update-query.js +21 -0
- package/dist/esm/commands/update-selected-index.js +21 -0
- package/dist/esm/constants.js +9 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/insert-utils.js +101 -0
- package/dist/esm/messages.js +73 -0
- package/dist/esm/plugin.js +374 -0
- package/dist/esm/pm-plugins/actions.js +10 -0
- package/dist/esm/pm-plugins/decorations.js +141 -0
- package/dist/esm/pm-plugins/input-rules.js +29 -0
- package/dist/esm/pm-plugins/insert-item-plugin.js +16 -0
- package/dist/esm/pm-plugins/key.js +2 -0
- package/dist/esm/pm-plugins/main.js +104 -0
- package/dist/esm/pm-plugins/reducer.js +151 -0
- package/dist/esm/pm-plugins/utils.js +12 -0
- package/dist/esm/stats-modifier.js +35 -0
- package/dist/esm/transforms/close-type-ahead.js +7 -0
- package/dist/esm/transforms/open-typeahead-at-cursor.js +69 -0
- package/dist/esm/transforms/set-selection-before-query.js +12 -0
- package/dist/esm/ui/AssistiveText.js +115 -0
- package/dist/esm/ui/InputQuery.js +390 -0
- package/dist/esm/ui/TypeAheadList.js +276 -0
- package/dist/esm/ui/TypeAheadListItem.js +171 -0
- package/dist/esm/ui/TypeAheadPopup.js +220 -0
- package/dist/esm/ui/WrapperTypeAhead.js +117 -0
- package/dist/esm/ui/hooks/use-item-insert.js +103 -0
- package/dist/esm/ui/hooks/use-load-items.js +43 -0
- package/dist/esm/ui/hooks/use-on-force-select.js +35 -0
- package/dist/esm/utils.js +124 -0
- package/dist/types/api.d.ts +61 -0
- package/dist/types/commands/insert-type-ahead-item.d.ts +12 -0
- package/dist/types/commands/update-list-items.d.ts +3 -0
- package/dist/types/commands/update-query.d.ts +2 -0
- package/dist/types/commands/update-selected-index.d.ts +2 -0
- package/dist/types/constants.d.ts +8 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/insert-utils.d.ts +18 -0
- package/dist/types/messages.d.ts +72 -0
- package/dist/types/plugin.d.ts +10 -0
- package/dist/types/pm-plugins/actions.d.ts +9 -0
- package/dist/types/pm-plugins/decorations.d.ts +14 -0
- package/dist/types/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types/pm-plugins/insert-item-plugin.d.ts +2 -0
- package/dist/types/pm-plugins/key.d.ts +3 -0
- package/dist/types/pm-plugins/main.d.ts +14 -0
- package/dist/types/pm-plugins/reducer.d.ts +10 -0
- package/dist/types/pm-plugins/utils.d.ts +4 -0
- package/dist/types/stats-modifier.d.ts +20 -0
- package/dist/types/transforms/close-type-ahead.d.ts +2 -0
- package/dist/types/transforms/open-typeahead-at-cursor.d.ts +11 -0
- package/dist/types/transforms/set-selection-before-query.d.ts +2 -0
- package/dist/types/types.d.ts +64 -3
- package/dist/types/ui/AssistiveText.d.ts +33 -0
- package/dist/types/ui/InputQuery.d.ts +26 -0
- package/dist/types/ui/TypeAheadList.d.ts +25 -0
- package/dist/types/ui/TypeAheadListItem.d.ts +18 -0
- package/dist/types/ui/TypeAheadPopup.d.ts +29 -0
- package/dist/types/ui/WrapperTypeAhead.d.ts +20 -0
- package/dist/types/ui/hooks/use-item-insert.d.ts +3 -0
- package/dist/types/ui/hooks/use-load-items.d.ts +3 -0
- package/dist/types/ui/hooks/use-on-force-select.d.ts +11 -0
- package/dist/types/utils.d.ts +27 -0
- package/dist/types-ts4.5/api.d.ts +61 -0
- package/dist/types-ts4.5/commands/insert-type-ahead-item.d.ts +12 -0
- package/dist/types-ts4.5/commands/update-list-items.d.ts +3 -0
- package/dist/types-ts4.5/commands/update-query.d.ts +2 -0
- package/dist/types-ts4.5/commands/update-selected-index.d.ts +2 -0
- package/dist/types-ts4.5/constants.d.ts +8 -0
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/insert-utils.d.ts +18 -0
- package/dist/types-ts4.5/messages.d.ts +72 -0
- package/dist/types-ts4.5/plugin.d.ts +10 -0
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +9 -0
- package/dist/types-ts4.5/pm-plugins/decorations.d.ts +14 -0
- package/dist/types-ts4.5/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types-ts4.5/pm-plugins/insert-item-plugin.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/key.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +14 -0
- package/dist/types-ts4.5/pm-plugins/reducer.d.ts +10 -0
- package/dist/types-ts4.5/pm-plugins/utils.d.ts +4 -0
- package/dist/types-ts4.5/stats-modifier.d.ts +20 -0
- package/dist/types-ts4.5/transforms/close-type-ahead.d.ts +2 -0
- package/dist/types-ts4.5/transforms/open-typeahead-at-cursor.d.ts +11 -0
- package/dist/types-ts4.5/transforms/set-selection-before-query.d.ts +2 -0
- package/dist/types-ts4.5/types.d.ts +64 -3
- package/dist/types-ts4.5/ui/AssistiveText.d.ts +33 -0
- package/dist/types-ts4.5/ui/InputQuery.d.ts +26 -0
- package/dist/types-ts4.5/ui/TypeAheadList.d.ts +25 -0
- package/dist/types-ts4.5/ui/TypeAheadListItem.d.ts +18 -0
- package/dist/types-ts4.5/ui/TypeAheadPopup.d.ts +29 -0
- package/dist/types-ts4.5/ui/WrapperTypeAhead.d.ts +20 -0
- package/dist/types-ts4.5/ui/hooks/use-item-insert.d.ts +7 -0
- package/dist/types-ts4.5/ui/hooks/use-load-items.d.ts +3 -0
- package/dist/types-ts4.5/ui/hooks/use-on-force-select.d.ts +11 -0
- package/dist/types-ts4.5/utils.d.ts +27 -0
- package/package.json +21 -28
- package/report.api.md +32 -1
- package/tmp/api-report-tmp.d.ts +29 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.typeAheadListMessages = void 0;
|
|
7
|
+
var _reactIntlNext = require("react-intl-next");
|
|
8
|
+
var typeAheadListMessages = exports.typeAheadListMessages = (0, _reactIntlNext.defineMessages)({
|
|
9
|
+
typeAheadPopupLabel: {
|
|
10
|
+
id: 'fabric.editor.typeAhead.popupLabel',
|
|
11
|
+
defaultMessage: 'Typeahead results',
|
|
12
|
+
description: 'the result of a typeahead, similar to autocomplete results+'
|
|
13
|
+
},
|
|
14
|
+
quickInsertPopupLabel: {
|
|
15
|
+
id: 'fabric.editor.typeAhead.quickInsertPopupLabel',
|
|
16
|
+
defaultMessage: 'Shortcuts for inserts and formatting',
|
|
17
|
+
description: 'the result of a quick insert typeahead, similar to autocomplete results+'
|
|
18
|
+
},
|
|
19
|
+
quickInsertInputLabel: {
|
|
20
|
+
id: 'fabric.editor.typeAhead.quickInsertInputLabel',
|
|
21
|
+
defaultMessage: 'Begin typing to search or filter shortcut options',
|
|
22
|
+
description: 'assisitve text for typeahed input field'
|
|
23
|
+
},
|
|
24
|
+
emojiPopupLabel: {
|
|
25
|
+
id: 'fabric.editor.typeahead.emojiPopupLabel',
|
|
26
|
+
defaultMessage: 'Emoji shortcuts',
|
|
27
|
+
description: 'the result of a emoji typeahead, similar to autocomplete results+'
|
|
28
|
+
},
|
|
29
|
+
emojiInputLabel: {
|
|
30
|
+
id: 'fabric.editor.typeahead.emojiInputLabel',
|
|
31
|
+
defaultMessage: 'Begin typing to search or filter emoji options',
|
|
32
|
+
description: 'assisitve text for typeahed input field'
|
|
33
|
+
},
|
|
34
|
+
mentionPopupLabel: {
|
|
35
|
+
id: 'fabric.editor.typeahead.mentionPopupLabel',
|
|
36
|
+
defaultMessage: 'Users you can tag',
|
|
37
|
+
description: 'the aria label of a mention typeahead popup'
|
|
38
|
+
},
|
|
39
|
+
mentionInputLabel: {
|
|
40
|
+
id: 'fabric.editor.typeahead.mentionInputLabel',
|
|
41
|
+
defaultMessage: 'Begin typing to search for users to tag',
|
|
42
|
+
description: 'assisitve text for typeahed input field'
|
|
43
|
+
},
|
|
44
|
+
metionListItemLabel: {
|
|
45
|
+
id: 'fabric.editor.typeahead.metionListItemLabel',
|
|
46
|
+
defaultMessage: 'User {name} @{shortName}',
|
|
47
|
+
description: 'assistive text for user mention items username and nickname'
|
|
48
|
+
},
|
|
49
|
+
emojiListItemLabel: {
|
|
50
|
+
id: 'fabric.editor.typeahead.emojiListItemLabel',
|
|
51
|
+
defaultMessage: 'Emoji {name} Text Shortcut {shortcut}',
|
|
52
|
+
description: 'assistive text for emoji name and shortcut'
|
|
53
|
+
},
|
|
54
|
+
inputQueryAssistiveLabel: {
|
|
55
|
+
id: 'fabric.editor.inputQueryAssistiveTxt',
|
|
56
|
+
defaultMessage: 'When autocomplete results are available use up and down arrows to review and enter to select. Touch device users, explore by touch or with swipe gestures.',
|
|
57
|
+
description: 'Assistive text to the user when using typeahead shortcut'
|
|
58
|
+
},
|
|
59
|
+
searchResultsLabel: {
|
|
60
|
+
id: 'fabric.editor.searchResults',
|
|
61
|
+
defaultMessage: '{itemsLength, plural, one {# search result} other {# search results}} available',
|
|
62
|
+
description: 'Assistive text to the user when using typeahead shortcut and it preceeds with a number - Ex: 10 search results available'
|
|
63
|
+
},
|
|
64
|
+
noSearchResultsLabel: {
|
|
65
|
+
id: 'fabric.editor.noSearchResults',
|
|
66
|
+
defaultMessage: 'No search results',
|
|
67
|
+
description: 'Assistive text to the user when using typeahead shortcut'
|
|
68
|
+
},
|
|
69
|
+
descriptionLabel: {
|
|
70
|
+
id: 'fabric.editor.description',
|
|
71
|
+
defaultMessage: 'Description',
|
|
72
|
+
description: 'Description'
|
|
73
|
+
},
|
|
74
|
+
shortcutLabel: {
|
|
75
|
+
id: 'fabric.editor.shortcut',
|
|
76
|
+
defaultMessage: 'Text shortcut',
|
|
77
|
+
description: 'Text shortcut'
|
|
78
|
+
}
|
|
79
|
+
});
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.typeAheadPlugin = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _adfSchema = require("@atlaskit/adf-schema");
|
|
11
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
12
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
13
|
+
var _typeAhead = require("@atlaskit/editor-common/type-ahead");
|
|
14
|
+
var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
|
|
15
|
+
var _insertTypeAheadItem = require("./commands/insert-type-ahead-item");
|
|
16
|
+
var _updateSelectedIndex = require("./commands/update-selected-index");
|
|
17
|
+
var _inputRules = require("./pm-plugins/input-rules");
|
|
18
|
+
var _insertItemPlugin = require("./pm-plugins/insert-item-plugin");
|
|
19
|
+
var _key = require("./pm-plugins/key");
|
|
20
|
+
var _main = require("./pm-plugins/main");
|
|
21
|
+
var _statsModifier = require("./stats-modifier");
|
|
22
|
+
var _closeTypeAhead = require("./transforms/close-type-ahead");
|
|
23
|
+
var _openTypeaheadAtCursor = require("./transforms/open-typeahead-at-cursor");
|
|
24
|
+
var _useItemInsert3 = require("./ui/hooks/use-item-insert");
|
|
25
|
+
var _TypeAheadPopup = require("./ui/TypeAheadPopup");
|
|
26
|
+
var _utils = require("./utils");
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* Revamped typeahead using decorations instead of the `typeAheadQuery` mark
|
|
30
|
+
*
|
|
31
|
+
* https://product-fabric.atlassian.net/wiki/spaces/E/pages/2992177582/Technical+TypeAhead+Data+Flow
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
var TypeAheadMenu = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
37
|
+
var _popupMountRef$curren, _popupMountRef$curren2, _popupMountRef$curren3;
|
|
38
|
+
var editorView = _ref.editorView,
|
|
39
|
+
popupMountRef = _ref.popupMountRef,
|
|
40
|
+
typeAheadState = _ref.typeAheadState,
|
|
41
|
+
fireAnalyticsCallback = _ref.fireAnalyticsCallback;
|
|
42
|
+
var isOpen = typeAheadState.decorationSet.find().length > 0;
|
|
43
|
+
var triggerHandler = typeAheadState.triggerHandler,
|
|
44
|
+
items = typeAheadState.items,
|
|
45
|
+
selectedIndex = typeAheadState.selectedIndex,
|
|
46
|
+
decorationElement = typeAheadState.decorationElement,
|
|
47
|
+
decorationSet = typeAheadState.decorationSet,
|
|
48
|
+
query = typeAheadState.query;
|
|
49
|
+
var _useItemInsert = (0, _useItemInsert3.useItemInsert)(triggerHandler, editorView, items),
|
|
50
|
+
_useItemInsert2 = (0, _slicedToArray2.default)(_useItemInsert, 3),
|
|
51
|
+
onItemInsert = _useItemInsert2[0],
|
|
52
|
+
onTextInsert = _useItemInsert2[1],
|
|
53
|
+
onItemMatch = _useItemInsert2[2];
|
|
54
|
+
var setSelectedItem = _react.default.useCallback(function (_ref2) {
|
|
55
|
+
var nextIndex = _ref2.index;
|
|
56
|
+
queueMicrotask(function () {
|
|
57
|
+
(0, _updateSelectedIndex.updateSelectedIndex)(nextIndex)(editorView.state, editorView.dispatch);
|
|
58
|
+
});
|
|
59
|
+
}, [editorView]);
|
|
60
|
+
var insertItem = _react.default.useCallback(function () {
|
|
61
|
+
var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _typeAhead.SelectItemMode.SELECTED;
|
|
62
|
+
var index = arguments.length > 1 ? arguments[1] : undefined;
|
|
63
|
+
queueMicrotask(function () {
|
|
64
|
+
onItemInsert({
|
|
65
|
+
mode: mode,
|
|
66
|
+
index: index,
|
|
67
|
+
query: query
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}, [onItemInsert, query]);
|
|
71
|
+
var cancel = _react.default.useCallback(function (_ref3) {
|
|
72
|
+
var setSelectionAt = _ref3.setSelectionAt,
|
|
73
|
+
addPrefixTrigger = _ref3.addPrefixTrigger,
|
|
74
|
+
forceFocusOnEditor = _ref3.forceFocusOnEditor;
|
|
75
|
+
var fullQuery = addPrefixTrigger ? "".concat(triggerHandler === null || triggerHandler === void 0 ? void 0 : triggerHandler.trigger).concat(query) : query;
|
|
76
|
+
onTextInsert({
|
|
77
|
+
forceFocusOnEditor: forceFocusOnEditor,
|
|
78
|
+
setSelectionAt: setSelectionAt,
|
|
79
|
+
text: fullQuery
|
|
80
|
+
});
|
|
81
|
+
}, [triggerHandler, onTextInsert, query]);
|
|
82
|
+
_react.default.useEffect(function () {
|
|
83
|
+
if (!isOpen || !query) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
var isLastCharSpace = query[query.length - 1] === ' ';
|
|
87
|
+
if (!isLastCharSpace) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
var result = onItemMatch({
|
|
91
|
+
mode: _typeAhead.SelectItemMode.SPACE,
|
|
92
|
+
query: query.trim()
|
|
93
|
+
});
|
|
94
|
+
if (!result) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}, [isOpen, query, onItemMatch]);
|
|
98
|
+
if (!isOpen || !triggerHandler || !(decorationElement instanceof HTMLElement) || items.length === 0) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return /*#__PURE__*/_react.default.createElement(_TypeAheadPopup.TypeAheadPopup, {
|
|
102
|
+
editorView: editorView,
|
|
103
|
+
popupsMountPoint: (_popupMountRef$curren = popupMountRef.current) === null || _popupMountRef$curren === void 0 ? void 0 : _popupMountRef$curren.popupsMountPoint,
|
|
104
|
+
popupsBoundariesElement: (_popupMountRef$curren2 = popupMountRef.current) === null || _popupMountRef$curren2 === void 0 ? void 0 : _popupMountRef$curren2.popupsBoundariesElement,
|
|
105
|
+
popupsScrollableElement: (_popupMountRef$curren3 = popupMountRef.current) === null || _popupMountRef$curren3 === void 0 ? void 0 : _popupMountRef$curren3.popupsScrollableElement,
|
|
106
|
+
anchorElement: decorationElement,
|
|
107
|
+
triggerHandler: triggerHandler,
|
|
108
|
+
fireAnalyticsCallback: fireAnalyticsCallback,
|
|
109
|
+
items: items,
|
|
110
|
+
selectedIndex: selectedIndex,
|
|
111
|
+
setSelectedItem: setSelectedItem,
|
|
112
|
+
onItemInsert: insertItem,
|
|
113
|
+
decorationSet: decorationSet,
|
|
114
|
+
isEmptyQuery: !query,
|
|
115
|
+
cancel: cancel
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
var createOpenAtTransaction = function createOpenAtTransaction(editorAnalyticsAPI) {
|
|
119
|
+
return function (props) {
|
|
120
|
+
return function (tr) {
|
|
121
|
+
var triggerHandler = props.triggerHandler,
|
|
122
|
+
inputMethod = props.inputMethod;
|
|
123
|
+
(0, _openTypeaheadAtCursor.openTypeAheadAtCursor)({
|
|
124
|
+
triggerHandler: triggerHandler,
|
|
125
|
+
inputMethod: inputMethod
|
|
126
|
+
})({
|
|
127
|
+
tr: tr
|
|
128
|
+
});
|
|
129
|
+
editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 || editorAnalyticsAPI.attachAnalyticsEvent({
|
|
130
|
+
action: _analytics.ACTION.INVOKED,
|
|
131
|
+
actionSubject: _analytics.ACTION_SUBJECT.TYPEAHEAD,
|
|
132
|
+
actionSubjectId: triggerHandler.id,
|
|
133
|
+
attributes: {
|
|
134
|
+
inputMethod: inputMethod
|
|
135
|
+
},
|
|
136
|
+
eventType: _analytics.EVENT_TYPE.UI
|
|
137
|
+
})(tr);
|
|
138
|
+
return true;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
var createOpenTypeAhead = function createOpenTypeAhead(editorViewRef, editorAnalyticsAPI) {
|
|
143
|
+
return function (props) {
|
|
144
|
+
if (!editorViewRef.current) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
var view = editorViewRef.current;
|
|
148
|
+
var tr = view.state.tr;
|
|
149
|
+
createOpenAtTransaction(editorAnalyticsAPI)(props)(tr);
|
|
150
|
+
view.dispatch(tr);
|
|
151
|
+
return true;
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
var createInsertTypeAheadItem = function createInsertTypeAheadItem(editorViewRef) {
|
|
155
|
+
return function (props) {
|
|
156
|
+
if (!editorViewRef.current) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
var view = editorViewRef.current;
|
|
160
|
+
var triggerHandler = props.triggerHandler,
|
|
161
|
+
contentItem = props.contentItem,
|
|
162
|
+
query = props.query,
|
|
163
|
+
sourceListItem = props.sourceListItem,
|
|
164
|
+
mode = props.mode;
|
|
165
|
+
(0, _insertTypeAheadItem.insertTypeAheadItem)(view)({
|
|
166
|
+
handler: triggerHandler,
|
|
167
|
+
item: contentItem,
|
|
168
|
+
mode: mode || _typeAhead.SelectItemMode.SELECTED,
|
|
169
|
+
query: query,
|
|
170
|
+
sourceListItem: sourceListItem
|
|
171
|
+
});
|
|
172
|
+
return true;
|
|
173
|
+
};
|
|
174
|
+
};
|
|
175
|
+
var createFindHandlerByTrigger = function createFindHandlerByTrigger(editorViewRef) {
|
|
176
|
+
return function (trigger) {
|
|
177
|
+
if (!editorViewRef.current) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
var view = editorViewRef.current;
|
|
181
|
+
return (0, _utils.findHandler)(trigger, view.state);
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
var createCloseTypeAhead = function createCloseTypeAhead(editorViewRef) {
|
|
185
|
+
return function (options) {
|
|
186
|
+
if (!editorViewRef.current) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
var view = editorViewRef.current;
|
|
190
|
+
var currentQuery = (0, _utils.getTypeAheadQuery)(view.state) || '';
|
|
191
|
+
var state = view.state;
|
|
192
|
+
var tr = state.tr;
|
|
193
|
+
if (options.attachCommand) {
|
|
194
|
+
var fakeDispatch = function fakeDispatch(customTr) {
|
|
195
|
+
tr = customTr;
|
|
196
|
+
};
|
|
197
|
+
options.attachCommand(state, fakeDispatch);
|
|
198
|
+
}
|
|
199
|
+
(0, _closeTypeAhead.closeTypeAhead)(tr);
|
|
200
|
+
if (options.insertCurrentQueryAsRawText && currentQuery && currentQuery.length > 0) {
|
|
201
|
+
var handler = (0, _utils.getTypeAheadHandler)(state);
|
|
202
|
+
if (!handler) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
var text = handler.trigger.concat(currentQuery);
|
|
206
|
+
tr.replaceSelectionWith(state.schema.text(text));
|
|
207
|
+
}
|
|
208
|
+
view.dispatch(tr);
|
|
209
|
+
if (!view.hasFocus()) {
|
|
210
|
+
view.focus();
|
|
211
|
+
}
|
|
212
|
+
return true;
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
*
|
|
218
|
+
* Revamped typeahead using decorations instead of the `typeAheadQuery` mark
|
|
219
|
+
*
|
|
220
|
+
* https://product-fabric.atlassian.net/wiki/spaces/E/pages/2992177582/Technical+TypeAhead+Data+Flow
|
|
221
|
+
*
|
|
222
|
+
*
|
|
223
|
+
*/
|
|
224
|
+
var typeAheadPlugin = exports.typeAheadPlugin = function typeAheadPlugin(_ref4) {
|
|
225
|
+
var _api$analytics, _api$analytics2;
|
|
226
|
+
var options = _ref4.config,
|
|
227
|
+
api = _ref4.api;
|
|
228
|
+
var fireAnalyticsCallback = (0, _analytics.fireAnalyticsEvent)(options === null || options === void 0 ? void 0 : options.createAnalyticsEvent);
|
|
229
|
+
var popupMountRef = {
|
|
230
|
+
current: null
|
|
231
|
+
};
|
|
232
|
+
var editorViewRef = {
|
|
233
|
+
current: null
|
|
234
|
+
};
|
|
235
|
+
return {
|
|
236
|
+
name: 'typeAhead',
|
|
237
|
+
marks: function marks() {
|
|
238
|
+
// We need to keep this to make sure
|
|
239
|
+
// All documents with typeahead marks will be loaded normally
|
|
240
|
+
return [{
|
|
241
|
+
name: 'typeAheadQuery',
|
|
242
|
+
mark: _adfSchema.typeAheadQuery
|
|
243
|
+
}];
|
|
244
|
+
},
|
|
245
|
+
pmPlugins: function pmPlugins() {
|
|
246
|
+
var typeAhead = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
247
|
+
return [{
|
|
248
|
+
name: 'typeAhead',
|
|
249
|
+
plugin: function plugin(_ref5) {
|
|
250
|
+
var dispatch = _ref5.dispatch,
|
|
251
|
+
getIntl = _ref5.getIntl;
|
|
252
|
+
return (0, _main.createPlugin)({
|
|
253
|
+
getIntl: getIntl,
|
|
254
|
+
popupMountRef: popupMountRef,
|
|
255
|
+
reactDispatch: dispatch,
|
|
256
|
+
typeAheadHandlers: typeAhead,
|
|
257
|
+
createAnalyticsEvent: options === null || options === void 0 ? void 0 : options.createAnalyticsEvent
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}, {
|
|
261
|
+
name: 'typeAheadEditorViewRef',
|
|
262
|
+
plugin: function plugin() {
|
|
263
|
+
return new _safePlugin.SafePlugin({
|
|
264
|
+
view: function view(_view) {
|
|
265
|
+
editorViewRef.current = _view;
|
|
266
|
+
return {
|
|
267
|
+
destroy: function destroy() {
|
|
268
|
+
editorViewRef.current = null;
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}, {
|
|
275
|
+
name: 'typeAheadInsertItem',
|
|
276
|
+
plugin: _insertItemPlugin.createPlugin
|
|
277
|
+
}, {
|
|
278
|
+
name: 'typeAheadInputRule',
|
|
279
|
+
plugin: function plugin(_ref6) {
|
|
280
|
+
var schema = _ref6.schema,
|
|
281
|
+
featureFlags = _ref6.featureFlags;
|
|
282
|
+
return (0, _inputRules.inputRulePlugin)(schema, typeAhead, featureFlags);
|
|
283
|
+
}
|
|
284
|
+
}];
|
|
285
|
+
},
|
|
286
|
+
getSharedState: function getSharedState(editorState) {
|
|
287
|
+
if (!editorState) {
|
|
288
|
+
return {
|
|
289
|
+
query: '',
|
|
290
|
+
isOpen: false,
|
|
291
|
+
isAllowed: false,
|
|
292
|
+
currentHandler: undefined
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
var isOpen = (0, _utils.isTypeAheadOpen)(editorState);
|
|
296
|
+
return {
|
|
297
|
+
query: (0, _utils.getTypeAheadQuery)(editorState) || '',
|
|
298
|
+
currentHandler: (0, _utils.getTypeAheadHandler)(editorState),
|
|
299
|
+
isOpen: isOpen,
|
|
300
|
+
isAllowed: !isOpen
|
|
301
|
+
};
|
|
302
|
+
},
|
|
303
|
+
actions: {
|
|
304
|
+
isOpen: _utils.isTypeAheadOpen,
|
|
305
|
+
isAllowed: _utils.isTypeAheadAllowed,
|
|
306
|
+
open: createOpenTypeAhead(editorViewRef, api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions),
|
|
307
|
+
openAtTransaction: createOpenAtTransaction(api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions),
|
|
308
|
+
findHandlerByTrigger: createFindHandlerByTrigger(editorViewRef),
|
|
309
|
+
insert: createInsertTypeAheadItem(editorViewRef),
|
|
310
|
+
close: createCloseTypeAhead(editorViewRef)
|
|
311
|
+
},
|
|
312
|
+
contentComponent: function contentComponent(_ref7) {
|
|
313
|
+
var editorView = _ref7.editorView,
|
|
314
|
+
containerElement = _ref7.containerElement,
|
|
315
|
+
popupsMountPoint = _ref7.popupsMountPoint,
|
|
316
|
+
popupsBoundariesElement = _ref7.popupsBoundariesElement,
|
|
317
|
+
popupsScrollableElement = _ref7.popupsScrollableElement,
|
|
318
|
+
wrapperElement = _ref7.wrapperElement;
|
|
319
|
+
popupMountRef.current = {
|
|
320
|
+
popupsMountPoint: popupsMountPoint || wrapperElement || undefined,
|
|
321
|
+
popupsBoundariesElement: popupsBoundariesElement,
|
|
322
|
+
popupsScrollableElement: popupsScrollableElement || containerElement || undefined
|
|
323
|
+
};
|
|
324
|
+
return /*#__PURE__*/_react.default.createElement(_withPluginState.WithPluginState, {
|
|
325
|
+
plugins: {
|
|
326
|
+
typeAheadState: _key.pluginKey
|
|
327
|
+
},
|
|
328
|
+
render: function render(_ref8) {
|
|
329
|
+
var typeAheadState = _ref8.typeAheadState;
|
|
330
|
+
if (!typeAheadState) {
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
return /*#__PURE__*/_react.default.createElement(TypeAheadMenu, {
|
|
334
|
+
editorView: editorView,
|
|
335
|
+
popupMountRef: popupMountRef,
|
|
336
|
+
typeAheadState: typeAheadState,
|
|
337
|
+
fireAnalyticsCallback: fireAnalyticsCallback
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
},
|
|
342
|
+
onEditorViewStateUpdated: function onEditorViewStateUpdated(_ref9) {
|
|
343
|
+
var originalTransaction = _ref9.originalTransaction,
|
|
344
|
+
oldEditorState = _ref9.oldEditorState,
|
|
345
|
+
newEditorState = _ref9.newEditorState;
|
|
346
|
+
var oldPluginState = (0, _utils.getPluginState)(oldEditorState);
|
|
347
|
+
var newPluginState = (0, _utils.getPluginState)(newEditorState);
|
|
348
|
+
if (!oldPluginState || !newPluginState) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
var oldTriggerHandler = oldPluginState.triggerHandler;
|
|
352
|
+
var newTriggerHandler = newPluginState.triggerHandler;
|
|
353
|
+
var isANewHandler = oldTriggerHandler !== newTriggerHandler;
|
|
354
|
+
if (oldTriggerHandler !== null && oldTriggerHandler !== void 0 && oldTriggerHandler.dismiss && isANewHandler) {
|
|
355
|
+
var typeAheadMessage = originalTransaction.getMeta(_key.pluginKey);
|
|
356
|
+
var wasItemInserted = typeAheadMessage && typeAheadMessage.action === 'INSERT_RAW_QUERY';
|
|
357
|
+
oldTriggerHandler.dismiss({
|
|
358
|
+
editorState: newEditorState,
|
|
359
|
+
query: oldPluginState.query,
|
|
360
|
+
stats: (oldPluginState.stats || new _statsModifier.StatsModifier()).serialize(),
|
|
361
|
+
wasItemInserted: wasItemInserted
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
if (newTriggerHandler !== null && newTriggerHandler !== void 0 && newTriggerHandler.onOpen && isANewHandler) {
|
|
365
|
+
newTriggerHandler.onOpen(newEditorState);
|
|
366
|
+
}
|
|
367
|
+
if (newTriggerHandler && isANewHandler && options !== null && options !== void 0 && options.createAnalyticsEvent) {
|
|
368
|
+
fireAnalyticsCallback({
|
|
369
|
+
payload: {
|
|
370
|
+
action: _analytics.ACTION.INVOKED,
|
|
371
|
+
actionSubject: _analytics.ACTION_SUBJECT.TYPEAHEAD,
|
|
372
|
+
actionSubjectId: newTriggerHandler.id || 'not_set',
|
|
373
|
+
attributes: {
|
|
374
|
+
inputMethod: newPluginState.inputMethod || _analytics.INPUT_METHOD.KEYBOARD
|
|
375
|
+
},
|
|
376
|
+
eventType: _analytics.EVENT_TYPE.UI
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
};
|
|
382
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ACTIONS = void 0;
|
|
7
|
+
var ACTIONS = exports.ACTIONS = /*#__PURE__*/function (ACTIONS) {
|
|
8
|
+
ACTIONS["OPEN_TYPEAHEAD_AT_CURSOR"] = "OPEN_TYPEAHEAD_AT_CURSOR";
|
|
9
|
+
ACTIONS["CLOSE_TYPE_AHEAD"] = "CLOSE_TYPE_AHEAD";
|
|
10
|
+
ACTIONS["CHANGE_QUERY"] = "CHANGE_QUERY";
|
|
11
|
+
ACTIONS["INSERT_ITEM"] = "INSERT_ITEM";
|
|
12
|
+
ACTIONS["INSERT_RAW_QUERY"] = "INSERT_RAW_QUERY";
|
|
13
|
+
ACTIONS["UPDATE_LIST_ITEMS"] = "UPDATE_LIST_ITEMS";
|
|
14
|
+
ACTIONS["UPDATE_SELECTED_INDEX"] = "UPDATE_SELECTED_INDEX";
|
|
15
|
+
return ACTIONS;
|
|
16
|
+
}({});
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.factoryDecorations = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
10
|
+
var _reactIntlNext = require("react-intl-next");
|
|
11
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
|
12
|
+
var _w3cKeyname = require("w3c-keyname");
|
|
13
|
+
var _history = require("@atlaskit/editor-prosemirror/history");
|
|
14
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
15
|
+
var _view = require("@atlaskit/editor-prosemirror/view");
|
|
16
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
17
|
+
var _constants = require("../constants");
|
|
18
|
+
var _statsModifier = require("../stats-modifier");
|
|
19
|
+
var _closeTypeAhead = require("../transforms/close-type-ahead");
|
|
20
|
+
var _WrapperTypeAhead = require("../ui/WrapperTypeAhead");
|
|
21
|
+
var _utils = require("../utils");
|
|
22
|
+
var factoryDecorations = exports.factoryDecorations = function factoryDecorations(_ref) {
|
|
23
|
+
var intl = _ref.intl,
|
|
24
|
+
popupMountRef = _ref.popupMountRef,
|
|
25
|
+
createAnalyticsEvent = _ref.createAnalyticsEvent;
|
|
26
|
+
var createDecorations = function createDecorations(tr, _ref2) {
|
|
27
|
+
var triggerHandler = _ref2.triggerHandler,
|
|
28
|
+
inputMethod = _ref2.inputMethod,
|
|
29
|
+
reopenQuery = _ref2.reopenQuery;
|
|
30
|
+
var selection = tr.selection;
|
|
31
|
+
if (!(selection instanceof _state.TextSelection) || !selection.$cursor) {
|
|
32
|
+
return {
|
|
33
|
+
decorationSet: _view.DecorationSet.empty,
|
|
34
|
+
stats: null,
|
|
35
|
+
decorationElement: null
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
var decorationId = "decoration_id_".concat(_constants.TYPE_AHEAD_DECORATION_KEY, "_").concat((0, _uuid.default)());
|
|
39
|
+
var $cursor = selection.$cursor;
|
|
40
|
+
var typeaheadComponent = document.createElement('mark');
|
|
41
|
+
var stats = new _statsModifier.StatsModifier();
|
|
42
|
+
var shouldFocusCursorInsideQuery = true;
|
|
43
|
+
var deco = _view.Decoration.widget($cursor.pos, function (editorView, getDecorationPosition) {
|
|
44
|
+
var _popupMountRef$curren, _popupMountRef$curren2, _popupMountRef$curren3;
|
|
45
|
+
typeaheadComponent.setAttribute('id', decorationId);
|
|
46
|
+
typeaheadComponent.setAttribute('role', 'search');
|
|
47
|
+
typeaheadComponent.dataset.typeAheadQuery = 'true';
|
|
48
|
+
typeaheadComponent.dataset.trigger = triggerHandler.trigger;
|
|
49
|
+
|
|
50
|
+
// This line below seems weird,
|
|
51
|
+
// we need that cuz the clickAreaHelper
|
|
52
|
+
// will try to hijack any click event coming
|
|
53
|
+
// from the inside of the Editor
|
|
54
|
+
// packages/editor/editor-core/src/ui/Addon/click-area-helper.ts
|
|
55
|
+
typeaheadComponent.dataset.editorPopup = 'true';
|
|
56
|
+
typeaheadComponent.dataset.typeAhead = _constants.TYPE_AHEAD_DECORATION_DATA_ATTRIBUTE;
|
|
57
|
+
typeaheadComponent.style.color = "var(--ds-text-accent-blue, ".concat(_colors.B400, ")");
|
|
58
|
+
typeaheadComponent.style.backgroundColor = 'transparent';
|
|
59
|
+
var onUndoRedo = function onUndoRedo(inputType) {
|
|
60
|
+
if (!['historyUndo', 'historyRedo'].includes(inputType)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
var hasReopenQuery = typeof reopenQuery === 'string' && reopenQuery.trim().length > 0;
|
|
64
|
+
var currentQuery = (0, _utils.getTypeAheadQuery)(editorView.state);
|
|
65
|
+
if (hasReopenQuery || (currentQuery === null || currentQuery === void 0 ? void 0 : currentQuery.length) === 0) {
|
|
66
|
+
var command = inputType === 'historyUndo' ? _history.undo : _history.redo;
|
|
67
|
+
var _tr = editorView.state.tr;
|
|
68
|
+
var fakeDispatch = function fakeDispatch(customTr) {
|
|
69
|
+
_tr = customTr;
|
|
70
|
+
};
|
|
71
|
+
var result = command(editorView.state, fakeDispatch);
|
|
72
|
+
if (result) {
|
|
73
|
+
(0, _closeTypeAhead.closeTypeAhead)(_tr);
|
|
74
|
+
editorView.dispatch(_tr);
|
|
75
|
+
editorView.focus();
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
_reactDom.default.render( /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
|
|
82
|
+
locale: intl.locale || 'en',
|
|
83
|
+
messages: intl.messages,
|
|
84
|
+
formats: intl.formats
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_WrapperTypeAhead.WrapperTypeAhead, {
|
|
86
|
+
triggerHandler: triggerHandler,
|
|
87
|
+
editorView: editorView,
|
|
88
|
+
anchorElement: typeaheadComponent,
|
|
89
|
+
createAnalyticsEvent: createAnalyticsEvent,
|
|
90
|
+
inputMethod: inputMethod,
|
|
91
|
+
getDecorationPosition: getDecorationPosition,
|
|
92
|
+
shouldFocusCursorInsideQuery: shouldFocusCursorInsideQuery,
|
|
93
|
+
popupsMountPoint: (_popupMountRef$curren = popupMountRef.current) === null || _popupMountRef$curren === void 0 ? void 0 : _popupMountRef$curren.popupsMountPoint,
|
|
94
|
+
popupsBoundariesElement: (_popupMountRef$curren2 = popupMountRef.current) === null || _popupMountRef$curren2 === void 0 ? void 0 : _popupMountRef$curren2.popupsBoundariesElement,
|
|
95
|
+
popupsScrollableElement: (_popupMountRef$curren3 = popupMountRef.current) === null || _popupMountRef$curren3 === void 0 ? void 0 : _popupMountRef$curren3.popupsScrollableElement,
|
|
96
|
+
onUndoRedo: onUndoRedo,
|
|
97
|
+
reopenQuery: reopenQuery
|
|
98
|
+
})), typeaheadComponent);
|
|
99
|
+
shouldFocusCursorInsideQuery = false;
|
|
100
|
+
return typeaheadComponent;
|
|
101
|
+
}, {
|
|
102
|
+
isTypeAheadDecoration: true,
|
|
103
|
+
key: decorationId,
|
|
104
|
+
side: 0,
|
|
105
|
+
stopEvent: function stopEvent(e) {
|
|
106
|
+
var key = (0, _w3cKeyname.keyName)(e);
|
|
107
|
+
var sel = document.getSelection();
|
|
108
|
+
if ('ArrowLeft' === key && (sel === null || sel === void 0 ? void 0 : sel.anchorOffset) === 0) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
},
|
|
113
|
+
ignoreSelection: false
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
decorationSet: _view.DecorationSet.create(tr.doc, [deco]),
|
|
117
|
+
decorationElement: typeaheadComponent,
|
|
118
|
+
stats: stats
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
var removeDecorations = function removeDecorations(decorationSet) {
|
|
122
|
+
if (!decorationSet || decorationSet === _view.DecorationSet.empty) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
var typeAheadDecorations = decorationSet.find(undefined, undefined, function (spec) {
|
|
126
|
+
return spec.isTypeAheadDecoration;
|
|
127
|
+
});
|
|
128
|
+
if (!typeAheadDecorations || typeAheadDecorations.length === 0) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
typeAheadDecorations.forEach(function (_ref3) {
|
|
132
|
+
var spec = _ref3.spec;
|
|
133
|
+
if (!spec.key) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
var decoElement = document.querySelector("#".concat(spec.key));
|
|
137
|
+
if (!decoElement) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
_reactDom.default.unmountComponentAtNode(decoElement);
|
|
141
|
+
});
|
|
142
|
+
return true;
|
|
143
|
+
};
|
|
144
|
+
return {
|
|
145
|
+
createDecorations: createDecorations,
|
|
146
|
+
removeDecorations: removeDecorations
|
|
147
|
+
};
|
|
148
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
exports.inputRulePlugin = inputRulePlugin;
|
|
8
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
9
|
+
var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
|
|
10
|
+
var _openTypeaheadAtCursor = require("../transforms/open-typeahead-at-cursor");
|
|
11
|
+
function inputRulePlugin(schema, typeAheads, featureFlags) {
|
|
12
|
+
if (!typeAheads || typeAheads.length === 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
var rules = typeAheads.reduce(function (acc, typeAhead) {
|
|
16
|
+
var trigger = typeAhead.customRegex || typeAhead.trigger;
|
|
17
|
+
if (!trigger) {
|
|
18
|
+
return acc;
|
|
19
|
+
}
|
|
20
|
+
var regex = new RegExp("(^|[.!?\\s".concat(_prosemirrorInputRules.leafNodeReplacementCharacter, "])(").concat(trigger, ")$"));
|
|
21
|
+
acc.push((0, _prosemirrorInputRules.createRule)(regex, function (state, match) {
|
|
22
|
+
return (0, _openTypeaheadAtCursor.openTypeAheadAtCursor)({
|
|
23
|
+
triggerHandler: typeAhead,
|
|
24
|
+
inputMethod: _analytics.INPUT_METHOD.KEYBOARD
|
|
25
|
+
})({
|
|
26
|
+
tr: state.tr
|
|
27
|
+
});
|
|
28
|
+
}));
|
|
29
|
+
return acc;
|
|
30
|
+
}, []);
|
|
31
|
+
var plugin = (0, _prosemirrorInputRules.createPlugin)('type-ahead', rules, {
|
|
32
|
+
allowInsertTextOnDocument: false
|
|
33
|
+
});
|
|
34
|
+
return plugin;
|
|
35
|
+
}
|
|
36
|
+
var _default = exports.default = inputRulePlugin;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createPlugin = createPlugin;
|
|
7
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
8
|
+
var _actions = require("./actions");
|
|
9
|
+
var _utils = require("./utils");
|
|
10
|
+
function createPlugin() {
|
|
11
|
+
return new _safePlugin.SafePlugin({
|
|
12
|
+
appendTransaction: function appendTransaction(transactions, _oldState, newState) {
|
|
13
|
+
var insertItemCallback = (0, _utils.isInsertionTransaction)(transactions, _actions.ACTIONS.INSERT_ITEM);
|
|
14
|
+
if (insertItemCallback) {
|
|
15
|
+
var tr = insertItemCallback(newState);
|
|
16
|
+
if (tr) {
|
|
17
|
+
return tr;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|