@atlaskit/editor-plugin-mentions 0.1.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.
Files changed (82) hide show
  1. package/.eslintrc.js +7 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE.md +13 -0
  4. package/README.md +9 -0
  5. package/dist/cjs/analytics.js +157 -0
  6. package/dist/cjs/index.js +12 -0
  7. package/dist/cjs/messages.js +29 -0
  8. package/dist/cjs/nodeviews/mention.js +117 -0
  9. package/dist/cjs/plugin.js +135 -0
  10. package/dist/cjs/pm-plugins/key.js +8 -0
  11. package/dist/cjs/pm-plugins/main.js +156 -0
  12. package/dist/cjs/pm-plugins/utils.js +23 -0
  13. package/dist/cjs/type-ahead/index.js +362 -0
  14. package/dist/cjs/types.js +5 -0
  15. package/dist/cjs/ui/InviteItem/index.js +76 -0
  16. package/dist/cjs/ui/InviteItem/styles.js +19 -0
  17. package/dist/cjs/ui/Mention/index.js +98 -0
  18. package/dist/cjs/ui/ToolbarMention/index.js +63 -0
  19. package/dist/cjs/utils.js +32 -0
  20. package/dist/es2019/analytics.js +147 -0
  21. package/dist/es2019/index.js +1 -0
  22. package/dist/es2019/messages.js +23 -0
  23. package/dist/es2019/nodeviews/mention.js +80 -0
  24. package/dist/es2019/plugin.js +123 -0
  25. package/dist/es2019/pm-plugins/key.js +2 -0
  26. package/dist/es2019/pm-plugins/main.js +143 -0
  27. package/dist/es2019/pm-plugins/utils.js +14 -0
  28. package/dist/es2019/type-ahead/index.js +338 -0
  29. package/dist/es2019/types.js +1 -0
  30. package/dist/es2019/ui/InviteItem/index.js +67 -0
  31. package/dist/es2019/ui/InviteItem/styles.js +47 -0
  32. package/dist/es2019/ui/Mention/index.js +70 -0
  33. package/dist/es2019/ui/ToolbarMention/index.js +33 -0
  34. package/dist/es2019/utils.js +20 -0
  35. package/dist/esm/analytics.js +150 -0
  36. package/dist/esm/index.js +1 -0
  37. package/dist/esm/messages.js +23 -0
  38. package/dist/esm/nodeviews/mention.js +107 -0
  39. package/dist/esm/plugin.js +129 -0
  40. package/dist/esm/pm-plugins/key.js +2 -0
  41. package/dist/esm/pm-plugins/main.js +148 -0
  42. package/dist/esm/pm-plugins/utils.js +16 -0
  43. package/dist/esm/type-ahead/index.js +350 -0
  44. package/dist/esm/types.js +1 -0
  45. package/dist/esm/ui/InviteItem/index.js +66 -0
  46. package/dist/esm/ui/InviteItem/styles.js +12 -0
  47. package/dist/esm/ui/Mention/index.js +90 -0
  48. package/dist/esm/ui/ToolbarMention/index.js +53 -0
  49. package/dist/esm/utils.js +26 -0
  50. package/dist/types/analytics.d.ts +13 -0
  51. package/dist/types/index.d.ts +2 -0
  52. package/dist/types/messages.d.ts +22 -0
  53. package/dist/types/nodeviews/mention.d.ts +9 -0
  54. package/dist/types/plugin.d.ts +3 -0
  55. package/dist/types/pm-plugins/key.d.ts +3 -0
  56. package/dist/types/pm-plugins/main.d.ts +6 -0
  57. package/dist/types/pm-plugins/utils.d.ts +4 -0
  58. package/dist/types/type-ahead/index.d.ts +17 -0
  59. package/dist/types/types.d.ts +38 -0
  60. package/dist/types/ui/InviteItem/index.d.ts +24 -0
  61. package/dist/types/ui/InviteItem/styles.d.ts +8 -0
  62. package/dist/types/ui/Mention/index.d.ts +19 -0
  63. package/dist/types/ui/ToolbarMention/index.d.ts +13 -0
  64. package/dist/types/utils.d.ts +8 -0
  65. package/dist/types-ts4.5/analytics.d.ts +13 -0
  66. package/dist/types-ts4.5/index.d.ts +2 -0
  67. package/dist/types-ts4.5/messages.d.ts +22 -0
  68. package/dist/types-ts4.5/nodeviews/mention.d.ts +9 -0
  69. package/dist/types-ts4.5/plugin.d.ts +3 -0
  70. package/dist/types-ts4.5/pm-plugins/key.d.ts +3 -0
  71. package/dist/types-ts4.5/pm-plugins/main.d.ts +6 -0
  72. package/dist/types-ts4.5/pm-plugins/utils.d.ts +4 -0
  73. package/dist/types-ts4.5/type-ahead/index.d.ts +17 -0
  74. package/dist/types-ts4.5/types.d.ts +41 -0
  75. package/dist/types-ts4.5/ui/InviteItem/index.d.ts +24 -0
  76. package/dist/types-ts4.5/ui/InviteItem/styles.d.ts +8 -0
  77. package/dist/types-ts4.5/ui/Mention/index.d.ts +19 -0
  78. package/dist/types-ts4.5/ui/ToolbarMention/index.d.ts +13 -0
  79. package/dist/types-ts4.5/utils.d.ts +8 -0
  80. package/package.json +112 -0
  81. package/report.api.md +92 -0
  82. package/tmp/api-report-tmp.d.ts +63 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,7 @@
