@atlaskit/editor-plugin-type-ahead 0.6.0 → 0.7.1
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 +5 -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/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 +175 -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/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 +392 -0
- package/dist/es2019/ui/TypeAheadList.js +273 -0
- package/dist/es2019/ui/TypeAheadListItem.js +212 -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/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 +389 -0
- package/dist/esm/ui/TypeAheadList.js +276 -0
- package/dist/esm/ui/TypeAheadListItem.js +165 -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 +60 -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/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/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 +60 -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/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/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 -25
- package/report.api.md +29 -1
- package/tmp/api-report-tmp.d.ts +26 -0
package/.eslintrc.js
ADDED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-type-ahead
|
|
2
2
|
|
|
3
|
+
## 0.7.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#41802](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41802) [`d20ecc5a9db`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d20ecc5a9db) - Apply improved linting to type-ahead plugin.
|
|
8
|
+
|
|
9
|
+
## 0.7.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#41047](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/41047) [`8f0b00d165f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8f0b00d165f) - [ED-20003] Extract TypeAhead from editor-core to its own package @atlaskit/editor-plugin-type-ahead
|
|
14
|
+
|
|
3
15
|
## 0.6.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/cjs/api.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTypeAheadTools = void 0;
|
|
7
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
8
|
+
var _typeAhead = require("@atlaskit/editor-common/type-ahead");
|
|
9
|
+
var _insertTypeAheadItem = require("./commands/insert-type-ahead-item");
|
|
10
|
+
var _updateQuery = require("./commands/update-query");
|
|
11
|
+
var _closeTypeAhead = require("./transforms/close-type-ahead");
|
|
12
|
+
var _openTypeaheadAtCursor = require("./transforms/open-typeahead-at-cursor");
|
|
13
|
+
var _utils = require("./utils");
|
|
14
|
+
var open = function open(_ref) {
|
|
15
|
+
var editorView = _ref.editorView;
|
|
16
|
+
return function (itemType) {
|
|
17
|
+
return function (inputMethod) {
|
|
18
|
+
var state = editorView.state;
|
|
19
|
+
var handler = (0, _utils.findHandler)(itemType, state);
|
|
20
|
+
if (!handler) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
var tr = state.tr;
|
|
24
|
+
(0, _openTypeaheadAtCursor.openTypeAheadAtCursor)({
|
|
25
|
+
triggerHandler: handler,
|
|
26
|
+
inputMethod: inputMethod
|
|
27
|
+
})({
|
|
28
|
+
tr: tr
|
|
29
|
+
});
|
|
30
|
+
editorView.dispatch(tr);
|
|
31
|
+
return true;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
var defaultCloseOptions = {
|
|
36
|
+
insertCurrentQueryAsRawText: false
|
|
37
|
+
};
|
|
38
|
+
var close = function close(_ref2) {
|
|
39
|
+
var editorView = _ref2.editorView;
|
|
40
|
+
return function () {
|
|
41
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultCloseOptions;
|
|
42
|
+
var state = editorView.state;
|
|
43
|
+
var currentQuery = (0, _utils.getTypeAheadQuery)(editorView.state);
|
|
44
|
+
var tr = state.tr;
|
|
45
|
+
if (options.attachCommand) {
|
|
46
|
+
var fakeDispatch = function fakeDispatch(customTr) {
|
|
47
|
+
tr = customTr;
|
|
48
|
+
};
|
|
49
|
+
options.attachCommand(state, fakeDispatch);
|
|
50
|
+
}
|
|
51
|
+
(0, _closeTypeAhead.closeTypeAhead)(tr);
|
|
52
|
+
if (options.insertCurrentQueryAsRawText && currentQuery && currentQuery.length > 0) {
|
|
53
|
+
var handler = (0, _utils.getTypeAheadHandler)(state);
|
|
54
|
+
var text = handler.trigger.concat(currentQuery);
|
|
55
|
+
tr.replaceSelectionWith(state.schema.text(text));
|
|
56
|
+
}
|
|
57
|
+
editorView.dispatch(tr);
|
|
58
|
+
if (!editorView.hasFocus()) {
|
|
59
|
+
editorView.focus();
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
var search = function search(_ref3) {
|
|
65
|
+
var editorView = _ref3.editorView;
|
|
66
|
+
return function (itemType) {
|
|
67
|
+
return function () {
|
|
68
|
+
var query = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
69
|
+
var state = editorView.state;
|
|
70
|
+
var handler = (0, _utils.findHandler)(itemType, state);
|
|
71
|
+
if (!handler) {
|
|
72
|
+
throw new Error("Handler not found, did you load the ".concat(itemType, " plugin properly"));
|
|
73
|
+
}
|
|
74
|
+
open({
|
|
75
|
+
editorView: editorView
|
|
76
|
+
})(itemType)(_analytics.INPUT_METHOD.KEYBOARD);
|
|
77
|
+
(0, _updateQuery.updateQuery)(query)(editorView.state, editorView.dispatch);
|
|
78
|
+
var lastQuery = {
|
|
79
|
+
current: query
|
|
80
|
+
};
|
|
81
|
+
var last = handler.getItems({
|
|
82
|
+
query: query,
|
|
83
|
+
editorState: state
|
|
84
|
+
}).then(function (items) {
|
|
85
|
+
if (!handler.forceSelect) {
|
|
86
|
+
return items;
|
|
87
|
+
}
|
|
88
|
+
var forceSelectedItem = handler.forceSelect({
|
|
89
|
+
items: items,
|
|
90
|
+
query: query,
|
|
91
|
+
editorState: state
|
|
92
|
+
});
|
|
93
|
+
if (!forceSelectedItem) {
|
|
94
|
+
return items;
|
|
95
|
+
}
|
|
96
|
+
(0, _insertTypeAheadItem.insertTypeAheadItem)(editorView)({
|
|
97
|
+
handler: handler,
|
|
98
|
+
item: forceSelectedItem,
|
|
99
|
+
query: query,
|
|
100
|
+
mode: _typeAhead.SelectItemMode.SELECTED,
|
|
101
|
+
sourceListItem: items
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
var results = {
|
|
105
|
+
last: last
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
type: function type(appendValue) {
|
|
109
|
+
if (!appendValue) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
lastQuery.current += appendValue;
|
|
113
|
+
(0, _updateQuery.updateQuery)(lastQuery.current)(editorView.state, editorView.dispatch);
|
|
114
|
+
var promise = handler.getItems({
|
|
115
|
+
query: lastQuery.current,
|
|
116
|
+
editorState: state
|
|
117
|
+
});
|
|
118
|
+
results.last = promise;
|
|
119
|
+
return promise;
|
|
120
|
+
},
|
|
121
|
+
result: function result() {
|
|
122
|
+
return results.last;
|
|
123
|
+
},
|
|
124
|
+
close: close({
|
|
125
|
+
editorView: editorView
|
|
126
|
+
}),
|
|
127
|
+
insert: function insert(_ref4) {
|
|
128
|
+
var index = _ref4.index,
|
|
129
|
+
mode = _ref4.mode;
|
|
130
|
+
return results.last.then(function (result) {
|
|
131
|
+
var item = result ? result[index] : null;
|
|
132
|
+
if (result && item) {
|
|
133
|
+
(0, _insertTypeAheadItem.insertTypeAheadItem)(editorView)({
|
|
134
|
+
handler: handler,
|
|
135
|
+
item: item,
|
|
136
|
+
query: query,
|
|
137
|
+
mode: mode || _typeAhead.SelectItemMode.SELECTED,
|
|
138
|
+
sourceListItem: result
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
var insertItem = function insertItem(_ref5) {
|
|
148
|
+
var editorView = _ref5.editorView;
|
|
149
|
+
return function (itemType) {
|
|
150
|
+
return function (_ref6) {
|
|
151
|
+
var contentItem = _ref6.contentItem,
|
|
152
|
+
query = _ref6.query,
|
|
153
|
+
sourceListItem = _ref6.sourceListItem;
|
|
154
|
+
var state = editorView.state;
|
|
155
|
+
var handler = (0, _utils.findHandler)(itemType, state);
|
|
156
|
+
if (!handler) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
(0, _insertTypeAheadItem.insertTypeAheadItem)(editorView)({
|
|
160
|
+
handler: handler,
|
|
161
|
+
item: contentItem,
|
|
162
|
+
mode: _typeAhead.SelectItemMode.SELECTED,
|
|
163
|
+
query: query,
|
|
164
|
+
sourceListItem: sourceListItem
|
|
165
|
+
});
|
|
166
|
+
return true;
|
|
167
|
+
};
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
var isOpen = function isOpen(_ref7) {
|
|
171
|
+
var editorView = _ref7.editorView;
|
|
172
|
+
return function () {
|
|
173
|
+
if (!(0, _utils.isTypeAheadOpen)(editorView.state)) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
var handler = (0, _utils.getTypeAheadHandler)(editorView.state);
|
|
177
|
+
if (!handler) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return handler;
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
var currentQuery = function currentQuery(_ref8) {
|
|
184
|
+
var editorView = _ref8.editorView;
|
|
185
|
+
return function () {
|
|
186
|
+
return (0, _utils.getTypeAheadQuery)(editorView.state);
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Please do not use it. Ping #help-editor and talk to the Lego team before use it.
|
|
192
|
+
*
|
|
193
|
+
* @private
|
|
194
|
+
* @deprecated
|
|
195
|
+
*
|
|
196
|
+
*/
|
|
197
|
+
var createTypeAheadTools = exports.createTypeAheadTools = function createTypeAheadTools(editorView) {
|
|
198
|
+
var props = {
|
|
199
|
+
editorView: editorView
|
|
200
|
+
};
|
|
201
|
+
return {
|
|
202
|
+
isOpen: isOpen(props),
|
|
203
|
+
currentQuery: currentQuery(props),
|
|
204
|
+
close: close(props),
|
|
205
|
+
openMention: open(props)(_typeAhead.TypeAheadAvailableNodes.MENTION),
|
|
206
|
+
searchMention: search(props)(_typeAhead.TypeAheadAvailableNodes.MENTION),
|
|
207
|
+
openQuickInsert: open(props)(_typeAhead.TypeAheadAvailableNodes.QUICK_INSERT),
|
|
208
|
+
searchQuickInsert: search(props)(_typeAhead.TypeAheadAvailableNodes.QUICK_INSERT),
|
|
209
|
+
openEmoji: open(props)(_typeAhead.TypeAheadAvailableNodes.EMOJI),
|
|
210
|
+
searchEmoji: search(props)(_typeAhead.TypeAheadAvailableNodes.EMOJI),
|
|
211
|
+
insertItemMention: insertItem(props)(_typeAhead.TypeAheadAvailableNodes.MENTION),
|
|
212
|
+
insertItemEmoji: insertItem(props)(_typeAhead.TypeAheadAvailableNodes.EMOJI),
|
|
213
|
+
insertItemQuickInsert: insertItem(props)(_typeAhead.TypeAheadAvailableNodes.QUICK_INSERT)
|
|
214
|
+
};
|
|
215
|
+
};
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.insertTypeAheadItem = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _steps = require("@atlaskit/adf-schema/steps");
|
|
10
|
+
var _typeAhead = require("@atlaskit/editor-common/type-ahead");
|
|
11
|
+
var _history = require("@atlaskit/editor-prosemirror/history");
|
|
12
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
13
|
+
var _insertUtils = require("../insert-utils");
|
|
14
|
+
var _actions = require("../pm-plugins/actions");
|
|
15
|
+
var _key = require("../pm-plugins/key");
|
|
16
|
+
var _statsModifier = require("../stats-modifier");
|
|
17
|
+
var _closeTypeAhead = require("../transforms/close-type-ahead");
|
|
18
|
+
var _utils = require("../utils");
|
|
19
|
+
var validateNode = function validateNode(_ref) {
|
|
20
|
+
var schema = _ref.schema,
|
|
21
|
+
maybeNode = _ref.maybeNode;
|
|
22
|
+
if (!maybeNode) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
if (maybeNode instanceof _model.Node || maybeNode instanceof _model.Fragment) {
|
|
26
|
+
return maybeNode;
|
|
27
|
+
}
|
|
28
|
+
if (typeof maybeNode === 'string') {
|
|
29
|
+
return schema.text(maybeNode);
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
return _model.Node.fromJSON(schema, maybeNode);
|
|
33
|
+
} catch (e) {
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.error(e);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var createInsertCallback = function createInsertCallback(_ref2) {
|
|
40
|
+
var state = _ref2.editorState,
|
|
41
|
+
handler = _ref2.handler,
|
|
42
|
+
query = _ref2.query,
|
|
43
|
+
wasInsertedBySpace = _ref2.wasInsertedBySpace,
|
|
44
|
+
selectedIndex = _ref2.selectedIndex,
|
|
45
|
+
textStartPosition = _ref2.textStartPosition,
|
|
46
|
+
textInserted = _ref2.textInserted;
|
|
47
|
+
return function (maybeNode) {
|
|
48
|
+
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
49
|
+
var tr = state.tr;
|
|
50
|
+
var position = {
|
|
51
|
+
start: textStartPosition,
|
|
52
|
+
end: textStartPosition + (wasInsertedBySpace ? textInserted.length : 0)
|
|
53
|
+
};
|
|
54
|
+
var node = validateNode({
|
|
55
|
+
schema: state.schema,
|
|
56
|
+
maybeNode: maybeNode
|
|
57
|
+
});
|
|
58
|
+
if (!node) {
|
|
59
|
+
(0, _closeTypeAhead.closeTypeAhead)(tr);
|
|
60
|
+
// In this kind of situation we need to
|
|
61
|
+
// delete the raw text query
|
|
62
|
+
tr.delete(position.start, position.end);
|
|
63
|
+
return tr;
|
|
64
|
+
}
|
|
65
|
+
node instanceof _model.Node && node.isBlock ? (0, _insertUtils.insertBlockNode)({
|
|
66
|
+
node: node,
|
|
67
|
+
tr: tr,
|
|
68
|
+
position: position
|
|
69
|
+
}) : (0, _insertUtils.insertInlineNodeOrFragment)({
|
|
70
|
+
maybeFragment: node,
|
|
71
|
+
tr: tr,
|
|
72
|
+
position: position,
|
|
73
|
+
selectInlineNode: Boolean(opts.selectInlineNode)
|
|
74
|
+
});
|
|
75
|
+
(0, _history.closeHistory)(tr);
|
|
76
|
+
if (wasInsertedBySpace) {
|
|
77
|
+
return tr;
|
|
78
|
+
}
|
|
79
|
+
var config = {
|
|
80
|
+
stage: _steps.InsertTypeAheadStages.INSERTING_ITEM,
|
|
81
|
+
query: query,
|
|
82
|
+
selectedIndex: selectedIndex,
|
|
83
|
+
trigger: handler.trigger
|
|
84
|
+
};
|
|
85
|
+
tr.step(new _steps.InsertTypeAheadStep(config));
|
|
86
|
+
return tr;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
var createDeleteRawTextCallback = function createDeleteRawTextCallback(_ref3) {
|
|
90
|
+
var trigger = _ref3.trigger,
|
|
91
|
+
selectedIndex = _ref3.selectedIndex,
|
|
92
|
+
position = _ref3.position,
|
|
93
|
+
query = _ref3.query,
|
|
94
|
+
wasInsertedBySpace = _ref3.wasInsertedBySpace,
|
|
95
|
+
insertItem = _ref3.insertItem;
|
|
96
|
+
return function (newState) {
|
|
97
|
+
var tr = newState.tr;
|
|
98
|
+
(0, _history.closeHistory)(tr);
|
|
99
|
+
if (!wasInsertedBySpace) {
|
|
100
|
+
tr.delete(position.start, position.end);
|
|
101
|
+
var config = {
|
|
102
|
+
stage: _steps.InsertTypeAheadStages.DELETING_RAW_QUERY,
|
|
103
|
+
selectedIndex: selectedIndex,
|
|
104
|
+
query: query,
|
|
105
|
+
trigger: trigger
|
|
106
|
+
};
|
|
107
|
+
tr.step(new _steps.InsertTypeAheadStep(config));
|
|
108
|
+
}
|
|
109
|
+
tr.setMeta(_key.pluginKey, {
|
|
110
|
+
action: _actions.ACTIONS.INSERT_ITEM,
|
|
111
|
+
params: insertItem
|
|
112
|
+
});
|
|
113
|
+
return tr;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
var insertTypeAheadItem = exports.insertTypeAheadItem = function insertTypeAheadItem(view) {
|
|
117
|
+
return function (_ref4) {
|
|
118
|
+
var item = _ref4.item,
|
|
119
|
+
handler = _ref4.handler,
|
|
120
|
+
mode = _ref4.mode,
|
|
121
|
+
query = _ref4.query,
|
|
122
|
+
sourceListItem = _ref4.sourceListItem;
|
|
123
|
+
var pluginState = (0, _utils.getPluginState)(view.state);
|
|
124
|
+
if (!pluginState) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
var stats = (pluginState.stats || new _statsModifier.StatsModifier()).serialize();
|
|
128
|
+
var meta = {
|
|
129
|
+
mode: mode,
|
|
130
|
+
query: query,
|
|
131
|
+
stats: stats,
|
|
132
|
+
sourceListItem: sourceListItem
|
|
133
|
+
};
|
|
134
|
+
var tr = view.state.tr;
|
|
135
|
+
var trigger = handler.trigger;
|
|
136
|
+
var text = "".concat(trigger).concat(query);
|
|
137
|
+
if (mode === _typeAhead.SelectItemMode.SPACE) {
|
|
138
|
+
text = text.trim().concat(' ');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// We want to always persist selectedIndex as -1 upon selecting an item from typeahead
|
|
142
|
+
// in order to retain exist focus behaviour when undoing
|
|
143
|
+
var selectedIndex = -1;
|
|
144
|
+
var wasInsertedBySpace = mode === _typeAhead.SelectItemMode.SPACE;
|
|
145
|
+
var textStartPosition = tr.selection.from;
|
|
146
|
+
var insertItem = function insertItem(newEditorSate) {
|
|
147
|
+
var insertCallback = createInsertCallback({
|
|
148
|
+
editorState: newEditorSate,
|
|
149
|
+
query: query,
|
|
150
|
+
mode: mode,
|
|
151
|
+
handler: handler,
|
|
152
|
+
wasInsertedBySpace: wasInsertedBySpace,
|
|
153
|
+
selectedIndex: selectedIndex,
|
|
154
|
+
textInserted: text,
|
|
155
|
+
textStartPosition: textStartPosition
|
|
156
|
+
});
|
|
157
|
+
var wasInsertCallbackCalled = false;
|
|
158
|
+
// Some wierd plugins doesn't call the insert item callback
|
|
159
|
+
// For example, the link quick insert item
|
|
160
|
+
// For those cases we need to make sure we are closing the typeahead
|
|
161
|
+
var proxyHandler = {
|
|
162
|
+
apply: function apply(target, _thisContext, argumentsList) {
|
|
163
|
+
wasInsertCallbackCalled = true;
|
|
164
|
+
return target.apply(void 0, (0, _toConsumableArray2.default)(argumentsList));
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var insertCallbackProxy = new Proxy(insertCallback, proxyHandler);
|
|
168
|
+
var nextTr = handler.selectItem(newEditorSate, item, insertCallbackProxy, meta);
|
|
169
|
+
if (!wasInsertCallbackCalled && nextTr) {
|
|
170
|
+
(0, _history.closeHistory)(nextTr);
|
|
171
|
+
|
|
172
|
+
// In some cases we need to re-open the typeahead
|
|
173
|
+
// e.g.: addign mentions from the quick insert
|
|
174
|
+
//
|
|
175
|
+
// Today, the QuickInsert API doesn't have a tool
|
|
176
|
+
// to help on this. So the code below will close the typeahead
|
|
177
|
+
// only if there is no previous metadata about typeahead in the
|
|
178
|
+
// next transaction
|
|
179
|
+
if (!nextTr.getMeta(_key.pluginKey)) {
|
|
180
|
+
(0, _closeTypeAhead.closeTypeAhead)(nextTr);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return nextTr;
|
|
184
|
+
};
|
|
185
|
+
var position = {
|
|
186
|
+
start: tr.selection.from,
|
|
187
|
+
end: tr.selection.from + text.length
|
|
188
|
+
};
|
|
189
|
+
tr.setMeta(_key.pluginKey, {
|
|
190
|
+
action: _actions.ACTIONS.INSERT_RAW_QUERY,
|
|
191
|
+
params: createDeleteRawTextCallback({
|
|
192
|
+
wasInsertedBySpace: wasInsertedBySpace,
|
|
193
|
+
selectedIndex: selectedIndex,
|
|
194
|
+
insertItem: insertItem,
|
|
195
|
+
position: position,
|
|
196
|
+
query: query,
|
|
197
|
+
trigger: trigger
|
|
198
|
+
})
|
|
199
|
+
});
|
|
200
|
+
tr.insertText(text);
|
|
201
|
+
(0, _history.closeHistory)(tr);
|
|
202
|
+
view.dispatch(tr);
|
|
203
|
+
view.focus();
|
|
204
|
+
};
|
|
205
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.updateListItem = void 0;
|
|
7
|
+
var _actions = require("../pm-plugins/actions");
|
|
8
|
+
var _key = require("../pm-plugins/key");
|
|
9
|
+
var updateListItem = exports.updateListItem = function updateListItem(items) {
|
|
10
|
+
return function (state, dispatch) {
|
|
11
|
+
var tr = state.tr;
|
|
12
|
+
tr.setMeta(_key.pluginKey, {
|
|
13
|
+
action: _actions.ACTIONS.UPDATE_LIST_ITEMS,
|
|
14
|
+
params: {
|
|
15
|
+
items: items
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
if (dispatch) {
|
|
19
|
+
dispatch(tr);
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.updateQuery = void 0;
|
|
7
|
+
var _actions = require("../pm-plugins/actions");
|
|
8
|
+
var _key = require("../pm-plugins/key");
|
|
9
|
+
var updateQuery = exports.updateQuery = function updateQuery(query) {
|
|
10
|
+
return function (state, dispatch) {
|
|
11
|
+
var pluginState = _key.pluginKey.getState(state);
|
|
12
|
+
if ((pluginState === null || pluginState === void 0 ? void 0 : pluginState.query) === query) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
var tr = state.tr;
|
|
16
|
+
tr.setMeta(_key.pluginKey, {
|
|
17
|
+
action: _actions.ACTIONS.CHANGE_QUERY,
|
|
18
|
+
params: {
|
|
19
|
+
query: query
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
if (dispatch) {
|
|
23
|
+
dispatch(tr);
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.updateSelectedIndex = void 0;
|
|
7
|
+
var _actions = require("../pm-plugins/actions");
|
|
8
|
+
var _key = require("../pm-plugins/key");
|
|
9
|
+
var updateSelectedIndex = exports.updateSelectedIndex = function updateSelectedIndex(selectedIndex) {
|
|
10
|
+
return function (state, dispatch) {
|
|
11
|
+
var pluginState = _key.pluginKey.getState(state);
|
|
12
|
+
if ((pluginState === null || pluginState === void 0 ? void 0 : pluginState.selectedIndex) === selectedIndex) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
var tr = state.tr;
|
|
16
|
+
tr.setMeta(_key.pluginKey, {
|
|
17
|
+
action: _actions.ACTIONS.UPDATE_SELECTED_INDEX,
|
|
18
|
+
params: {
|
|
19
|
+
selectedIndex: selectedIndex
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
if (dispatch) {
|
|
23
|
+
dispatch(tr);
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
};
|
|
27
|
+
};
|
package/dist/cjs/index.js
CHANGED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.insertInlineNodeOrFragment = exports.insertBlockNode = void 0;
|
|
7
|
+
var _insert = require("@atlaskit/editor-common/insert");
|
|
8
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
9
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
10
|
+
function findInsertPoint(doc, pos, nodeToInsert) {
|
|
11
|
+
var $pos = doc.resolve(pos);
|
|
12
|
+
var createInsertPosition = function createInsertPosition(from, to) {
|
|
13
|
+
return {
|
|
14
|
+
from: from,
|
|
15
|
+
to: to || from
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Search for a valid position for nodeToInsert in progressively higher levels
|
|
20
|
+
for (var level = $pos.depth; level >= 0; level--) {
|
|
21
|
+
var nodeAtLevel = $pos.node(level);
|
|
22
|
+
|
|
23
|
+
// Try to replace the empty paragraph in the level above
|
|
24
|
+
// Scenario:
|
|
25
|
+
// doc(
|
|
26
|
+
// table(
|
|
27
|
+
// row(
|
|
28
|
+
// cell(
|
|
29
|
+
// p('{<>}'),
|
|
30
|
+
// ),
|
|
31
|
+
// )
|
|
32
|
+
// )
|
|
33
|
+
// )
|
|
34
|
+
var levelAbove = Math.max(level - 1, 0);
|
|
35
|
+
var parentNode = $pos.node(levelAbove);
|
|
36
|
+
// Special case: when this is true, the 'to' position should be the end
|
|
37
|
+
// of the empty paragraph
|
|
38
|
+
var isNodeAtLevelEmptyParagraph = nodeAtLevel.type.name === 'paragraph' && nodeAtLevel.content.size === 0;
|
|
39
|
+
var indexAtLevelAbove = $pos.index(levelAbove);
|
|
40
|
+
var canReplaceNodeAtLevelAbove = parentNode.canReplaceWith(indexAtLevelAbove, indexAtLevelAbove, nodeToInsert.type);
|
|
41
|
+
if (isNodeAtLevelEmptyParagraph && canReplaceNodeAtLevelAbove) {
|
|
42
|
+
var from = $pos.posAtIndex(indexAtLevelAbove, levelAbove);
|
|
43
|
+
return createInsertPosition(from, from + nodeAtLevel.nodeSize);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Try to insert this node right after the node in the level above
|
|
47
|
+
// Scenario:
|
|
48
|
+
// doc(
|
|
49
|
+
// panel(
|
|
50
|
+
// p('{<>}'),
|
|
51
|
+
// )
|
|
52
|
+
// )
|
|
53
|
+
var indexAfterAtLevelAbove = $pos.indexAfter(levelAbove);
|
|
54
|
+
var canInsertNodeAtLevelAbove = parentNode.canReplaceWith(indexAfterAtLevelAbove, indexAfterAtLevelAbove, nodeToInsert.type);
|
|
55
|
+
if (canInsertNodeAtLevelAbove) {
|
|
56
|
+
return createInsertPosition($pos.posAtIndex(indexAfterAtLevelAbove, levelAbove));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return createInsertPosition(0);
|
|
60
|
+
}
|
|
61
|
+
var insertBlockNode = exports.insertBlockNode = function insertBlockNode(_ref) {
|
|
62
|
+
var node = _ref.node,
|
|
63
|
+
tr = _ref.tr,
|
|
64
|
+
position = _ref.position;
|
|
65
|
+
var start = position.start,
|
|
66
|
+
end = position.end;
|
|
67
|
+
if (node.isText) {
|
|
68
|
+
return tr.replaceWith(start, end, node);
|
|
69
|
+
}
|
|
70
|
+
if (node.isBlock) {
|
|
71
|
+
tr.delete(start, end);
|
|
72
|
+
var mappedStart = tr.mapping.map(start);
|
|
73
|
+
var nodeNormalized = (0, _insert.normaliseNestedLayout)(tr, node);
|
|
74
|
+
|
|
75
|
+
// Handle edge cases for hr and mediaSingle
|
|
76
|
+
var inserted = (0, _insert.safeInsert)(nodeNormalized, mappedStart)(tr);
|
|
77
|
+
if (inserted) {
|
|
78
|
+
return tr;
|
|
79
|
+
}
|
|
80
|
+
var sliceInserted = _model.Slice.maxOpen(_model.Fragment.from(nodeNormalized));
|
|
81
|
+
var _findInsertPoint = findInsertPoint(tr.doc, mappedStart, nodeNormalized),
|
|
82
|
+
from = _findInsertPoint.from,
|
|
83
|
+
to = _findInsertPoint.to;
|
|
84
|
+
tr.replaceWith(from, to, node);
|
|
85
|
+
var openPosition = Math.min(from + (node.isAtom ? node.nodeSize : sliceInserted.openStart), tr.doc.content.size);
|
|
86
|
+
var FORWARD_DIRECTION = 1;
|
|
87
|
+
var nextSelection = _state.TextSelection.findFrom(tr.doc.resolve(openPosition), FORWARD_DIRECTION, true);
|
|
88
|
+
if (nextSelection) {
|
|
89
|
+
return tr.setSelection(nextSelection);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return tr;
|
|
93
|
+
};
|
|
94
|
+
var insertInlineNodeOrFragment = exports.insertInlineNodeOrFragment = function insertInlineNodeOrFragment(_ref2) {
|
|
95
|
+
var maybeFragment = _ref2.maybeFragment,
|
|
96
|
+
tr = _ref2.tr,
|
|
97
|
+
position = _ref2.position,
|
|
98
|
+
selectInlineNode = _ref2.selectInlineNode;
|
|
99
|
+
var start = position.start,
|
|
100
|
+
end = position.end;
|
|
101
|
+
var fragment = maybeFragment instanceof _model.Node ? _model.Fragment.from(maybeFragment) : maybeFragment;
|
|
102
|
+
tr.replaceWith(start, end, fragment);
|
|
103
|
+
if (selectInlineNode) {
|
|
104
|
+
return tr.setSelection(_state.NodeSelection.create(tr.doc, start));
|
|
105
|
+
}
|
|
106
|
+
return tr.setSelection(_state.TextSelection.near(tr.doc.resolve(start + fragment.size)));
|
|
107
|
+
};
|