@atlaskit/editor-plugin-emoji 2.3.2 → 2.5.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/CHANGELOG.md +20 -0
- package/dist/cjs/nodeviews/emoji.js +9 -0
- package/dist/cjs/plugin.js +94 -56
- package/dist/cjs/pm-plugins/actions.js +41 -0
- package/dist/cjs/pm-plugins/ascii-input-rules.js +19 -6
- package/dist/cjs/ui/Emoji/emoji-next.js +55 -0
- package/dist/cjs/ui/Emoji/index.js +3 -1
- package/dist/cjs/ui/LoadableSimpleEmoji.js +35 -0
- package/dist/cjs/ui/NdpEmoji.js +74 -0
- package/dist/cjs/ui/SimpleEmoji.js +28 -0
- package/dist/es2019/nodeviews/emoji.js +9 -0
- package/dist/es2019/plugin.js +55 -41
- package/dist/es2019/pm-plugins/actions.js +29 -0
- package/dist/es2019/pm-plugins/ascii-input-rules.js +20 -6
- package/dist/es2019/ui/Emoji/emoji-next.js +51 -0
- package/dist/es2019/ui/Emoji/index.js +3 -1
- package/dist/es2019/ui/LoadableSimpleEmoji.js +9 -0
- package/dist/es2019/ui/NdpEmoji.js +66 -0
- package/dist/es2019/ui/SimpleEmoji.js +22 -0
- package/dist/esm/nodeviews/emoji.js +9 -0
- package/dist/esm/plugin.js +91 -52
- package/dist/esm/pm-plugins/actions.js +35 -0
- package/dist/esm/pm-plugins/ascii-input-rules.js +19 -6
- package/dist/esm/ui/Emoji/emoji-next.js +48 -0
- package/dist/esm/ui/Emoji/index.js +3 -1
- package/dist/esm/ui/LoadableSimpleEmoji.js +21 -0
- package/dist/esm/ui/NdpEmoji.js +64 -0
- package/dist/esm/ui/SimpleEmoji.js +20 -0
- package/dist/types/nodeviews/emoji.d.ts +4 -0
- package/dist/types/plugin.d.ts +5 -12
- package/dist/types/pm-plugins/actions.d.ts +13 -0
- package/dist/types/pm-plugins/ascii-input-rules.d.ts +4 -3
- package/dist/types/types.d.ts +5 -1
- package/dist/types/ui/Emoji/emoji-next.d.ts +16 -0
- package/dist/types/ui/Emoji/index.d.ts +1 -1
- package/dist/types/ui/LoadableSimpleEmoji.d.ts +5 -0
- package/dist/types/ui/NdpEmoji.d.ts +7 -0
- package/dist/types/ui/SimpleEmoji.d.ts +14 -0
- package/dist/types-ts4.5/nodeviews/emoji.d.ts +4 -0
- package/dist/types-ts4.5/plugin.d.ts +5 -12
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +13 -0
- package/dist/types-ts4.5/pm-plugins/ascii-input-rules.d.ts +4 -3
- package/dist/types-ts4.5/types.d.ts +5 -1
- package/dist/types-ts4.5/ui/Emoji/emoji-next.d.ts +16 -0
- package/dist/types-ts4.5/ui/Emoji/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/LoadableSimpleEmoji.d.ts +5 -0
- package/dist/types-ts4.5/ui/NdpEmoji.d.ts +7 -0
- package/dist/types-ts4.5/ui/SimpleEmoji.d.ts +14 -0
- package/package.json +8 -4
package/dist/esm/plugin.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
3
|
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; }
|
|
3
4
|
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) { _defineProperty(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; }
|
|
5
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
6
|
import React from 'react';
|
|
5
7
|
import { emoji } from '@atlaskit/adf-schema';
|
|
6
8
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
@@ -15,6 +17,7 @@ import { EmojiTypeAheadItem, recordSelectionFailedSli, recordSelectionSucceededS
|
|
|
15
17
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
16
18
|
import { createEmojiFragment, insertEmoji } from './commands/insert-emoji';
|
|
17
19
|
import { EmojiNodeView } from './nodeviews/emoji';
|
|
20
|
+
import { ACTIONS, openTypeAhead as openTypeAheadAction, setAsciiMap as setAsciiMapAction, setProvider as setProviderAction } from './pm-plugins/actions';
|
|
18
21
|
import { inputRulePlugin as asciiInputRulePlugin } from './pm-plugins/ascii-input-rules';
|
|
19
22
|
export var emojiToTypeaheadItem = function emojiToTypeaheadItem(emoji, emojiProvider) {
|
|
20
23
|
return {
|
|
@@ -70,6 +73,7 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
70
73
|
var _api$analytics5;
|
|
71
74
|
var options = _ref2.config,
|
|
72
75
|
api = _ref2.api;
|
|
76
|
+
var previousEmojiProvider;
|
|
73
77
|
var typeAhead = {
|
|
74
78
|
id: TypeAheadAvailableNodes.EMOJI,
|
|
75
79
|
trigger: TRIGGER,
|
|
@@ -184,7 +188,7 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
184
188
|
return [{
|
|
185
189
|
name: 'emoji',
|
|
186
190
|
plugin: function plugin(pmPluginFactoryParams) {
|
|
187
|
-
return createEmojiPlugin(pmPluginFactoryParams);
|
|
191
|
+
return createEmojiPlugin(pmPluginFactoryParams, options, api);
|
|
188
192
|
}
|
|
189
193
|
}, {
|
|
190
194
|
name: 'emojiAsciiInputRule',
|
|
@@ -193,7 +197,7 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
193
197
|
var schema = _ref7.schema,
|
|
194
198
|
providerFactory = _ref7.providerFactory,
|
|
195
199
|
featureFlags = _ref7.featureFlags;
|
|
196
|
-
return asciiInputRulePlugin(schema, providerFactory, featureFlags, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions);
|
|
200
|
+
return asciiInputRulePlugin(schema, providerFactory, featureFlags, api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, api);
|
|
197
201
|
}
|
|
198
202
|
}];
|
|
199
203
|
},
|
|
@@ -204,28 +208,57 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
204
208
|
}
|
|
205
209
|
var _ref8 = (_emojiPluginKey$getSt = emojiPluginKey.getState(editorState)) !== null && _emojiPluginKey$getSt !== void 0 ? _emojiPluginKey$getSt : {},
|
|
206
210
|
emojiResourceConfig = _ref8.emojiResourceConfig,
|
|
207
|
-
asciiMap = _ref8.asciiMap
|
|
211
|
+
asciiMap = _ref8.asciiMap,
|
|
212
|
+
emojiProvider = _ref8.emojiProvider;
|
|
208
213
|
return {
|
|
209
214
|
emojiResourceConfig: emojiResourceConfig,
|
|
210
215
|
asciiMap: asciiMap,
|
|
211
|
-
typeAheadHandler: typeAhead
|
|
216
|
+
typeAheadHandler: typeAhead,
|
|
217
|
+
emojiProvider: emojiProvider
|
|
212
218
|
};
|
|
213
219
|
},
|
|
214
220
|
actions: {
|
|
215
|
-
openTypeAhead:
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
221
|
+
openTypeAhead: openTypeAheadAction(typeAhead, api),
|
|
222
|
+
setProvider: function () {
|
|
223
|
+
var _setProvider = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(providerPromise) {
|
|
224
|
+
var _api$core$actions$exe;
|
|
225
|
+
var provider;
|
|
226
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
227
|
+
while (1) switch (_context.prev = _context.next) {
|
|
228
|
+
case 0:
|
|
229
|
+
_context.next = 2;
|
|
230
|
+
return providerPromise;
|
|
231
|
+
case 2:
|
|
232
|
+
provider = _context.sent;
|
|
233
|
+
if (!(previousEmojiProvider === provider || (options === null || options === void 0 ? void 0 : options.emojiProvider) === providerPromise)) {
|
|
234
|
+
_context.next = 5;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
return _context.abrupt("return", false);
|
|
238
|
+
case 5:
|
|
239
|
+
previousEmojiProvider = provider;
|
|
240
|
+
return _context.abrupt("return", (_api$core$actions$exe = api === null || api === void 0 ? void 0 : api.core.actions.execute(function (_ref9) {
|
|
241
|
+
var tr = _ref9.tr;
|
|
242
|
+
return setProviderTr(provider)(tr);
|
|
243
|
+
})) !== null && _api$core$actions$exe !== void 0 ? _api$core$actions$exe : false);
|
|
244
|
+
case 7:
|
|
245
|
+
case "end":
|
|
246
|
+
return _context.stop();
|
|
247
|
+
}
|
|
248
|
+
}, _callee);
|
|
220
249
|
}));
|
|
221
|
-
|
|
250
|
+
function setProvider(_x) {
|
|
251
|
+
return _setProvider.apply(this, arguments);
|
|
252
|
+
}
|
|
253
|
+
return setProvider;
|
|
254
|
+
}()
|
|
222
255
|
},
|
|
223
256
|
commands: {
|
|
224
257
|
insertEmoji: insertEmoji(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions)
|
|
225
258
|
},
|
|
226
259
|
pluginsOptions: {
|
|
227
|
-
quickInsert: function quickInsert(
|
|
228
|
-
var formatMessage =
|
|
260
|
+
quickInsert: function quickInsert(_ref10) {
|
|
261
|
+
var formatMessage = _ref10.formatMessage;
|
|
229
262
|
return [{
|
|
230
263
|
id: 'emoji',
|
|
231
264
|
title: formatMessage(messages.emoji),
|
|
@@ -236,9 +269,9 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
236
269
|
return /*#__PURE__*/React.createElement(IconEmoji, null);
|
|
237
270
|
},
|
|
238
271
|
action: function action(insert, state) {
|
|
239
|
-
var _api$
|
|
272
|
+
var _api$typeAhead;
|
|
240
273
|
var tr = insert(undefined);
|
|
241
|
-
api === null || api === void 0 || (_api$
|
|
274
|
+
api === null || api === void 0 || (_api$typeAhead = api.typeAhead) === null || _api$typeAhead === void 0 || _api$typeAhead.actions.openAtTransaction({
|
|
242
275
|
triggerHandler: typeAhead,
|
|
243
276
|
inputMethod: INPUT_METHOD.QUICK_INSERT
|
|
244
277
|
})(tr);
|
|
@@ -255,20 +288,11 @@ export var emojiPlugin = function emojiPlugin(_ref2) {
|
|
|
255
288
|
* Actions
|
|
256
289
|
*/
|
|
257
290
|
|
|
258
|
-
export var ACTIONS = {
|
|
259
|
-
SET_PROVIDER: 'SET_PROVIDER',
|
|
260
|
-
SET_RESULTS: 'SET_RESULTS',
|
|
261
|
-
SET_ASCII_MAP: 'SET_ASCII_MAP'
|
|
262
|
-
};
|
|
263
291
|
var setAsciiMap = function setAsciiMap(asciiMap) {
|
|
264
292
|
return function (state, dispatch) {
|
|
265
293
|
if (dispatch) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
params: {
|
|
269
|
-
asciiMap: asciiMap
|
|
270
|
-
}
|
|
271
|
-
}));
|
|
294
|
+
var _tr = setAsciiMapAction(asciiMap)(state.tr);
|
|
295
|
+
dispatch(_tr);
|
|
272
296
|
}
|
|
273
297
|
return true;
|
|
274
298
|
};
|
|
@@ -310,28 +334,29 @@ var logRateWarning = function logRateWarning() {
|
|
|
310
334
|
console.error('The emoji provider injected in the Editor is being reloaded frequently, this will cause a slow Editor experience.');
|
|
311
335
|
}
|
|
312
336
|
};
|
|
313
|
-
export var
|
|
314
|
-
return function (
|
|
315
|
-
|
|
316
|
-
dispatch(state.tr.setMeta(emojiPluginKey, {
|
|
317
|
-
action: ACTIONS.SET_PROVIDER,
|
|
318
|
-
params: {
|
|
319
|
-
provider: provider
|
|
320
|
-
}
|
|
321
|
-
}));
|
|
322
|
-
}
|
|
323
|
-
return true;
|
|
337
|
+
export var setProviderTr = createRateLimitReachedFunction(function (provider) {
|
|
338
|
+
return function (tr) {
|
|
339
|
+
return setProviderAction(provider)(tr);
|
|
324
340
|
};
|
|
325
341
|
},
|
|
326
342
|
// If we change the emoji provider more than three times every 5 seconds we should warn.
|
|
327
343
|
// This seems like a really long time but the performance can be that laggy that we don't
|
|
328
344
|
// even get 3 events in 3 seconds and miss this indicator.
|
|
329
345
|
5000, 3, logRateWarning);
|
|
346
|
+
export var setProvider = function setProvider(provider) {
|
|
347
|
+
return function (state, dispatch) {
|
|
348
|
+
if (dispatch) {
|
|
349
|
+
var _tr2 = setProviderTr(provider)(state.tr);
|
|
350
|
+
dispatch(_tr2);
|
|
351
|
+
}
|
|
352
|
+
return true;
|
|
353
|
+
};
|
|
354
|
+
};
|
|
330
355
|
export var emojiPluginKey = new PluginKey('emojiPlugin');
|
|
331
356
|
export function getEmojiPluginState(state) {
|
|
332
357
|
return emojiPluginKey.getState(state) || {};
|
|
333
358
|
}
|
|
334
|
-
export function createEmojiPlugin(pmPluginFactoryParams) {
|
|
359
|
+
export function createEmojiPlugin(pmPluginFactoryParams, options, api) {
|
|
335
360
|
return new SafePlugin({
|
|
336
361
|
key: emojiPluginKey,
|
|
337
362
|
state: {
|
|
@@ -339,25 +364,29 @@ export function createEmojiPlugin(pmPluginFactoryParams) {
|
|
|
339
364
|
return {};
|
|
340
365
|
},
|
|
341
366
|
apply: function apply(tr, pluginState) {
|
|
342
|
-
var
|
|
367
|
+
var _ref11 = tr.getMeta(emojiPluginKey) || {
|
|
343
368
|
action: null,
|
|
344
369
|
params: null
|
|
345
370
|
},
|
|
346
|
-
action =
|
|
347
|
-
params =
|
|
371
|
+
action = _ref11.action,
|
|
372
|
+
params = _ref11.params;
|
|
348
373
|
var newPluginState = pluginState;
|
|
349
374
|
switch (action) {
|
|
350
375
|
case ACTIONS.SET_PROVIDER:
|
|
351
376
|
newPluginState = _objectSpread(_objectSpread({}, pluginState), {}, {
|
|
352
377
|
emojiProvider: params.provider
|
|
353
378
|
});
|
|
354
|
-
|
|
379
|
+
if (!fg('platform_editor_get_emoji_provider_from_config')) {
|
|
380
|
+
pmPluginFactoryParams.dispatch(emojiPluginKey, newPluginState);
|
|
381
|
+
}
|
|
355
382
|
return newPluginState;
|
|
356
383
|
case ACTIONS.SET_ASCII_MAP:
|
|
357
384
|
newPluginState = _objectSpread(_objectSpread({}, pluginState), {}, {
|
|
358
385
|
asciiMap: params.asciiMap
|
|
359
386
|
});
|
|
360
|
-
|
|
387
|
+
if (!fg('platform_editor_get_emoji_provider_from_config')) {
|
|
388
|
+
pmPluginFactoryParams.dispatch(emojiPluginKey, newPluginState);
|
|
389
|
+
}
|
|
361
390
|
return newPluginState;
|
|
362
391
|
}
|
|
363
392
|
return newPluginState;
|
|
@@ -369,7 +398,9 @@ export function createEmojiPlugin(pmPluginFactoryParams) {
|
|
|
369
398
|
pmPluginFactoryParams: pmPluginFactoryParams,
|
|
370
399
|
Component: EmojiNodeView,
|
|
371
400
|
extraComponentProps: {
|
|
372
|
-
providerFactory: pmPluginFactoryParams.providerFactory
|
|
401
|
+
providerFactory: pmPluginFactoryParams.providerFactory,
|
|
402
|
+
options: options,
|
|
403
|
+
api: api
|
|
373
404
|
}
|
|
374
405
|
})
|
|
375
406
|
}
|
|
@@ -379,28 +410,36 @@ export function createEmojiPlugin(pmPluginFactoryParams) {
|
|
|
379
410
|
switch (name) {
|
|
380
411
|
case 'emojiProvider':
|
|
381
412
|
if (!providerPromise) {
|
|
382
|
-
var
|
|
383
|
-
return setProvider === null || setProvider === void 0 || (
|
|
413
|
+
var _setProvider2;
|
|
414
|
+
return setProvider === null || setProvider === void 0 || (_setProvider2 = setProvider(undefined)) === null || _setProvider2 === void 0 ? void 0 : _setProvider2(editorView.state, editorView.dispatch);
|
|
384
415
|
}
|
|
385
416
|
providerPromise.then(function (provider) {
|
|
386
|
-
var
|
|
387
|
-
setProvider === null || setProvider === void 0 || (
|
|
417
|
+
var _setProvider3;
|
|
418
|
+
setProvider === null || setProvider === void 0 || (_setProvider3 = setProvider(provider)) === null || _setProvider3 === void 0 || _setProvider3(editorView.state, editorView.dispatch);
|
|
388
419
|
provider.getAsciiMap().then(function (asciiMap) {
|
|
389
420
|
setAsciiMap(asciiMap)(editorView.state, editorView.dispatch);
|
|
390
421
|
});
|
|
391
422
|
}).catch(function () {
|
|
392
|
-
var
|
|
393
|
-
return setProvider === null || setProvider === void 0 || (
|
|
423
|
+
var _setProvider4;
|
|
424
|
+
return setProvider === null || setProvider === void 0 || (_setProvider4 = setProvider(undefined)) === null || _setProvider4 === void 0 ? void 0 : _setProvider4(editorView.state, editorView.dispatch);
|
|
394
425
|
});
|
|
395
426
|
break;
|
|
396
427
|
}
|
|
397
428
|
return;
|
|
398
429
|
};
|
|
399
|
-
|
|
430
|
+
if (fg('platform_editor_get_emoji_provider_from_config')) {
|
|
431
|
+
if (options !== null && options !== void 0 && options.emojiProvider) {
|
|
432
|
+
providerHandler('emojiProvider', options.emojiProvider);
|
|
433
|
+
}
|
|
434
|
+
} else {
|
|
435
|
+
pmPluginFactoryParams.providerFactory.subscribe('emojiProvider', providerHandler);
|
|
436
|
+
}
|
|
400
437
|
return {
|
|
401
438
|
destroy: function destroy() {
|
|
402
|
-
if (
|
|
403
|
-
pmPluginFactoryParams.providerFactory
|
|
439
|
+
if (!fg('platform_editor_get_emoji_provider_from_config')) {
|
|
440
|
+
if (pmPluginFactoryParams.providerFactory) {
|
|
441
|
+
pmPluginFactoryParams.providerFactory.unsubscribe('emojiProvider', providerHandler);
|
|
442
|
+
}
|
|
404
443
|
}
|
|
405
444
|
}
|
|
406
445
|
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { emojiPluginKey } from '../plugin';
|
|
2
|
+
export var ACTIONS = {
|
|
3
|
+
SET_PROVIDER: 'SET_PROVIDER',
|
|
4
|
+
SET_RESULTS: 'SET_RESULTS',
|
|
5
|
+
SET_ASCII_MAP: 'SET_ASCII_MAP'
|
|
6
|
+
};
|
|
7
|
+
export var setAsciiMap = function setAsciiMap(asciiMap) {
|
|
8
|
+
return function (tr) {
|
|
9
|
+
return tr.setMeta(emojiPluginKey, {
|
|
10
|
+
action: ACTIONS.SET_ASCII_MAP,
|
|
11
|
+
params: {
|
|
12
|
+
asciiMap: asciiMap
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export var openTypeAhead = function openTypeAhead(typeaheadHandler, api) {
|
|
18
|
+
return function (inputMethod) {
|
|
19
|
+
var _api$typeAhead;
|
|
20
|
+
return Boolean(api === null || api === void 0 || (_api$typeAhead = api.typeAhead) === null || _api$typeAhead === void 0 ? void 0 : _api$typeAhead.actions.open({
|
|
21
|
+
triggerHandler: typeaheadHandler,
|
|
22
|
+
inputMethod: inputMethod
|
|
23
|
+
}));
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export var setProvider = function setProvider(provider) {
|
|
27
|
+
return function (tr) {
|
|
28
|
+
return tr.setMeta(emojiPluginKey, {
|
|
29
|
+
action: ACTIONS.SET_PROVIDER,
|
|
30
|
+
params: {
|
|
31
|
+
provider: provider
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
};
|
|
@@ -11,17 +11,18 @@ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } f
|
|
|
11
11
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
12
12
|
import { createRule } from '@atlaskit/editor-common/utils';
|
|
13
13
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
14
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
14
15
|
import { createPlugin, leafNodeReplacementCharacter } from '@atlaskit/prosemirror-input-rules';
|
|
15
16
|
var matcher;
|
|
16
|
-
export function inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI) {
|
|
17
|
+
export function inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI, pluginInjectionApi) {
|
|
17
18
|
if (schema.nodes.emoji && providerFactory) {
|
|
18
|
-
initMatcher(providerFactory);
|
|
19
|
+
initMatcher(providerFactory, pluginInjectionApi);
|
|
19
20
|
var asciiEmojiRule = createRule(AsciiEmojiMatcher.REGEX, inputRuleHandler(editorAnalyticsAPI));
|
|
20
21
|
return new SafePlugin(createPlugin('emoji', [asciiEmojiRule]));
|
|
21
22
|
}
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
|
-
function initMatcher(providerFactory) {
|
|
25
|
+
function initMatcher(providerFactory, pluginInjectionApi) {
|
|
25
26
|
var handleProvider = function handleProvider(_name, provider) {
|
|
26
27
|
if (!provider) {
|
|
27
28
|
return;
|
|
@@ -32,7 +33,19 @@ function initMatcher(providerFactory) {
|
|
|
32
33
|
});
|
|
33
34
|
});
|
|
34
35
|
};
|
|
35
|
-
|
|
36
|
+
if (fg('platform_editor_get_emoji_provider_from_config')) {
|
|
37
|
+
pluginInjectionApi === null || pluginInjectionApi === void 0 || pluginInjectionApi.emoji.sharedState.onChange(function (_ref) {
|
|
38
|
+
var nextSharedState = _ref.nextSharedState;
|
|
39
|
+
var emojiProvider = nextSharedState === null || nextSharedState === void 0 ? void 0 : nextSharedState.emojiProvider;
|
|
40
|
+
if (emojiProvider) {
|
|
41
|
+
emojiProvider.getAsciiMap().then(function (map) {
|
|
42
|
+
matcher = new RecordingAsciiEmojiMatcher(emojiProvider, map);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
providerFactory.subscribe('emojiProvider', handleProvider);
|
|
48
|
+
}
|
|
36
49
|
}
|
|
37
50
|
var inputRuleHandler = function inputRuleHandler(editorAnalyticsAPI) {
|
|
38
51
|
return function (state, matchParts, start, end) {
|
|
@@ -218,8 +231,8 @@ var AsciiEmojiTransactionCreator = /*#__PURE__*/function () {
|
|
|
218
231
|
return AsciiEmojiTransactionCreator;
|
|
219
232
|
}();
|
|
220
233
|
export var stateKey = new PluginKey('asciiEmojiPlugin');
|
|
221
|
-
var plugins = function plugins(schema, providerFactory, featureFlags, editorAnalyticsAPI) {
|
|
222
|
-
return [inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI)].filter(function (plugin) {
|
|
234
|
+
var plugins = function plugins(schema, providerFactory, featureFlags, editorAnalyticsAPI, pluginInjectionApi) {
|
|
235
|
+
return [inputRulePlugin(schema, providerFactory, featureFlags, editorAnalyticsAPI, pluginInjectionApi)].filter(function (plugin) {
|
|
223
236
|
return !!plugin;
|
|
224
237
|
});
|
|
225
238
|
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
|
|
3
|
+
import { ResourcedEmoji } from '@atlaskit/emoji/element';
|
|
4
|
+
var useEmojiProvider = function useEmojiProvider(pluginInjectionApi) {
|
|
5
|
+
var _useSharedPluginState = useSharedPluginState(pluginInjectionApi, ['emoji']),
|
|
6
|
+
emojiState = _useSharedPluginState.emojiState;
|
|
7
|
+
return emojiState === null || emojiState === void 0 ? void 0 : emojiState.emojiProvider;
|
|
8
|
+
};
|
|
9
|
+
var EmojiNode = function EmojiNode(props) {
|
|
10
|
+
var _resourceConfig$optim;
|
|
11
|
+
var allowTextFallback = props.allowTextFallback,
|
|
12
|
+
shortName = props.shortName,
|
|
13
|
+
id = props.id,
|
|
14
|
+
fallback = props.fallback,
|
|
15
|
+
fitToHeight = props.fitToHeight,
|
|
16
|
+
showTooltip = props.showTooltip,
|
|
17
|
+
resourceConfig = props.resourceConfig,
|
|
18
|
+
pluginInjectionApi = props.pluginInjectionApi;
|
|
19
|
+
var emojiProvider = useEmojiProvider(pluginInjectionApi);
|
|
20
|
+
if (allowTextFallback && !emojiProvider) {
|
|
21
|
+
return /*#__PURE__*/React.createElement("span", {
|
|
22
|
+
"data-emoji-id": id,
|
|
23
|
+
"data-emoji-short-name": shortName,
|
|
24
|
+
"data-emoji-text": fallback || shortName
|
|
25
|
+
}, fallback || shortName);
|
|
26
|
+
}
|
|
27
|
+
if (!emojiProvider) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return /*#__PURE__*/React.createElement(ResourcedEmoji, {
|
|
31
|
+
emojiId: {
|
|
32
|
+
id: id,
|
|
33
|
+
fallback: fallback,
|
|
34
|
+
shortName: shortName
|
|
35
|
+
},
|
|
36
|
+
emojiProvider: Promise.resolve(emojiProvider),
|
|
37
|
+
showTooltip: showTooltip,
|
|
38
|
+
fitToHeight: fitToHeight,
|
|
39
|
+
optimistic: true,
|
|
40
|
+
optimisticImageURL: resourceConfig === null || resourceConfig === void 0 || (_resourceConfig$optim = resourceConfig.optimisticImageApi) === null || _resourceConfig$optim === void 0 ? void 0 : _resourceConfig$optim.getUrl({
|
|
41
|
+
id: id,
|
|
42
|
+
fallback: fallback,
|
|
43
|
+
shortName: shortName
|
|
44
|
+
}),
|
|
45
|
+
editorEmoji: true
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
export default EmojiNode;
|
|
@@ -7,10 +7,12 @@ var _templateObject;
|
|
|
7
7
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
8
8
|
import { css, jsx } from '@emotion/react';
|
|
9
9
|
import { Emoji } from '@atlaskit/editor-common/emoji';
|
|
10
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
11
|
+
import { default as EmojiNext } from './emoji-next';
|
|
10
12
|
// eslint-disable-next-line
|
|
11
13
|
var clickSelectWrapperStyle = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n\t// eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage\n\tuser-select: all;\n"])));
|
|
12
14
|
export default function EmojiNode(props) {
|
|
13
15
|
return jsx("span", {
|
|
14
16
|
css: clickSelectWrapperStyle
|
|
15
|
-
}, jsx(Emoji, props));
|
|
17
|
+
}, fg('platform_editor_get_emoji_provider_from_config') ? jsx(EmojiNext, props) : jsx(Emoji, props));
|
|
16
18
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import Loadable from 'react-loadable';
|
|
2
|
+
export var LoadableSimpleEmoji = Loadable({
|
|
3
|
+
loader: function loader() {
|
|
4
|
+
return import( /* webpackChunkName: "@atlaskit-internal_simpleEmoji" */'./SimpleEmoji').then(function (component) {
|
|
5
|
+
return component.SimpleEmoji;
|
|
6
|
+
});
|
|
7
|
+
},
|
|
8
|
+
loading: function loading() {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
export var LoadableSimpleEmojiPlaceholder = Loadable({
|
|
13
|
+
loader: function loader() {
|
|
14
|
+
return import( /* webpackChunkName: "@atlaskit-internal_simpleEmoji" */'./SimpleEmoji').then(function (component) {
|
|
15
|
+
return component.SimpleEmojiPlaceholder;
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
loading: function loading() {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jsxRuntime classic
|
|
3
|
+
* @jsx jsx
|
|
4
|
+
*/
|
|
5
|
+
import React, { Fragment } from 'react';
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled
|
|
8
|
+
import { css, jsx } from '@emotion/react';
|
|
9
|
+
import { useIntl } from 'react-intl-next';
|
|
10
|
+
import { messages } from '@atlaskit/editor-common/emoji';
|
|
11
|
+
import { useNodeDataProviderGet } from '@atlaskit/node-data-provider/plugin-hooks';
|
|
12
|
+
import { LoadableSimpleEmoji, LoadableSimpleEmojiPlaceholder } from './LoadableSimpleEmoji';
|
|
13
|
+
export function NdpEmoji(props) {
|
|
14
|
+
var emojiNode = props.node;
|
|
15
|
+
var value = useNodeDataProviderGet({
|
|
16
|
+
node: emojiNode,
|
|
17
|
+
provider: props.emojiNodeDataProvider
|
|
18
|
+
});
|
|
19
|
+
if (value.state === 'loading') {
|
|
20
|
+
return jsx(EmojiCommonWrapper, {
|
|
21
|
+
emojiNode: emojiNode
|
|
22
|
+
}, jsx(LoadableSimpleEmojiPlaceholder, {
|
|
23
|
+
shortName: emojiNode.attrs.shortName
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
if (value.state === 'failed') {
|
|
27
|
+
return jsx(EmojiCommonWrapper, {
|
|
28
|
+
emojiNode: emojiNode
|
|
29
|
+
}, jsx(Fragment, null, emojiNode.attrs.text || emojiNode.attrs.shortName));
|
|
30
|
+
}
|
|
31
|
+
return jsx(EmojiCommonWrapper, {
|
|
32
|
+
emojiNode: emojiNode
|
|
33
|
+
}, jsx(LoadableSimpleEmoji, {
|
|
34
|
+
emojiDescription: value.result
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
var clickSelectWrapperStyle = css({
|
|
38
|
+
userSelect: 'all'
|
|
39
|
+
});
|
|
40
|
+
var EmojiAssistiveTextComponent = /*#__PURE__*/React.memo(function (_ref) {
|
|
41
|
+
var emojiShortName = _ref.emojiShortName;
|
|
42
|
+
var intl = useIntl();
|
|
43
|
+
return (
|
|
44
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
|
|
45
|
+
jsx("span", {
|
|
46
|
+
style: {
|
|
47
|
+
fontSize: 0
|
|
48
|
+
}
|
|
49
|
+
}, "".concat(intl.formatMessage(messages.emojiNodeLabel), " ").concat(emojiShortName))
|
|
50
|
+
);
|
|
51
|
+
});
|
|
52
|
+
function EmojiCommonWrapper(_ref2) {
|
|
53
|
+
var emojiNode = _ref2.emojiNode,
|
|
54
|
+
children = _ref2.children;
|
|
55
|
+
return jsx(Fragment, null, jsx(EmojiAssistiveTextComponent, {
|
|
56
|
+
emojiShortName: emojiNode.attrs.shortName
|
|
57
|
+
}), jsx("span", null, jsx("span", {
|
|
58
|
+
css: clickSelectWrapperStyle
|
|
59
|
+
}, jsx("span", {
|
|
60
|
+
"data-emoji-id": emojiNode.attrs.id,
|
|
61
|
+
"data-emoji-short-name": emojiNode.attrs.shortName,
|
|
62
|
+
"data-emoji-text": emojiNode.attrs.text || emojiNode.attrs.shortName
|
|
63
|
+
}, children))));
|
|
64
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Emoji as AtlaskitEmoji, defaultEmojiHeight, EmojiPlaceholder } from '@atlaskit/emoji';
|
|
3
|
+
export function SimpleEmoji(_ref) {
|
|
4
|
+
var emojiDescription = _ref.emojiDescription;
|
|
5
|
+
return /*#__PURE__*/React.createElement(AtlaskitEmoji, {
|
|
6
|
+
emoji: emojiDescription,
|
|
7
|
+
autoWidth: false,
|
|
8
|
+
editorEmoji: true,
|
|
9
|
+
fitToHeight: defaultEmojiHeight
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function SimpleEmojiPlaceholder(_ref2) {
|
|
13
|
+
var shortName = _ref2.shortName;
|
|
14
|
+
return /*#__PURE__*/React.createElement(EmojiPlaceholder, {
|
|
15
|
+
shortName: shortName,
|
|
16
|
+
showTooltip: false,
|
|
17
|
+
size: defaultEmojiHeight,
|
|
18
|
+
loading: true
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import type { InlineNodeViewComponentProps } from '@atlaskit/editor-common/react-node-view';
|
|
4
|
+
import { type ExtractInjectionAPI } from '@atlaskit/editor-common/types';
|
|
5
|
+
import { type EmojiPlugin, type EmojiPluginOptions } from '../types';
|
|
4
6
|
export type Props = InlineNodeViewComponentProps & {
|
|
5
7
|
providerFactory: ProviderFactory;
|
|
8
|
+
options?: EmojiPluginOptions;
|
|
9
|
+
api?: ExtractInjectionAPI<EmojiPlugin>;
|
|
6
10
|
};
|
|
7
11
|
export declare function EmojiNodeView(props: Props): JSX.Element;
|
package/dist/types/plugin.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
2
|
-
import type { Command, PMPluginFactoryParams, TypeAheadItem } from '@atlaskit/editor-common/types';
|
|
3
|
-
import type { EditorState } from '@atlaskit/editor-prosemirror/state';
|
|
2
|
+
import type { Command, ExtractInjectionAPI, PMPluginFactoryParams, TypeAheadItem } from '@atlaskit/editor-common/types';
|
|
3
|
+
import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
4
4
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
5
5
|
import type { EmojiDescription, EmojiProvider } from '@atlaskit/emoji';
|
|
6
|
-
import type { EmojiPlugin, EmojiPluginState } from './types';
|
|
6
|
+
import type { EmojiPlugin, EmojiPluginOptions, EmojiPluginState } from './types';
|
|
7
7
|
export declare const emojiToTypeaheadItem: (emoji: EmojiDescription, emojiProvider?: EmojiProvider) => TypeAheadItem;
|
|
8
8
|
export declare function memoize<ResultFn extends (emoji: EmojiDescription, emojiProvider?: EmojiProvider) => TypeAheadItem>(fn: ResultFn): {
|
|
9
9
|
call: ResultFn;
|
|
@@ -15,14 +15,6 @@ export declare const defaultListLimit = 50;
|
|
|
15
15
|
* from `@atlaskit/editor-core`.
|
|
16
16
|
*/
|
|
17
17
|
export declare const emojiPlugin: EmojiPlugin;
|
|
18
|
-
/**
|
|
19
|
-
* Actions
|
|
20
|
-
*/
|
|
21
|
-
export declare const ACTIONS: {
|
|
22
|
-
SET_PROVIDER: string;
|
|
23
|
-
SET_RESULTS: string;
|
|
24
|
-
SET_ASCII_MAP: string;
|
|
25
|
-
};
|
|
26
18
|
/**
|
|
27
19
|
*
|
|
28
20
|
* Wrapper to call `onLimitReached` when a specified number of calls of that function
|
|
@@ -36,7 +28,8 @@ export declare const ACTIONS: {
|
|
|
36
28
|
* @returns Wrapped function
|
|
37
29
|
*/
|
|
38
30
|
export declare function createRateLimitReachedFunction<LimitedFunction extends (...args: any[]) => any>(fn: Function, limitTime: number, limitCount: number, onLimitReached: () => void): (...args: Parameters<LimitedFunction>) => ReturnType<LimitedFunction> | undefined;
|
|
31
|
+
export declare const setProviderTr: (provider?: EmojiProvider) => (tr: Transaction) => Transaction;
|
|
39
32
|
export declare const setProvider: ((provider?: EmojiProvider) => Command) | undefined;
|
|
40
33
|
export declare const emojiPluginKey: PluginKey<EmojiPluginState>;
|
|
41
34
|
export declare function getEmojiPluginState(state: EditorState): EmojiPluginState;
|
|
42
|
-
export declare function createEmojiPlugin(pmPluginFactoryParams: PMPluginFactoryParams): SafePlugin<EmojiPluginState>;
|
|
35
|
+
export declare function createEmojiPlugin(pmPluginFactoryParams: PMPluginFactoryParams, options?: EmojiPluginOptions, api?: ExtractInjectionAPI<EmojiPlugin>): SafePlugin<EmojiPluginState>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type PublicPluginAPI } from '@atlaskit/editor-common/types';
|
|
2
|
+
import { type TypeAheadHandler, type TypeAheadInputMethod } from '@atlaskit/editor-plugin-type-ahead';
|
|
3
|
+
import { type Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
4
|
+
import type { EmojiDescription, EmojiProvider } from '@atlaskit/emoji';
|
|
5
|
+
import { type EmojiPlugin } from '../types';
|
|
6
|
+
export declare const ACTIONS: {
|
|
7
|
+
SET_PROVIDER: string;
|
|
8
|
+
SET_RESULTS: string;
|
|
9
|
+
SET_ASCII_MAP: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const setAsciiMap: (asciiMap: Map<string, EmojiDescription>) => (tr: Transaction) => Transaction;
|
|
12
|
+
export declare const openTypeAhead: (typeaheadHandler: TypeAheadHandler, api?: PublicPluginAPI<EmojiPlugin>) => (inputMethod: TypeAheadInputMethod) => boolean;
|
|
13
|
+
export declare const setProvider: (provider?: EmojiProvider) => (tr: Transaction) => Transaction;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
|
|
2
2
|
import type { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
3
3
|
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
4
|
-
import type { FeatureFlags } from '@atlaskit/editor-common/types';
|
|
4
|
+
import type { ExtractInjectionAPI, FeatureFlags } from '@atlaskit/editor-common/types';
|
|
5
5
|
import type { Schema } from '@atlaskit/editor-prosemirror/model';
|
|
6
6
|
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
7
|
-
|
|
7
|
+
import { type EmojiPlugin } from '../types';
|
|
8
|
+
export declare function inputRulePlugin(schema: Schema, providerFactory: ProviderFactory, featureFlags: FeatureFlags, editorAnalyticsAPI: EditorAnalyticsAPI | undefined, pluginInjectionApi: ExtractInjectionAPI<EmojiPlugin> | undefined): SafePlugin | undefined;
|
|
8
9
|
export declare const stateKey: PluginKey<any>;
|
|
9
|
-
declare const plugins: (schema: Schema, providerFactory: ProviderFactory, featureFlags: FeatureFlags, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => SafePlugin<any>[];
|
|
10
|
+
declare const plugins: (schema: Schema, providerFactory: ProviderFactory, featureFlags: FeatureFlags, editorAnalyticsAPI: EditorAnalyticsAPI | undefined, pluginInjectionApi: ExtractInjectionAPI<EmojiPlugin> | undefined) => SafePlugin<any>[];
|
|
10
11
|
export default plugins;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -3,8 +3,11 @@ import type { EditorCommand, NextEditorPlugin, OptionalPlugin, TypeAheadHandler
|
|
|
3
3
|
import type { AnalyticsPlugin } from '@atlaskit/editor-plugin-analytics';
|
|
4
4
|
import type { TypeAheadInputMethod, TypeAheadPlugin } from '@atlaskit/editor-plugin-type-ahead';
|
|
5
5
|
import type { EmojiDescription, EmojiId, EmojiProvider, EmojiResourceConfig } from '@atlaskit/emoji';
|
|
6
|
+
import { type EmojiNodeDataProvider } from '@atlaskit/node-data-provider/emoji-provider';
|
|
6
7
|
export interface EmojiPluginOptions {
|
|
7
8
|
headless?: boolean;
|
|
9
|
+
emojiNodeDataProvider?: EmojiNodeDataProvider;
|
|
10
|
+
emojiProvider?: Promise<EmojiProvider>;
|
|
8
11
|
}
|
|
9
12
|
export type EmojiPluginState = {
|
|
10
13
|
emojiProvider?: EmojiProvider;
|
|
@@ -17,11 +20,12 @@ export type EmojiPluginSharedState = EmojiPluginState & {
|
|
|
17
20
|
export type EmojiPlugin = NextEditorPlugin<'emoji', {
|
|
18
21
|
pluginConfiguration: EmojiPluginOptions | undefined;
|
|
19
22
|
dependencies: [OptionalPlugin<AnalyticsPlugin>, TypeAheadPlugin];
|
|
20
|
-
sharedState:
|
|
23
|
+
sharedState: EmojiPluginSharedState | undefined;
|
|
21
24
|
commands: {
|
|
22
25
|
insertEmoji: (emojiId: EmojiId, inputMethod?: INPUT_METHOD.PICKER | INPUT_METHOD.ASCII | INPUT_METHOD.TYPEAHEAD) => EditorCommand;
|
|
23
26
|
};
|
|
24
27
|
actions: {
|
|
25
28
|
openTypeAhead: (inputMethod: TypeAheadInputMethod) => boolean;
|
|
29
|
+
setProvider: (provider: Promise<EmojiProvider>) => Promise<boolean>;
|
|
26
30
|
};
|
|
27
31
|
}>;
|