@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.
Files changed (49) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/nodeviews/emoji.js +9 -0
  3. package/dist/cjs/plugin.js +94 -56
  4. package/dist/cjs/pm-plugins/actions.js +41 -0
  5. package/dist/cjs/pm-plugins/ascii-input-rules.js +19 -6
  6. package/dist/cjs/ui/Emoji/emoji-next.js +55 -0
  7. package/dist/cjs/ui/Emoji/index.js +3 -1
  8. package/dist/cjs/ui/LoadableSimpleEmoji.js +35 -0
  9. package/dist/cjs/ui/NdpEmoji.js +74 -0
  10. package/dist/cjs/ui/SimpleEmoji.js +28 -0
  11. package/dist/es2019/nodeviews/emoji.js +9 -0
  12. package/dist/es2019/plugin.js +55 -41
  13. package/dist/es2019/pm-plugins/actions.js +29 -0
  14. package/dist/es2019/pm-plugins/ascii-input-rules.js +20 -6
  15. package/dist/es2019/ui/Emoji/emoji-next.js +51 -0
  16. package/dist/es2019/ui/Emoji/index.js +3 -1
  17. package/dist/es2019/ui/LoadableSimpleEmoji.js +9 -0
  18. package/dist/es2019/ui/NdpEmoji.js +66 -0
  19. package/dist/es2019/ui/SimpleEmoji.js +22 -0
  20. package/dist/esm/nodeviews/emoji.js +9 -0
  21. package/dist/esm/plugin.js +91 -52
  22. package/dist/esm/pm-plugins/actions.js +35 -0
  23. package/dist/esm/pm-plugins/ascii-input-rules.js +19 -6
  24. package/dist/esm/ui/Emoji/emoji-next.js +48 -0
  25. package/dist/esm/ui/Emoji/index.js +3 -1
  26. package/dist/esm/ui/LoadableSimpleEmoji.js +21 -0
  27. package/dist/esm/ui/NdpEmoji.js +64 -0
  28. package/dist/esm/ui/SimpleEmoji.js +20 -0
  29. package/dist/types/nodeviews/emoji.d.ts +4 -0
  30. package/dist/types/plugin.d.ts +5 -12
  31. package/dist/types/pm-plugins/actions.d.ts +13 -0
  32. package/dist/types/pm-plugins/ascii-input-rules.d.ts +4 -3
  33. package/dist/types/types.d.ts +5 -1
  34. package/dist/types/ui/Emoji/emoji-next.d.ts +16 -0
  35. package/dist/types/ui/Emoji/index.d.ts +1 -1
  36. package/dist/types/ui/LoadableSimpleEmoji.d.ts +5 -0
  37. package/dist/types/ui/NdpEmoji.d.ts +7 -0
  38. package/dist/types/ui/SimpleEmoji.d.ts +14 -0
  39. package/dist/types-ts4.5/nodeviews/emoji.d.ts +4 -0
  40. package/dist/types-ts4.5/plugin.d.ts +5 -12
  41. package/dist/types-ts4.5/pm-plugins/actions.d.ts +13 -0
  42. package/dist/types-ts4.5/pm-plugins/ascii-input-rules.d.ts +4 -3
  43. package/dist/types-ts4.5/types.d.ts +5 -1
  44. package/dist/types-ts4.5/ui/Emoji/emoji-next.d.ts +16 -0
  45. package/dist/types-ts4.5/ui/Emoji/index.d.ts +1 -1
  46. package/dist/types-ts4.5/ui/LoadableSimpleEmoji.d.ts +5 -0
  47. package/dist/types-ts4.5/ui/NdpEmoji.d.ts +7 -0
  48. package/dist/types-ts4.5/ui/SimpleEmoji.d.ts +14 -0
  49. package/package.json +8 -4
@@ -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: function openTypeAhead(inputMethod) {
216
- var _api$typeAhead;
217
- return Boolean(api === null || api === void 0 || (_api$typeAhead = api.typeAhead) === null || _api$typeAhead === void 0 ? void 0 : _api$typeAhead.actions.open({
218
- triggerHandler: typeAhead,
219
- inputMethod: inputMethod
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(_ref9) {
228
- var formatMessage = _ref9.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$typeAhead2;
272
+ var _api$typeAhead;
240
273
  var tr = insert(undefined);
241
- api === null || api === void 0 || (_api$typeAhead2 = api.typeAhead) === null || _api$typeAhead2 === void 0 || _api$typeAhead2.actions.openAtTransaction({
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
- dispatch(state.tr.setMeta(emojiPluginKey, {
267
- action: ACTIONS.SET_ASCII_MAP,
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 setProvider = createRateLimitReachedFunction(function (provider) {
314
- return function (state, dispatch) {
315
- if (dispatch) {
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 _ref10 = tr.getMeta(emojiPluginKey) || {
367
+ var _ref11 = tr.getMeta(emojiPluginKey) || {
343
368
  action: null,
344
369
  params: null
345
370
  },
346
- action = _ref10.action,
347
- params = _ref10.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
- pmPluginFactoryParams.dispatch(emojiPluginKey, newPluginState);
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
- pmPluginFactoryParams.dispatch(emojiPluginKey, newPluginState);
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 _setProvider;
383
- return setProvider === null || setProvider === void 0 || (_setProvider = setProvider(undefined)) === null || _setProvider === void 0 ? void 0 : _setProvider(editorView.state, editorView.dispatch);
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 _setProvider2;
387
- setProvider === null || setProvider === void 0 || (_setProvider2 = setProvider(provider)) === null || _setProvider2 === void 0 || _setProvider2(editorView.state, editorView.dispatch);
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 _setProvider3;
393
- return setProvider === null || setProvider === void 0 || (_setProvider3 = setProvider(undefined)) === null || _setProvider3 === void 0 ? void 0 : _setProvider3(editorView.state, editorView.dispatch);
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
- pmPluginFactoryParams.providerFactory.subscribe('emojiProvider', providerHandler);
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 (pmPluginFactoryParams.providerFactory) {
403
- pmPluginFactoryParams.providerFactory.unsubscribe('emojiProvider', providerHandler);
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
- providerFactory.subscribe('emojiProvider', handleProvider);
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;
@@ -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
- export declare function inputRulePlugin(schema: Schema, providerFactory: ProviderFactory, featureFlags: FeatureFlags, editorAnalyticsAPI: EditorAnalyticsAPI | undefined): SafePlugin | undefined;
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;
@@ -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: Omit<EmojiPluginSharedState, 'emojiProvider'> | undefined;
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
  }>;