@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,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createPlugin = createPlugin;
|
|
7
|
+
var _steps = require("@atlaskit/adf-schema/steps");
|
|
8
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
9
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
10
|
+
var _view = require("@atlaskit/editor-prosemirror/view");
|
|
11
|
+
var _constants = require("../constants");
|
|
12
|
+
var _actions = require("./actions");
|
|
13
|
+
var _decorations = require("./decorations");
|
|
14
|
+
var _key = require("./key");
|
|
15
|
+
var _reducer = require("./reducer");
|
|
16
|
+
var _utils2 = require("./utils");
|
|
17
|
+
var hasValidTypeAheadStep = function hasValidTypeAheadStep(tr) {
|
|
18
|
+
var steps = tr.steps.filter(function (step) {
|
|
19
|
+
return step instanceof _steps.InsertTypeAheadStep;
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// There are some cases, like collab rebase, where the steps are re-applied
|
|
23
|
+
// We should not re open the type-ahead for those cases
|
|
24
|
+
if (steps.length === 1) {
|
|
25
|
+
return steps[0];
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
};
|
|
29
|
+
function createPlugin(_ref) {
|
|
30
|
+
var reactDispatch = _ref.reactDispatch,
|
|
31
|
+
popupMountRef = _ref.popupMountRef,
|
|
32
|
+
createAnalyticsEvent = _ref.createAnalyticsEvent,
|
|
33
|
+
typeAheadHandlers = _ref.typeAheadHandlers,
|
|
34
|
+
getIntl = _ref.getIntl;
|
|
35
|
+
var intl = getIntl();
|
|
36
|
+
var _factoryDecorations = (0, _decorations.factoryDecorations)({
|
|
37
|
+
intl: intl,
|
|
38
|
+
popupMountRef: popupMountRef,
|
|
39
|
+
createAnalyticsEvent: createAnalyticsEvent
|
|
40
|
+
}),
|
|
41
|
+
createDecorations = _factoryDecorations.createDecorations,
|
|
42
|
+
removeDecorations = _factoryDecorations.removeDecorations;
|
|
43
|
+
var reducer = (0, _reducer.createReducer)({
|
|
44
|
+
createDecorations: createDecorations,
|
|
45
|
+
removeDecorations: removeDecorations,
|
|
46
|
+
typeAheadHandlers: typeAheadHandlers,
|
|
47
|
+
popupMountRef: popupMountRef
|
|
48
|
+
});
|
|
49
|
+
return new _safePlugin.SafePlugin({
|
|
50
|
+
key: _key.pluginKey,
|
|
51
|
+
state: {
|
|
52
|
+
init: function init() {
|
|
53
|
+
return {
|
|
54
|
+
typeAheadHandlers: typeAheadHandlers,
|
|
55
|
+
query: '',
|
|
56
|
+
decorationSet: _view.DecorationSet.empty,
|
|
57
|
+
decorationElement: null,
|
|
58
|
+
items: [],
|
|
59
|
+
selectedIndex: -1,
|
|
60
|
+
stats: null,
|
|
61
|
+
inputMethod: null
|
|
62
|
+
};
|
|
63
|
+
},
|
|
64
|
+
apply: function apply(tr, currentPluginState, oldEditorState, state) {
|
|
65
|
+
var customStep = hasValidTypeAheadStep(tr);
|
|
66
|
+
var nextPluginState = reducer(tr, currentPluginState, customStep);
|
|
67
|
+
if (currentPluginState !== nextPluginState) {
|
|
68
|
+
reactDispatch(_key.pluginKey, nextPluginState);
|
|
69
|
+
}
|
|
70
|
+
return nextPluginState;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
appendTransaction: function appendTransaction(transactions, _oldState, newState) {
|
|
74
|
+
var insertItemCallback = (0, _utils2.isInsertionTransaction)(transactions, _actions.ACTIONS.INSERT_RAW_QUERY);
|
|
75
|
+
if (insertItemCallback) {
|
|
76
|
+
var tr = insertItemCallback(newState);
|
|
77
|
+
if (tr) {
|
|
78
|
+
return tr;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
view: function view() {
|
|
83
|
+
return {
|
|
84
|
+
update: function update(editorView) {}
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
props: {
|
|
88
|
+
decorations: function decorations(state) {
|
|
89
|
+
var _pluginKey$getState;
|
|
90
|
+
return (_pluginKey$getState = _key.pluginKey.getState(state)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.decorationSet;
|
|
91
|
+
},
|
|
92
|
+
handleDOMEvents: {
|
|
93
|
+
compositionend: function compositionend(view, event) {
|
|
94
|
+
return false;
|
|
95
|
+
},
|
|
96
|
+
click: function click(view, event) {
|
|
97
|
+
var target = event.target;
|
|
98
|
+
// ProseMirror view listen to any click event inside of it
|
|
99
|
+
// When this event is coming from the typeahead
|
|
100
|
+
// we should tell to ProseMirror to sit down and relax
|
|
101
|
+
// cuz we know what we are doing (I hope)
|
|
102
|
+
if (target instanceof HTMLElement && (0, _utils.closest)(target, "[data-type-ahead=".concat(_constants.TYPE_AHEAD_DECORATION_DATA_ATTRIBUTE, "]"))) {
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createReducer = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _steps = require("@atlaskit/adf-schema/steps");
|
|
10
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
11
|
+
var _view = require("@atlaskit/editor-prosemirror/view");
|
|
12
|
+
var _utils = require("../utils");
|
|
13
|
+
var _actions = require("./actions");
|
|
14
|
+
var _key = require("./key");
|
|
15
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
17
|
+
var shouldForceOpen = function shouldForceOpen(step) {
|
|
18
|
+
if (!(step instanceof _steps.InsertTypeAheadStep)) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
var isDeletionRawQueryOperation = step.isInsertionStep() && step.stage === _steps.InsertTypeAheadStages.DELETING_RAW_QUERY;
|
|
22
|
+
var isUndoingInsertionItem = step.isUndoingStep() && step.stage === _steps.InsertTypeAheadStages.INSERTING_ITEM;
|
|
23
|
+
return isDeletionRawQueryOperation || isUndoingInsertionItem;
|
|
24
|
+
};
|
|
25
|
+
var shouldForceClose = function shouldForceClose(step) {
|
|
26
|
+
if (!(step instanceof _steps.InsertTypeAheadStep)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
var isInsertingItem = step.isInsertionStep() && step.stage === _steps.InsertTypeAheadStages.INSERTING_ITEM;
|
|
30
|
+
var isUndoingDeletionRawQuery = step.isUndoingStep() && step.stage === _steps.InsertTypeAheadStages.DELETING_RAW_QUERY;
|
|
31
|
+
return isInsertingItem || isUndoingDeletionRawQuery;
|
|
32
|
+
};
|
|
33
|
+
var createFindHandler = function createFindHandler(typeAheadHandlers) {
|
|
34
|
+
return function (step) {
|
|
35
|
+
if (!(step instanceof _steps.InsertTypeAheadStep)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
var handler = typeAheadHandlers.find(function (h) {
|
|
39
|
+
return h.trigger === step.trigger;
|
|
40
|
+
});
|
|
41
|
+
return handler || null;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
var createReducer = exports.createReducer = function createReducer(_ref) {
|
|
45
|
+
var typeAheadHandlers = _ref.typeAheadHandlers,
|
|
46
|
+
removeDecorations = _ref.removeDecorations,
|
|
47
|
+
createDecorations = _ref.createDecorations;
|
|
48
|
+
var findHandler = createFindHandler(typeAheadHandlers);
|
|
49
|
+
var openMenu = function openMenu(currentPluginState, _ref2) {
|
|
50
|
+
var tr = _ref2.tr,
|
|
51
|
+
triggerHandler = _ref2.triggerHandler,
|
|
52
|
+
inputMethod = _ref2.inputMethod,
|
|
53
|
+
reopenQuery = _ref2.reopenQuery,
|
|
54
|
+
selectedIndex = _ref2.selectedIndex;
|
|
55
|
+
removeDecorations(currentPluginState.decorationSet);
|
|
56
|
+
var _createDecorations = createDecorations(tr, {
|
|
57
|
+
triggerHandler: triggerHandler,
|
|
58
|
+
inputMethod: inputMethod,
|
|
59
|
+
reopenQuery: reopenQuery
|
|
60
|
+
}),
|
|
61
|
+
decorationSet = _createDecorations.decorationSet,
|
|
62
|
+
decorationElement = _createDecorations.decorationElement,
|
|
63
|
+
stats = _createDecorations.stats;
|
|
64
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
65
|
+
stats: stats,
|
|
66
|
+
decorationSet: decorationSet,
|
|
67
|
+
triggerHandler: triggerHandler,
|
|
68
|
+
decorationElement: decorationElement,
|
|
69
|
+
inputMethod: inputMethod,
|
|
70
|
+
selectedIndex: typeof selectedIndex === 'number' ? selectedIndex : -1,
|
|
71
|
+
items: [],
|
|
72
|
+
query: reopenQuery || ''
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
var closeMenu = function closeMenu(currentPluginState) {
|
|
76
|
+
removeDecorations(currentPluginState.decorationSet);
|
|
77
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
78
|
+
inputMethod: null,
|
|
79
|
+
query: '',
|
|
80
|
+
decorationElement: null,
|
|
81
|
+
decorationSet: _view.DecorationSet.empty,
|
|
82
|
+
stats: null,
|
|
83
|
+
triggerHandler: undefined,
|
|
84
|
+
items: []
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
return function (tr, currentPluginState, typeAheadStepOverride) {
|
|
88
|
+
var meta = tr.getMeta(_key.pluginKey) || {};
|
|
89
|
+
|
|
90
|
+
// This code below controls when we should force
|
|
91
|
+
// the menu to open or close during undo/redo operations
|
|
92
|
+
var overrideHandler = findHandler(typeAheadStepOverride);
|
|
93
|
+
if (typeAheadStepOverride && overrideHandler && shouldForceOpen(typeAheadStepOverride)) {
|
|
94
|
+
return openMenu(currentPluginState, {
|
|
95
|
+
tr: tr,
|
|
96
|
+
triggerHandler: overrideHandler,
|
|
97
|
+
inputMethod: _analytics.INPUT_METHOD.KEYBOARD,
|
|
98
|
+
reopenQuery: typeAheadStepOverride.query,
|
|
99
|
+
selectedIndex: typeAheadStepOverride.selectedIndex
|
|
100
|
+
});
|
|
101
|
+
} else if (shouldForceClose(typeAheadStepOverride)) {
|
|
102
|
+
return closeMenu(currentPluginState);
|
|
103
|
+
}
|
|
104
|
+
var _ref3 = meta || {},
|
|
105
|
+
action = _ref3.action,
|
|
106
|
+
params = _ref3.params;
|
|
107
|
+
var shouldOpenMenu = action === _actions.ACTIONS.OPEN_TYPEAHEAD_AT_CURSOR && (0, _utils.isTypeAheadHandler)(params === null || params === void 0 ? void 0 : params.triggerHandler);
|
|
108
|
+
var selectionChanged = tr.selectionSet && (tr.isGeneric || Boolean(tr.getMeta('pointer')));
|
|
109
|
+
var shouldCloseMenu = [_actions.ACTIONS.CLOSE_TYPE_AHEAD, _actions.ACTIONS.INSERT_ITEM].includes(action) || selectionChanged;
|
|
110
|
+
var shouldUpdateQuery = action === _actions.ACTIONS.CHANGE_QUERY;
|
|
111
|
+
var shouldUpdateListItems = action === _actions.ACTIONS.UPDATE_LIST_ITEMS;
|
|
112
|
+
var shouldUpdateSelectedIndex = action === _actions.ACTIONS.UPDATE_SELECTED_INDEX;
|
|
113
|
+
if (shouldOpenMenu) {
|
|
114
|
+
return openMenu(currentPluginState, {
|
|
115
|
+
tr: tr,
|
|
116
|
+
triggerHandler: params.triggerHandler,
|
|
117
|
+
inputMethod: params.inputMethod
|
|
118
|
+
});
|
|
119
|
+
} else if (shouldCloseMenu) {
|
|
120
|
+
return closeMenu(currentPluginState);
|
|
121
|
+
} else if (shouldUpdateQuery) {
|
|
122
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
123
|
+
query: params.query
|
|
124
|
+
});
|
|
125
|
+
} else if (shouldUpdateListItems) {
|
|
126
|
+
var items = params.items;
|
|
127
|
+
var selectedIndex = currentPluginState.selectedIndex;
|
|
128
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
129
|
+
items: items,
|
|
130
|
+
selectedIndex: Math.max(selectedIndex >= items.length ? items.length - 1 : selectedIndex, -1)
|
|
131
|
+
});
|
|
132
|
+
} else if (shouldUpdateSelectedIndex) {
|
|
133
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
134
|
+
selectedIndex: params.selectedIndex
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
if (tr.docChanged) {
|
|
138
|
+
var decorationSet = currentPluginState.decorationSet;
|
|
139
|
+
var onRemove = function onRemove() {
|
|
140
|
+
// Make sure we are unmounting the component
|
|
141
|
+
// from the react tree when this decoration is removed
|
|
142
|
+
removeDecorations(currentPluginState.decorationSet);
|
|
143
|
+
};
|
|
144
|
+
var mappedDecorationSet = decorationSet.map(tr.mapping, tr.doc, {
|
|
145
|
+
onRemove: onRemove
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// return same pluginState if decorationSet did not change
|
|
149
|
+
if (mappedDecorationSet === currentPluginState.decorationSet) {
|
|
150
|
+
return currentPluginState;
|
|
151
|
+
}
|
|
152
|
+
return _objectSpread(_objectSpread({}, currentPluginState), {}, {
|
|
153
|
+
decorationSet: mappedDecorationSet
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return currentPluginState;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isInsertionTransaction = void 0;
|
|
7
|
+
var _key = require("./key");
|
|
8
|
+
var isInsertionTransaction = exports.isInsertionTransaction = function isInsertionTransaction(transactions, action) {
|
|
9
|
+
var _tr$getMeta2;
|
|
10
|
+
var tr = transactions.find(function (tr) {
|
|
11
|
+
var _tr$getMeta;
|
|
12
|
+
return ((_tr$getMeta = tr.getMeta(_key.pluginKey)) === null || _tr$getMeta === void 0 ? void 0 : _tr$getMeta.action) === action;
|
|
13
|
+
});
|
|
14
|
+
if (!tr) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return (_tr$getMeta2 = tr.getMeta(_key.pluginKey)) === null || _tr$getMeta2 === void 0 ? void 0 : _tr$getMeta2.params;
|
|
18
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.StatsModifier = void 0;
|
|
8
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var StatsModifier = exports.StatsModifier = /*#__PURE__*/(0, _createClass2.default)(function StatsModifier() {
|
|
12
|
+
var _this = this;
|
|
13
|
+
(0, _classCallCheck2.default)(this, StatsModifier);
|
|
14
|
+
(0, _defineProperty2.default)(this, "startedAt", 0);
|
|
15
|
+
(0, _defineProperty2.default)(this, "endedAt", 0);
|
|
16
|
+
(0, _defineProperty2.default)(this, "keyCount", {
|
|
17
|
+
arrowUp: 0,
|
|
18
|
+
arrowDown: 0
|
|
19
|
+
});
|
|
20
|
+
(0, _defineProperty2.default)(this, "increaseArrowUp", function () {
|
|
21
|
+
_this.keyCount.arrowUp += 1;
|
|
22
|
+
});
|
|
23
|
+
(0, _defineProperty2.default)(this, "increaseArrowDown", function () {
|
|
24
|
+
_this.keyCount.arrowDown += 1;
|
|
25
|
+
});
|
|
26
|
+
(0, _defineProperty2.default)(this, "serialize", function () {
|
|
27
|
+
var _this$keyCount, _this$keyCount2;
|
|
28
|
+
return {
|
|
29
|
+
startedAt: _this.startedAt,
|
|
30
|
+
endedAt: performance.now(),
|
|
31
|
+
keyCount: {
|
|
32
|
+
arrowUp: ((_this$keyCount = _this.keyCount) === null || _this$keyCount === void 0 ? void 0 : _this$keyCount.arrowUp) || 0,
|
|
33
|
+
arrowDown: ((_this$keyCount2 = _this.keyCount) === null || _this$keyCount2 === void 0 ? void 0 : _this$keyCount2.arrowDown) || 0
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
this.startedAt = performance.now();
|
|
38
|
+
this.keyCount = {
|
|
39
|
+
arrowUp: 0,
|
|
40
|
+
arrowDown: 0
|
|
41
|
+
};
|
|
42
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.closeTypeAhead = void 0;
|
|
7
|
+
var _actions = require("../pm-plugins/actions");
|
|
8
|
+
var _key = require("../pm-plugins/key");
|
|
9
|
+
var closeTypeAhead = exports.closeTypeAhead = function closeTypeAhead(tr) {
|
|
10
|
+
return tr.setMeta(_key.pluginKey, {
|
|
11
|
+
action: _actions.ACTIONS.CLOSE_TYPE_AHEAD
|
|
12
|
+
});
|
|
13
|
+
};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.openTypeAheadAtCursor = exports.openTypeAhead = void 0;
|
|
7
|
+
var _selection = require("@atlaskit/editor-common/selection");
|
|
8
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
9
|
+
var _actions = require("../pm-plugins/actions");
|
|
10
|
+
var _key = require("../pm-plugins/key");
|
|
11
|
+
var openTypeAhead = exports.openTypeAhead = function openTypeAhead(props) {
|
|
12
|
+
return function (tr) {
|
|
13
|
+
var triggerHandler = props.triggerHandler,
|
|
14
|
+
inputMethod = props.inputMethod,
|
|
15
|
+
query = props.query;
|
|
16
|
+
tr.setMeta(_key.pluginKey, {
|
|
17
|
+
action: _actions.ACTIONS.OPEN_TYPEAHEAD_AT_CURSOR,
|
|
18
|
+
params: {
|
|
19
|
+
triggerHandler: triggerHandler,
|
|
20
|
+
inputMethod: inputMethod,
|
|
21
|
+
query: query
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
var openTypeAheadAtCursor = exports.openTypeAheadAtCursor = function openTypeAheadAtCursor(_ref) {
|
|
27
|
+
var triggerHandler = _ref.triggerHandler,
|
|
28
|
+
inputMethod = _ref.inputMethod,
|
|
29
|
+
query = _ref.query;
|
|
30
|
+
return function (_ref2) {
|
|
31
|
+
var tr = _ref2.tr;
|
|
32
|
+
openTypeAhead({
|
|
33
|
+
triggerHandler: triggerHandler,
|
|
34
|
+
inputMethod: inputMethod,
|
|
35
|
+
query: query
|
|
36
|
+
})(tr);
|
|
37
|
+
var selection = tr.selection;
|
|
38
|
+
if (!(selection instanceof _state.TextSelection || selection instanceof _selection.GapCursorSelection)) {
|
|
39
|
+
return tr;
|
|
40
|
+
}
|
|
41
|
+
if (selection instanceof _selection.GapCursorSelection) {
|
|
42
|
+
// Create space for the typeahead menu in gap cursor
|
|
43
|
+
tr.insertText(' ');
|
|
44
|
+
// delete 1 pos before wherever selection is now - that will delete the empty space
|
|
45
|
+
tr.delete(tr.selection.from - 1, tr.selection.from);
|
|
46
|
+
} else {
|
|
47
|
+
var _selection$$head, _selection$$head$pare, _selection$$head$pare2;
|
|
48
|
+
if (!selection.$cursor) {
|
|
49
|
+
tr.deleteSelection();
|
|
50
|
+
return tr;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Search & Destroy placeholder
|
|
54
|
+
var cursorPos = selection.$cursor.pos;
|
|
55
|
+
var nodeAtCursor = tr.doc.nodeAt(cursorPos);
|
|
56
|
+
var isPlaceholderAtCursorPosition = nodeAtCursor && nodeAtCursor.type.name === 'placeholder';
|
|
57
|
+
if (nodeAtCursor && isPlaceholderAtCursorPosition) {
|
|
58
|
+
tr.delete(cursorPos, cursorPos + nodeAtCursor.nodeSize);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// ME-2375 remove the superfluous '@' inserted before decoration
|
|
62
|
+
// by composition (https://github.com/ProseMirror/prosemirror/issues/903)
|
|
63
|
+
//
|
|
64
|
+
// Update:
|
|
65
|
+
// Now also handles any use case with superfluous typeahead triggers (ie. '@', ':', '/')
|
|
66
|
+
// being inserted due to composition by checking if we have the trigger
|
|
67
|
+
// directly before the typeahead. This should not happen unless it has
|
|
68
|
+
// been eroneously added because we require whitespace/newline for typeahead.
|
|
69
|
+
if (cursorPos >= 2 && !!(selection !== null && selection !== void 0 && (_selection$$head = selection.$head) !== null && _selection$$head !== void 0 && (_selection$$head = _selection$$head.parent) !== null && _selection$$head !== void 0 && _selection$$head.textContent) && (_selection$$head$pare = (_selection$$head$pare2 = selection.$head.parent.textContent).endsWith) !== null && _selection$$head$pare !== void 0 && _selection$$head$pare.call(_selection$$head$pare2, triggerHandler.trigger)) {
|
|
70
|
+
tr.delete(cursorPos - 1, cursorPos);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return tr;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.setSelectionBeforeQuery = void 0;
|
|
7
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
8
|
+
var setSelectionBeforeQuery = exports.setSelectionBeforeQuery = function setSelectionBeforeQuery(rawText) {
|
|
9
|
+
return function (tr) {
|
|
10
|
+
var currentPosition = tr.selection.$from.pos;
|
|
11
|
+
var positionBeforeRawText = Math.max(currentPosition - rawText.length, 0);
|
|
12
|
+
var resolvedPositionBeforeText = tr.doc.resolve(positionBeforeRawText);
|
|
13
|
+
var nextSelection = _state.TextSelection.findFrom(resolvedPositionBeforeText, -1, true);
|
|
14
|
+
if (nextSelection) {
|
|
15
|
+
tr.setSelection(nextSelection);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AssistiveText = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
var _react = _interopRequireDefault(require("react"));
|
|
16
|
+
var _react2 = require("@emotion/react");
|
|
17
|
+
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
18
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
19
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** @jsx jsx */
|
|
20
|
+
var statusDebounceMillis = 1400;
|
|
21
|
+
var assitiveTextStyles = (0, _react2.css)({
|
|
22
|
+
border: 0,
|
|
23
|
+
clip: 'rect(0 0 0 0)',
|
|
24
|
+
height: '1px',
|
|
25
|
+
marginbottom: '-1px',
|
|
26
|
+
marginright: '-1px',
|
|
27
|
+
overflow: 'hidden',
|
|
28
|
+
padding: 0,
|
|
29
|
+
position: 'absolute',
|
|
30
|
+
whitespace: 'nowrap',
|
|
31
|
+
width: '1px'
|
|
32
|
+
});
|
|
33
|
+
var AssistveTextComponent = /*#__PURE__*/function (_React$Component) {
|
|
34
|
+
(0, _inherits2.default)(AssistveTextComponent, _React$Component);
|
|
35
|
+
var _super = _createSuper(AssistveTextComponent);
|
|
36
|
+
function AssistveTextComponent() {
|
|
37
|
+
var _this;
|
|
38
|
+
(0, _classCallCheck2.default)(this, AssistveTextComponent);
|
|
39
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
40
|
+
args[_key] = arguments[_key];
|
|
41
|
+
}
|
|
42
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
43
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
|
|
44
|
+
bump: false,
|
|
45
|
+
//when the same text needs to be read again, Hence it needs to be toggled between __status--A and __status--B
|
|
46
|
+
debounced: false,
|
|
47
|
+
silenced: false
|
|
48
|
+
});
|
|
49
|
+
return _this;
|
|
50
|
+
}
|
|
51
|
+
(0, _createClass2.default)(AssistveTextComponent, [{
|
|
52
|
+
key: "componentWillMount",
|
|
53
|
+
value: function componentWillMount() {
|
|
54
|
+
var _this2 = this;
|
|
55
|
+
this.debounceStatusUpdate = (0, _debounce.default)(function () {
|
|
56
|
+
if (!_this2.state.debounced) {
|
|
57
|
+
var shouldSilence = !_this2.props.isInFocus;
|
|
58
|
+
_this2.setState(function (_ref) {
|
|
59
|
+
var bump = _ref.bump;
|
|
60
|
+
return {
|
|
61
|
+
bump: !bump,
|
|
62
|
+
debounced: true,
|
|
63
|
+
silenced: shouldSilence
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}, statusDebounceMillis);
|
|
68
|
+
}
|
|
69
|
+
}, {
|
|
70
|
+
key: "componentWillUnmount",
|
|
71
|
+
value: function componentWillUnmount() {
|
|
72
|
+
this.debounceStatusUpdate.cancel();
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "componentWillReceiveProps",
|
|
76
|
+
value: function componentWillReceiveProps() {
|
|
77
|
+
this.setState(function (_ref2) {
|
|
78
|
+
var bump = _ref2.bump;
|
|
79
|
+
return {
|
|
80
|
+
bump: !bump,
|
|
81
|
+
debounced: false
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}, {
|
|
86
|
+
key: "render",
|
|
87
|
+
value: function render() {
|
|
88
|
+
var _this$props = this.props,
|
|
89
|
+
assistiveText = _this$props.assistiveText,
|
|
90
|
+
id = _this$props.id;
|
|
91
|
+
var _this$state = this.state,
|
|
92
|
+
bump = _this$state.bump,
|
|
93
|
+
debounced = _this$state.debounced,
|
|
94
|
+
silenced = _this$state.silenced;
|
|
95
|
+
this.debounceStatusUpdate();
|
|
96
|
+
return (0, _react2.jsx)("div", {
|
|
97
|
+
css: assitiveTextStyles
|
|
98
|
+
}, (0, _react2.jsx)("div", {
|
|
99
|
+
id: id + '__status--A',
|
|
100
|
+
role: "status",
|
|
101
|
+
"aria-atomic": "true",
|
|
102
|
+
"aria-live": "polite"
|
|
103
|
+
}, "".concat(!silenced && debounced && bump ? assistiveText : '')), (0, _react2.jsx)("div", {
|
|
104
|
+
id: id + '__status--B',
|
|
105
|
+
role: "status",
|
|
106
|
+
"aria-atomic": "true",
|
|
107
|
+
"aria-live": "polite"
|
|
108
|
+
}, "".concat(!silenced && debounced && !bump ? assistiveText : '')));
|
|
109
|
+
}
|
|
110
|
+
}]);
|
|
111
|
+
return AssistveTextComponent;
|
|
112
|
+
}(_react.default.Component);
|
|
113
|
+
(0, _defineProperty2.default)(AssistveTextComponent, "defaultProps", {
|
|
114
|
+
statusDebounceMillis: 1400,
|
|
115
|
+
debounce: true,
|
|
116
|
+
assistiveText: '',
|
|
117
|
+
isInFocus: false,
|
|
118
|
+
id: ''
|
|
119
|
+
});
|
|
120
|
+
var AssistiveText = exports.AssistiveText = AssistveTextComponent;
|