@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.
Files changed (160) hide show
  1. package/.eslintrc.js +5 -0
  2. package/CHANGELOG.md +12 -0
  3. package/dist/cjs/api.js +215 -0
  4. package/dist/cjs/commands/insert-type-ahead-item.js +205 -0
  5. package/dist/cjs/commands/update-list-items.js +23 -0
  6. package/dist/cjs/commands/update-query.js +27 -0
  7. package/dist/cjs/commands/update-selected-index.js +27 -0
  8. package/dist/cjs/index.js +8 -1
  9. package/dist/cjs/insert-utils.js +107 -0
  10. package/dist/cjs/messages.js +79 -0
  11. package/dist/cjs/plugin.js +382 -0
  12. package/dist/cjs/pm-plugins/actions.js +16 -0
  13. package/dist/cjs/pm-plugins/decorations.js +148 -0
  14. package/dist/cjs/pm-plugins/input-rules.js +36 -0
  15. package/dist/cjs/pm-plugins/insert-item-plugin.js +22 -0
  16. package/dist/cjs/pm-plugins/key.js +8 -0
  17. package/dist/cjs/pm-plugins/main.js +110 -0
  18. package/dist/cjs/pm-plugins/reducer.js +158 -0
  19. package/dist/cjs/pm-plugins/utils.js +18 -0
  20. package/dist/cjs/stats-modifier.js +42 -0
  21. package/dist/cjs/transforms/close-type-ahead.js +13 -0
  22. package/dist/cjs/transforms/open-typeahead-at-cursor.js +75 -0
  23. package/dist/cjs/transforms/set-selection-before-query.js +18 -0
  24. package/dist/cjs/ui/AssistiveText.js +120 -0
  25. package/dist/cjs/ui/InputQuery.js +400 -0
  26. package/dist/cjs/ui/TypeAheadList.js +285 -0
  27. package/dist/cjs/ui/TypeAheadListItem.js +175 -0
  28. package/dist/cjs/ui/TypeAheadPopup.js +230 -0
  29. package/dist/cjs/ui/WrapperTypeAhead.js +127 -0
  30. package/dist/cjs/ui/hooks/use-item-insert.js +109 -0
  31. package/dist/cjs/ui/hooks/use-load-items.js +50 -0
  32. package/dist/cjs/ui/hooks/use-on-force-select.js +41 -0
  33. package/dist/cjs/utils.js +130 -0
  34. package/dist/es2019/api.js +205 -0
  35. package/dist/es2019/commands/insert-type-ahead-item.js +204 -0
  36. package/dist/es2019/commands/update-list-items.js +17 -0
  37. package/dist/es2019/commands/update-query.js +21 -0
  38. package/dist/es2019/commands/update-selected-index.js +21 -0
  39. package/dist/es2019/index.js +1 -1
  40. package/dist/es2019/insert-utils.js +106 -0
  41. package/dist/es2019/messages.js +73 -0
  42. package/dist/es2019/plugin.js +381 -0
  43. package/dist/es2019/pm-plugins/actions.js +10 -0
  44. package/dist/es2019/pm-plugins/decorations.js +148 -0
  45. package/dist/es2019/pm-plugins/input-rules.js +29 -0
  46. package/dist/es2019/pm-plugins/insert-item-plugin.js +16 -0
  47. package/dist/es2019/pm-plugins/key.js +2 -0
  48. package/dist/es2019/pm-plugins/main.js +106 -0
  49. package/dist/es2019/pm-plugins/reducer.js +160 -0
  50. package/dist/es2019/pm-plugins/utils.js +12 -0
  51. package/dist/es2019/stats-modifier.js +33 -0
  52. package/dist/es2019/transforms/close-type-ahead.js +7 -0
  53. package/dist/es2019/transforms/open-typeahead-at-cursor.js +71 -0
  54. package/dist/es2019/transforms/set-selection-before-query.js +10 -0
  55. package/dist/es2019/ui/AssistiveText.js +88 -0
  56. package/dist/es2019/ui/InputQuery.js +392 -0
  57. package/dist/es2019/ui/TypeAheadList.js +273 -0
  58. package/dist/es2019/ui/TypeAheadListItem.js +212 -0
  59. package/dist/es2019/ui/TypeAheadPopup.js +233 -0
  60. package/dist/es2019/ui/WrapperTypeAhead.js +109 -0
  61. package/dist/es2019/ui/hooks/use-item-insert.js +112 -0
  62. package/dist/es2019/ui/hooks/use-load-items.js +41 -0
  63. package/dist/es2019/ui/hooks/use-on-force-select.js +38 -0
  64. package/dist/es2019/utils.js +126 -0
  65. package/dist/esm/api.js +209 -0
  66. package/dist/esm/commands/insert-type-ahead-item.js +198 -0
  67. package/dist/esm/commands/update-list-items.js +17 -0
  68. package/dist/esm/commands/update-query.js +21 -0
  69. package/dist/esm/commands/update-selected-index.js +21 -0
  70. package/dist/esm/index.js +1 -1
  71. package/dist/esm/insert-utils.js +101 -0
  72. package/dist/esm/messages.js +73 -0
  73. package/dist/esm/plugin.js +374 -0
  74. package/dist/esm/pm-plugins/actions.js +10 -0
  75. package/dist/esm/pm-plugins/decorations.js +141 -0
  76. package/dist/esm/pm-plugins/input-rules.js +29 -0
  77. package/dist/esm/pm-plugins/insert-item-plugin.js +16 -0
  78. package/dist/esm/pm-plugins/key.js +2 -0
  79. package/dist/esm/pm-plugins/main.js +104 -0
  80. package/dist/esm/pm-plugins/reducer.js +151 -0
  81. package/dist/esm/pm-plugins/utils.js +12 -0
  82. package/dist/esm/stats-modifier.js +35 -0
  83. package/dist/esm/transforms/close-type-ahead.js +7 -0
  84. package/dist/esm/transforms/open-typeahead-at-cursor.js +69 -0
  85. package/dist/esm/transforms/set-selection-before-query.js +12 -0
  86. package/dist/esm/ui/AssistiveText.js +115 -0
  87. package/dist/esm/ui/InputQuery.js +389 -0
  88. package/dist/esm/ui/TypeAheadList.js +276 -0
  89. package/dist/esm/ui/TypeAheadListItem.js +165 -0
  90. package/dist/esm/ui/TypeAheadPopup.js +220 -0
  91. package/dist/esm/ui/WrapperTypeAhead.js +117 -0
  92. package/dist/esm/ui/hooks/use-item-insert.js +103 -0
  93. package/dist/esm/ui/hooks/use-load-items.js +43 -0
  94. package/dist/esm/ui/hooks/use-on-force-select.js +35 -0
  95. package/dist/esm/utils.js +124 -0
  96. package/dist/types/api.d.ts +60 -0
  97. package/dist/types/commands/insert-type-ahead-item.d.ts +12 -0
  98. package/dist/types/commands/update-list-items.d.ts +3 -0
  99. package/dist/types/commands/update-query.d.ts +2 -0
  100. package/dist/types/commands/update-selected-index.d.ts +2 -0
  101. package/dist/types/index.d.ts +2 -1
  102. package/dist/types/insert-utils.d.ts +18 -0
  103. package/dist/types/messages.d.ts +72 -0
  104. package/dist/types/plugin.d.ts +10 -0
  105. package/dist/types/pm-plugins/actions.d.ts +9 -0
  106. package/dist/types/pm-plugins/decorations.d.ts +14 -0
  107. package/dist/types/pm-plugins/input-rules.d.ts +6 -0
  108. package/dist/types/pm-plugins/insert-item-plugin.d.ts +2 -0
  109. package/dist/types/pm-plugins/key.d.ts +3 -0
  110. package/dist/types/pm-plugins/main.d.ts +14 -0
  111. package/dist/types/pm-plugins/reducer.d.ts +10 -0
  112. package/dist/types/pm-plugins/utils.d.ts +4 -0
  113. package/dist/types/stats-modifier.d.ts +20 -0
  114. package/dist/types/transforms/close-type-ahead.d.ts +2 -0
  115. package/dist/types/transforms/open-typeahead-at-cursor.d.ts +11 -0
  116. package/dist/types/transforms/set-selection-before-query.d.ts +2 -0
  117. package/dist/types/ui/AssistiveText.d.ts +33 -0
  118. package/dist/types/ui/InputQuery.d.ts +26 -0
  119. package/dist/types/ui/TypeAheadList.d.ts +25 -0
  120. package/dist/types/ui/TypeAheadListItem.d.ts +18 -0
  121. package/dist/types/ui/TypeAheadPopup.d.ts +29 -0
  122. package/dist/types/ui/WrapperTypeAhead.d.ts +20 -0
  123. package/dist/types/ui/hooks/use-item-insert.d.ts +3 -0
  124. package/dist/types/ui/hooks/use-load-items.d.ts +3 -0
  125. package/dist/types/ui/hooks/use-on-force-select.d.ts +11 -0
  126. package/dist/types/utils.d.ts +27 -0
  127. package/dist/types-ts4.5/api.d.ts +60 -0
  128. package/dist/types-ts4.5/commands/insert-type-ahead-item.d.ts +12 -0
  129. package/dist/types-ts4.5/commands/update-list-items.d.ts +3 -0
  130. package/dist/types-ts4.5/commands/update-query.d.ts +2 -0
  131. package/dist/types-ts4.5/commands/update-selected-index.d.ts +2 -0
  132. package/dist/types-ts4.5/index.d.ts +2 -1
  133. package/dist/types-ts4.5/insert-utils.d.ts +18 -0
  134. package/dist/types-ts4.5/messages.d.ts +72 -0
  135. package/dist/types-ts4.5/plugin.d.ts +10 -0
  136. package/dist/types-ts4.5/pm-plugins/actions.d.ts +9 -0
  137. package/dist/types-ts4.5/pm-plugins/decorations.d.ts +14 -0
  138. package/dist/types-ts4.5/pm-plugins/input-rules.d.ts +6 -0
  139. package/dist/types-ts4.5/pm-plugins/insert-item-plugin.d.ts +2 -0
  140. package/dist/types-ts4.5/pm-plugins/key.d.ts +3 -0
  141. package/dist/types-ts4.5/pm-plugins/main.d.ts +14 -0
  142. package/dist/types-ts4.5/pm-plugins/reducer.d.ts +10 -0
  143. package/dist/types-ts4.5/pm-plugins/utils.d.ts +4 -0
  144. package/dist/types-ts4.5/stats-modifier.d.ts +20 -0
  145. package/dist/types-ts4.5/transforms/close-type-ahead.d.ts +2 -0
  146. package/dist/types-ts4.5/transforms/open-typeahead-at-cursor.d.ts +11 -0
  147. package/dist/types-ts4.5/transforms/set-selection-before-query.d.ts +2 -0
  148. package/dist/types-ts4.5/ui/AssistiveText.d.ts +33 -0
  149. package/dist/types-ts4.5/ui/InputQuery.d.ts +26 -0
  150. package/dist/types-ts4.5/ui/TypeAheadList.d.ts +25 -0
  151. package/dist/types-ts4.5/ui/TypeAheadListItem.d.ts +18 -0
  152. package/dist/types-ts4.5/ui/TypeAheadPopup.d.ts +29 -0
  153. package/dist/types-ts4.5/ui/WrapperTypeAhead.d.ts +20 -0
  154. package/dist/types-ts4.5/ui/hooks/use-item-insert.d.ts +7 -0
  155. package/dist/types-ts4.5/ui/hooks/use-load-items.d.ts +3 -0
  156. package/dist/types-ts4.5/ui/hooks/use-on-force-select.d.ts +11 -0
  157. package/dist/types-ts4.5/utils.d.ts +27 -0
  158. package/package.json +21 -25
  159. package/report.api.md +29 -1
  160. package/tmp/api-report-tmp.d.ts +26 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,5 @@
1
+ module.exports = {
2
+ rules: {
3
+ '@typescript-eslint/no-duplicate-imports': 'error',
4
+ },
5
+ };
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
@@ -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
@@ -2,4 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
5
+ });
6
+ Object.defineProperty(exports, "typeAheadPlugin", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _plugin.typeAheadPlugin;
10
+ }
11
+ });
12
+ var _plugin = require("./plugin");
@@ -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
+ };