1
+ module.exports = {
2
+ rules: {
3
+ '@atlaskit/design-system/consistent-css-prop-usage': 'warn',
4
+ '@repo/internal/react/no-class-components': 'warn',
5
+ '@atlaskit/design-system/consistent-css-prop-usage': 'warn',
6
+ },
7
+ };
package/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ # @atlaskit/editor-plugin-mentions
package/LICENSE.md ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Atlassian Pty Ltd
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ # EditorPluginMentions
2
+
3
+ Mentions plugin for @atlaskit/editor-core
4
+
5
+ ## Usage
6
+
7
+ `import EditorPluginMentions from '@atlaskit/editor-plugin-mentions';`
8
+
9
+ Detailed docs and example usage can be found [here](https://atlaskit.atlassian.com/packages/editor/editor-plugin-mentions).
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.buildTypeAheadRenderedPayload = exports.buildTypeAheadInviteItemViewedPayload = exports.buildTypeAheadInviteItemClickedPayload = exports.buildTypeAheadInviteExposurePayload = exports.buildTypeAheadInsertedPayload = exports.buildTypeAheadCancelPayload = exports.buildAnalyticsPayload = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _analyticsGasTypes = require("@atlaskit/analytics-gas-types");
10
+ var _resource = require("@atlaskit/mention/resource");
11
+ var _utils = require("./utils");
12
+ 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; }
13
+ 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; }
14
+ var componentName = 'mention';
15
+ var buildAnalyticsPayload = exports.buildAnalyticsPayload = function buildAnalyticsPayload(actionSubject, action, eventType, sessionId) {
16
+ var otherAttributes = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
17
+ var tags = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
18
+ return {
19
+ action: action,
20
+ actionSubject: actionSubject,
21
+ eventType: eventType,
22
+ attributes: _objectSpread({
23
+ componentName: componentName,
24
+ sessionId: sessionId
25
+ }, otherAttributes),
26
+ tags: tags
27
+ };
28
+ };
29
+ var emptyQueryResponse = {
30
+ queryLength: 0,
31
+ spaceInQuery: false
32
+ };
33
+ var extractAttributesFromQuery = function extractAttributesFromQuery(query) {
34
+ if (query) {
35
+ return {
36
+ queryLength: query.length,
37
+ spaceInQuery: query.indexOf(' ') !== -1
38
+ };
39
+ }
40
+ return emptyQueryResponse;
41
+ };
42
+ var buildTypeAheadCancelPayload = exports.buildTypeAheadCancelPayload = function buildTypeAheadCancelPayload(duration, upKeyCount, downKeyCount, sessionId, query) {
43
+ var _extractAttributesFro = extractAttributesFromQuery(query),
44
+ queryLength = _extractAttributesFro.queryLength,
45
+ spaceInQuery = _extractAttributesFro.spaceInQuery;
46
+ return buildAnalyticsPayload('mentionTypeahead', 'cancelled', _analyticsGasTypes.UI_EVENT_TYPE, sessionId, {
47
+ duration: duration,
48
+ downKeyCount: downKeyCount,
49
+ upKeyCount: upKeyCount,
50
+ queryLength: queryLength,
51
+ spaceInQuery: spaceInQuery
52
+ });
53
+ };
54
+ var getPosition = function getPosition(mentionList, selectedMention) {
55
+ if (mentionList) {
56
+ var index = mentionList.findIndex(function (mention) {
57
+ return mention.id === selectedMention.id;
58
+ });
59
+ return index === -1 ? undefined : index;
60
+ }
61
+ return;
62
+ };
63
+ var isClicked = function isClicked(insertType) {
64
+ return insertType === 'selected';
65
+ };
66
+ var buildTypeAheadInviteItemViewedPayload = exports.buildTypeAheadInviteItemViewedPayload = function buildTypeAheadInviteItemViewedPayload(sessionId, contextIdentifierProvider, userRole) {
67
+ var _ref = contextIdentifierProvider || {},
68
+ containerId = _ref.containerId,
69
+ objectId = _ref.objectId,
70
+ childObjectId = _ref.childObjectId;
71
+ return buildAnalyticsPayload('inviteItem', 'rendered', _analyticsGasTypes.UI_EVENT_TYPE, sessionId, {
72
+ containerId: containerId,
73
+ objectId: objectId,
74
+ childObjectId: childObjectId,
75
+ userRole: userRole
76
+ });
77
+ };
78
+ var buildTypeAheadInviteExposurePayload = exports.buildTypeAheadInviteExposurePayload = function buildTypeAheadInviteExposurePayload(sessionId, contextIdentifierProvider, inviteExperimentCohort, userRole) {
79
+ var _ref2 = contextIdentifierProvider || {},
80
+ containerId = _ref2.containerId,
81
+ objectId = _ref2.objectId,
82
+ childObjectId = _ref2.childObjectId;
83
+ return buildAnalyticsPayload('feature', 'exposed', _analyticsGasTypes.OPERATIONAL_EVENT_TYPE, sessionId, {
84
+ flagKey: 'confluence.frontend.invite.from.mention',
85
+ value: inviteExperimentCohort || 'not-enrolled',
86
+ containerId: containerId,
87
+ objectId: objectId,
88
+ childObjectId: childObjectId,
89
+ userRole: userRole
90
+ }, ['measurement', 'hasCustomAttributes']);
91
+ };
92
+ var buildTypeAheadInviteItemClickedPayload = exports.buildTypeAheadInviteItemClickedPayload = function buildTypeAheadInviteItemClickedPayload(duration, upKeyCount, downKeyCount, sessionId, insertType, query, contextIdentifierProvider, userRole) {
93
+ var _extractAttributesFro2 = extractAttributesFromQuery(query),
94
+ queryLength = _extractAttributesFro2.queryLength,
95
+ spaceInQuery = _extractAttributesFro2.spaceInQuery;
96
+ var _ref3 = contextIdentifierProvider || {},
97
+ containerId = _ref3.containerId,
98
+ objectId = _ref3.objectId,
99
+ childObjectId = _ref3.childObjectId;
100
+ return buildAnalyticsPayload('inviteItem', isClicked(insertType) ? 'clicked' : 'pressed', _analyticsGasTypes.UI_EVENT_TYPE, sessionId, {
101
+ duration: duration,
102
+ queryLength: queryLength,
103
+ spaceInQuery: spaceInQuery,
104
+ upKeyCount: upKeyCount,
105
+ downKeyCount: downKeyCount,
106
+ containerId: containerId,
107
+ objectId: objectId,
108
+ childObjectId: childObjectId,
109
+ userRole: userRole
110
+ });
111
+ };
112
+ var buildTypeAheadInsertedPayload = exports.buildTypeAheadInsertedPayload = function buildTypeAheadInsertedPayload(duration, upKeyCount, downKeyCount, sessionId, insertType, mention, mentionList, query, contextIdentifierProvider) {
113
+ var _extractAttributesFro3 = extractAttributesFromQuery(query),
114
+ queryLength = _extractAttributesFro3.queryLength,
115
+ spaceInQuery = _extractAttributesFro3.spaceInQuery;
116
+ var analyticsPayload = buildAnalyticsPayload('mentionTypeahead', isClicked(insertType) ? 'clicked' : 'pressed', _analyticsGasTypes.UI_EVENT_TYPE, sessionId, {
117
+ duration: duration,
118
+ position: getPosition(mentionList, mention),
119
+ keyboardKey: isClicked(insertType) ? undefined : insertType,
120
+ source: mention.source,
121
+ queryLength: queryLength,
122
+ spaceInQuery: spaceInQuery,
123
+ isSpecial: (0, _resource.isSpecialMention)(mention),
124
+ accessLevel: mention.accessLevel || '',
125
+ userType: mention.userType,
126
+ userId: mention.id,
127
+ upKeyCount: upKeyCount,
128
+ downKeyCount: downKeyCount,
129
+ memberCount: (0, _utils.isTeamType)(mention.userType) && mention.context ? mention.context.memberCount : null,
130
+ includesYou: (0, _utils.isTeamType)(mention.userType) && mention.context ? mention.context.includesYou : null
131
+ });
132
+ if (contextIdentifierProvider) {
133
+ analyticsPayload.containerId = contextIdentifierProvider.containerId || undefined;
134
+ analyticsPayload.objectId = contextIdentifierProvider.objectId || undefined;
135
+ analyticsPayload.childObjectId = contextIdentifierProvider.childObjectId || undefined;
136
+ }
137
+ return analyticsPayload;
138
+ };
139
+ var buildTypeAheadRenderedPayload = exports.buildTypeAheadRenderedPayload = function buildTypeAheadRenderedPayload(duration, userIds, query, teams) {
140
+ var _extractAttributesFro4 = extractAttributesFromQuery(query),
141
+ queryLength = _extractAttributesFro4.queryLength,
142
+ spaceInQuery = _extractAttributesFro4.spaceInQuery;
143
+ var actionSubject = userIds ? 'mentionTypeahead' : 'teamMentionTypeahead';
144
+ return {
145
+ action: 'rendered',
146
+ actionSubject: actionSubject,
147
+ eventType: _analyticsGasTypes.OPERATIONAL_EVENT_TYPE,
148
+ attributes: {
149
+ componentName: componentName,
150
+ duration: duration,
151
+ userIds: userIds,
152
+ teams: teams,
153
+ queryLength: queryLength,
154
+ spaceInQuery: spaceInQuery
155
+ }
156
+ };
157
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "mentionsPlugin", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _plugin.mentionsPlugin;
10
+ }
11
+ });
12
+ var _plugin = require("./plugin");
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.messages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
9
+ inviteItemTitle: {
10
+ id: 'fabric.editor.inviteItem.title',
11
+ defaultMessage: '{userRole, select, admin {Invite} trusted {Invite} other {Add}} teammate to {productName}',
12
+ description: 'Title of the invite teammate item in typeahead plugin'
13
+ },
14
+ mentionsAddLabel: {
15
+ id: 'fabric.editor.mentionsAddLabel',
16
+ defaultMessage: 'add-icon',
17
+ description: 'icon label to describe adding a new mention'
18
+ },
19
+ mentionsIconLabel: {
20
+ id: 'fabric.editor.mentionsIconLabel',
21
+ defaultMessage: 'Mention',
22
+ description: 'icon label to describe the mention icon'
23
+ },
24
+ mentionsNodeLabel: {
25
+ id: 'fabric.editor.mentionNode.label',
26
+ defaultMessage: 'Tagged user',
27
+ description: 'Label to indicate mention node to Screen reader users, that preceeds with user name ex: "Tagged user @XXX'
28
+ }
29
+ });
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.MentionNodeView = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _reactIntlNext = require("react-intl-next");
14
+ var _providerFactory = require("@atlaskit/editor-common/provider-factory");
15
+ var _mention = require("@atlaskit/mention");
16
+ var _types = require("@atlaskit/mention/types");
17
+ var _messages = require("../messages");
18
+ var _Mention = _interopRequireDefault(require("../ui/Mention"));
19
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+ var UNKNOWN_USER_ID = '_|unknown|_';
22
+ var MentionAssistiveTextComponent = function MentionAssistiveTextComponent(_ref) {
23
+ var id = _ref.id,
24
+ text = _ref.text,
25
+ providers = _ref.providers,
26
+ accessLevel = _ref.accessLevel,
27
+ mentionProvider = _ref.mentionProvider;
28
+ var _useState = (0, _react.useState)(text),
29
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
30
+ resolvedName = _useState2[0],
31
+ setResolvedName = _useState2[1];
32
+ var intl = (0, _reactIntlNext.useIntl)();
33
+ var processName = function processName(name) {
34
+ if (name.status === _mention.MentionNameStatus.OK) {
35
+ return "@".concat(name.name || '');
36
+ } else {
37
+ return "@".concat(UNKNOWN_USER_ID);
38
+ }
39
+ };
40
+ (0, _react.useEffect)(function () {
41
+ if (mentionProvider) {
42
+ mentionProvider.then( /*#__PURE__*/function () {
43
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(provider) {
44
+ var nameDetail;
45
+ return _regenerator.default.wrap(function _callee$(_context) {
46
+ while (1) switch (_context.prev = _context.next) {
47
+ case 0:
48
+ if (!(!text && (0, _mention.isResolvingMentionProvider)(provider))) {
49
+ _context.next = 13;
50
+ break;
51
+ }
52
+ nameDetail = provider.resolveMentionName(id);
53
+ if (!(0, _types.isPromise)(nameDetail)) {
54
+ _context.next = 10;
55
+ break;
56
+ }
57
+ _context.t0 = processName;
58
+ _context.next = 6;
59
+ return nameDetail;
60
+ case 6:
61
+ _context.t1 = _context.sent;
62
+ return _context.abrupt("return", (0, _context.t0)(_context.t1));
63
+ case 10:
64
+ return _context.abrupt("return", processName(nameDetail));
65
+ case 11:
66
+ _context.next = 14;
67
+ break;
68
+ case 13:
69
+ return _context.abrupt("return", text);
70
+ case 14:
71
+ case "end":
72
+ return _context.stop();
73
+ }
74
+ }, _callee);
75
+ }));
76
+ return function (_x) {
77
+ return _ref2.apply(this, arguments);
78
+ };
79
+ }()).then(function (resolvedName) {
80
+ setResolvedName(resolvedName);
81
+ });
82
+ }
83
+ }, [id, text, mentionProvider]);
84
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
85
+ className: 'assistive'
86
+ }, "".concat(intl.formatMessage(_messages.messages.mentionsNodeLabel), " ").concat(resolvedName)), /*#__PURE__*/_react.default.createElement("span", {
87
+ "aria-hidden": "true"
88
+ }, /*#__PURE__*/_react.default.createElement(_Mention.default, {
89
+ id: id,
90
+ text: resolvedName,
91
+ accessLevel: accessLevel,
92
+ providers: providers
93
+ })));
94
+ };
95
+ var MentionNodeView = exports.MentionNodeView = function MentionNodeView(props) {
96
+ var providerFactory = props.providerFactory;
97
+ var _props$node$attrs = props.node.attrs,
98
+ id = _props$node$attrs.id,
99
+ text = _props$node$attrs.text,
100
+ accessLevel = _props$node$attrs.accessLevel;
101
+ var renderAssistiveTextWithProviders = function renderAssistiveTextWithProviders(providers) {
102
+ var _ref3 = providers,
103
+ mentionProvider = _ref3.mentionProvider;
104
+ return /*#__PURE__*/_react.default.createElement(MentionAssistiveTextComponent, {
105
+ mentionProvider: mentionProvider,
106
+ id: id,
107
+ text: text,
108
+ providers: providerFactory,
109
+ accessLevel: accessLevel
110
+ });
111
+ };
112
+ return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
113
+ providers: ['mentionProvider', 'profilecardProvider'],
114
+ providerFactory: providerFactory,
115
+ renderNode: renderAssistiveTextWithProviders
116
+ });
117
+ };
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.mentionsPlugin = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _uuid = _interopRequireDefault(require("uuid"));
11
+ var _adfSchema = require("@atlaskit/adf-schema");
12
+ var _analytics = require("@atlaskit/editor-common/analytics");
13
+ var _messages = require("@atlaskit/editor-common/messages");
14
+ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
15
+ var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
16
+ var _resource = require("@atlaskit/mention/resource");
17
+ var _key = require("./pm-plugins/key");
18
+ var _main = require("./pm-plugins/main");
19
+ var _typeAhead = require("./type-ahead");
20
+ var _ToolbarMention = _interopRequireDefault(require("./ui/ToolbarMention"));
21
+ 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; }
22
+ 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; }
23
+ var mentionsPlugin = exports.mentionsPlugin = function mentionsPlugin(_ref) {
24
+ var options = _ref.config,
25
+ api = _ref.api;
26
+ var sessionId = (0, _uuid.default)();
27
+ var fireEvent = function fireEvent(payload) {
28
+ var _api$analytics$shared, _api$analytics;
29
+ var _ref2 = (_api$analytics$shared = api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.sharedState.currentState()) !== null && _api$analytics$shared !== void 0 ? _api$analytics$shared : {},
30
+ createAnalyticsEvent = _ref2.createAnalyticsEvent;
31
+ if (!createAnalyticsEvent) {
32
+ return;
33
+ }
34
+ if (payload.attributes && !payload.attributes.sessionId) {
35
+ payload.attributes.sessionId = sessionId;
36
+ }
37
+ createAnalyticsEvent(payload).fire(_resource.ELEMENTS_CHANNEL);
38
+ };
39
+ var typeAhead = (0, _typeAhead.createTypeAheadConfig)({
40
+ sanitizePrivateContent: options === null || options === void 0 ? void 0 : options.sanitizePrivateContent,
41
+ mentionInsertDisplayName: options === null || options === void 0 ? void 0 : options.insertDisplayName,
42
+ HighlightComponent: options === null || options === void 0 ? void 0 : options.HighlightComponent,
43
+ fireEvent: fireEvent
44
+ });
45
+ return {
46
+ name: 'mention',
47
+ nodes: function nodes() {
48
+ return [{
49
+ name: 'mention',
50
+ node: _adfSchema.mention
51
+ }];
52
+ },
53
+ pmPlugins: function pmPlugins() {
54
+ return [{
55
+ name: 'mention',
56
+ plugin: function plugin(pmPluginFactoryParams) {
57
+ return (0, _main.createMentionPlugin)(pmPluginFactoryParams, fireEvent, options);
58
+ }
59
+ }];
60
+ },
61
+ secondaryToolbarComponent: function secondaryToolbarComponent(_ref3) {
62
+ var editorView = _ref3.editorView,
63
+ disabled = _ref3.disabled;
64
+ var openMentionTypeAhead = function openMentionTypeAhead() {
65
+ var _api$typeAhead;
66
+ api === null || api === void 0 || (_api$typeAhead = api.typeAhead) === null || _api$typeAhead === void 0 || (_api$typeAhead = _api$typeAhead.actions) === null || _api$typeAhead === void 0 || _api$typeAhead.open({
67
+ triggerHandler: typeAhead,
68
+ inputMethod: _analytics.INPUT_METHOD.INSERT_MENU
69
+ });
70
+ };
71
+ return /*#__PURE__*/_react.default.createElement(_withPluginState.WithPluginState, {
72
+ editorView: editorView,
73
+ plugins: {
74
+ mentionState: _key.mentionPluginKey
75
+ },
76
+ render: function render(_ref4) {
77
+ var _ref4$mentionState = _ref4.mentionState,
78
+ mentionState = _ref4$mentionState === void 0 ? {} : _ref4$mentionState;
79
+ return !mentionState.mentionProvider ? null : /*#__PURE__*/_react.default.createElement(_ToolbarMention.default, {
80
+ editorView: editorView,
81
+ onInsertMention: openMentionTypeAhead,
82
+ isDisabled: disabled || (api === null || api === void 0 ? void 0 : api.typeAhead.actions.isAllowed(editorView.state))
83
+ });
84
+ }
85
+ });
86
+ },
87
+ actions: {
88
+ openTypeAhead: function openTypeAhead(inputMethod) {
89
+ var _api$typeAhead2;
90
+ return Boolean(api === null || api === void 0 || (_api$typeAhead2 = api.typeAhead) === null || _api$typeAhead2 === void 0 || (_api$typeAhead2 = _api$typeAhead2.actions) === null || _api$typeAhead2 === void 0 ? void 0 : _api$typeAhead2.open({
91
+ triggerHandler: typeAhead,
92
+ inputMethod: inputMethod
93
+ }));
94
+ }
95
+ },
96
+ getSharedState: function getSharedState(editorState) {
97
+ if (!editorState) {
98
+ return undefined;
99
+ }
100
+ var mentionPluginState = _key.mentionPluginKey.getState(editorState);
101
+ return _objectSpread(_objectSpread({}, mentionPluginState), {}, {
102
+ typeAheadHandler: typeAhead
103
+ });
104
+ },
105
+ pluginsOptions: {
106
+ quickInsert: function quickInsert(_ref5) {
107
+ var formatMessage = _ref5.formatMessage;
108
+ return [{
109
+ id: 'mention',
110
+ title: formatMessage(_messages.toolbarInsertBlockMessages.mention),
111
+ description: formatMessage(_messages.toolbarInsertBlockMessages.mentionDescription),
112
+ keywords: ['team', 'user'],
113
+ priority: 400,
114
+ keyshortcut: '@',
115
+ icon: function icon() {
116
+ return /*#__PURE__*/_react.default.createElement(_quickInsert.IconMention, null);
117
+ },
118
+ action: function action(insert, state) {
119
+ var tr = insert(undefined);
120
+ var pluginState = _key.mentionPluginKey.getState(state);
121
+ if (pluginState && pluginState.canInsertMention === false) {
122
+ return false;
123
+ }
124
+ api === null || api === void 0 || api.typeAhead.actions.openAtTransaction({
125
+ triggerHandler: typeAhead,
126
+ inputMethod: _analytics.INPUT_METHOD.QUICK_INSERT
127
+ })(tr);
128
+ return tr;
129
+ }
130
+ }];
131
+ },
132
+ typeAhead: typeAhead
133
+ }
134
+ };
135
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.mentionPluginKey = void 0;
7
+ var _state = require("@atlaskit/editor-prosemirror/state");
8
+ var mentionPluginKey = exports.mentionPluginKey = new _state.PluginKey('mentionPlugin');
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createMentionPlugin = createMentionPlugin;
8
+ exports.setContext = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _reactNodeView = require("@atlaskit/editor-common/react-node-view");
11
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
+ var _resource = require("@atlaskit/mention/resource");
13
+ var _mention = require("../nodeviews/mention");
14
+ var _key = require("./key");
15
+ var _utils = require("./utils");
16
+ 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; }
17
+ 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; }
18
+ var ACTIONS = {
19
+ SET_PROVIDER: 'SET_PROVIDER',
20
+ SET_CONTEXT: 'SET_CONTEXT'
21
+ };
22
+ var setProvider = function setProvider(provider) {
23
+ return function (state, dispatch) {
24
+ if (dispatch) {
25
+ dispatch(state.tr.setMeta(_key.mentionPluginKey, {
26
+ action: ACTIONS.SET_PROVIDER,
27
+ params: {
28
+ provider: provider
29
+ }
30
+ }));
31
+ }
32
+ return true;
33
+ };
34
+ };
35
+ var setContext = exports.setContext = function setContext(context) {
36
+ return function (state, dispatch) {
37
+ if (dispatch) {
38
+ dispatch(state.tr.setMeta(_key.mentionPluginKey, {
39
+ action: ACTIONS.SET_CONTEXT,
40
+ params: {
41
+ context: context
42
+ }
43
+ }));
44
+ }
45
+ return true;
46
+ };
47
+ };
48
+ function createMentionPlugin(pmPluginFactoryParams, fireEvent, options) {
49
+ var mentionProvider;
50
+ var sendAnalytics = function sendAnalytics(event, actionSubject, action, attributes) {
51
+ if (event === _resource.SLI_EVENT_TYPE || event === _resource.SMART_EVENT_TYPE) {
52
+ fireEvent((0, _resource.buildSliPayload)(actionSubject, action, attributes));
53
+ }
54
+ };
55
+ return new _safePlugin.SafePlugin({
56
+ key: _key.mentionPluginKey,
57
+ state: {
58
+ init: function init(_, state) {
59
+ var canInsertMention = (0, _utils.canMentionBeCreatedInRange)(state.selection.from, state.selection.to)(state);
60
+ return {
61
+ canInsertMention: canInsertMention
62
+ };
63
+ },
64
+ apply: function apply(tr, pluginState, oldState, newState) {
65
+ var _ref = tr.getMeta(_key.mentionPluginKey) || {
66
+ action: null,
67
+ params: null
68
+ },
69
+ action = _ref.action,
70
+ params = _ref.params;
71
+ var hasNewPluginState = false;
72
+ var newPluginState = pluginState;
73
+ var hasPositionChanged = oldState.selection.from !== newState.selection.from || oldState.selection.to !== newState.selection.to;
74
+ if (tr.docChanged || tr.selectionSet && hasPositionChanged) {
75
+ newPluginState = _objectSpread(_objectSpread({}, pluginState), {}, {
76
+ canInsertMention: (0, _utils.canMentionBeCreatedInRange)(newState.selection.from, newState.selection.to)(newState)
77
+ });
78
+ hasNewPluginState = true;
79
+ }
80
+ switch (action) {
81
+ case ACTIONS.SET_PROVIDER:
82
+ newPluginState = _objectSpread(_objectSpread({}, newPluginState), {}, {
83
+ mentionProvider: params.provider
84
+ });
85
+ hasNewPluginState = true;
86
+ break;
87
+ case ACTIONS.SET_CONTEXT:
88
+ newPluginState = _objectSpread(_objectSpread({}, newPluginState), {}, {
89
+ contextIdentifierProvider: params.context
90
+ });
91
+ hasNewPluginState = true;
92
+ break;
93
+ }
94
+ if (hasNewPluginState) {
95
+ pmPluginFactoryParams.dispatch(_key.mentionPluginKey, newPluginState);
96
+ }
97
+ return newPluginState;
98
+ }
99
+ },
100
+ props: {
101
+ nodeViews: {
102
+ mention: (0, _reactNodeView.getInlineNodeViewProducer)({
103
+ pmPluginFactoryParams: pmPluginFactoryParams,
104
+ Component: _mention.MentionNodeView,
105
+ extraComponentProps: {
106
+ providerFactory: pmPluginFactoryParams.providerFactory,
107
+ options: options
108
+ }
109
+ })
110
+ }
111
+ },
112
+ view: function view(editorView) {
113
+ var providerHandler = function providerHandler(name, providerPromise) {
114
+ switch (name) {
115
+ case 'mentionProvider':
116
+ if (!providerPromise) {
117
+ return setProvider(undefined)(editorView.state, editorView.dispatch);
118
+ }
119
+ providerPromise.then(function (provider) {
120
+ if (mentionProvider) {
121
+ mentionProvider.unsubscribe('mentionPlugin');
122
+ }
123
+ mentionProvider = provider;
124
+ setProvider(provider)(editorView.state, editorView.dispatch);
125
+ provider.subscribe('mentionPlugin', undefined, undefined, undefined, undefined, sendAnalytics);
126
+ }).catch(function () {
127
+ return setProvider(undefined)(editorView.state, editorView.dispatch);
128
+ });
129
+ break;
130
+ case 'contextIdentifierProvider':
131
+ if (!providerPromise) {
132
+ return setContext(undefined)(editorView.state, editorView.dispatch);
133
+ }
134
+ providerPromise.then(function (provider) {
135
+ setContext(provider)(editorView.state, editorView.dispatch);
136
+ });
137
+ break;
138
+ }
139
+ return;
140
+ };
141
+ pmPluginFactoryParams.providerFactory.subscribe('mentionProvider', providerHandler);
142
+ pmPluginFactoryParams.providerFactory.subscribe('contextIdentifierProvider', providerHandler);
143
+ return {
144
+ destroy: function destroy() {
145
+ if (pmPluginFactoryParams.providerFactory) {
146
+ pmPluginFactoryParams.providerFactory.unsubscribe('mentionProvider', providerHandler);
147
+ pmPluginFactoryParams.providerFactory.unsubscribe('contextIdentifierProvider', providerHandler);
148
+ }
149
+ if (mentionProvider) {
150
+ mentionProvider.unsubscribe('mentionPlugin');
151
+ }
152
+ }
153
+ };
154
+ }
155
+ });
156
+ }