@atlaskit/emoji 67.1.0 → 67.2.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 (131) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/api/EmojiResource.js +29 -24
  3. package/dist/cjs/api/media/TokenManager.js +4 -4
  4. package/dist/cjs/components/common/CachingEmoji.js +14 -6
  5. package/dist/cjs/components/common/Emoji.js +48 -12
  6. package/dist/cjs/components/common/EmojiActions.js +60 -24
  7. package/dist/cjs/components/common/EmojiErrorMessage.js +12 -7
  8. package/dist/cjs/components/common/EmojiPlaceholder.js +1 -0
  9. package/dist/cjs/components/common/{EmojiButton.js → EmojiRadioButton.js} +28 -19
  10. package/dist/cjs/components/common/EmojiUploadPicker.js +80 -37
  11. package/dist/cjs/components/common/EmojiUploadPreview.js +11 -2
  12. package/dist/cjs/components/common/FileChooser.js +2 -2
  13. package/dist/cjs/components/common/ResourcedEmojiComponent.js +4 -0
  14. package/dist/cjs/components/common/RetryableButton.js +7 -3
  15. package/dist/cjs/components/common/TonePreviewButton.js +44 -0
  16. package/dist/cjs/components/common/ToneSelector.js +53 -25
  17. package/dist/cjs/components/common/styles.js +45 -16
  18. package/dist/cjs/components/i18n.js +44 -4
  19. package/dist/cjs/components/picker/CategorySelector.js +112 -90
  20. package/dist/cjs/components/picker/CategoryTracker.js +0 -28
  21. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +2 -1
  22. package/dist/cjs/components/picker/EmojiPickerComponent.js +13 -7
  23. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +32 -4
  24. package/dist/cjs/components/picker/EmojiPickerList.js +140 -51
  25. package/dist/cjs/components/picker/EmojiPickerListSearch.js +16 -3
  26. package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +5 -2
  27. package/dist/cjs/components/picker/VirtualList.js +196 -14
  28. package/dist/cjs/components/picker/styles.js +43 -51
  29. package/dist/cjs/context/EmojiPickerListContext.js +33 -0
  30. package/dist/cjs/hooks/useEmojiPickerListContext.js +12 -0
  31. package/dist/cjs/util/constants.js +40 -1
  32. package/dist/cjs/util/shared-styles.js +3 -4
  33. package/dist/cjs/version.json +1 -1
  34. package/dist/es2019/api/EmojiResource.js +29 -24
  35. package/dist/es2019/api/media/TokenManager.js +4 -4
  36. package/dist/es2019/components/common/CachingEmoji.js +10 -3
  37. package/dist/es2019/components/common/Emoji.js +44 -11
  38. package/dist/es2019/components/common/EmojiActions.js +54 -23
  39. package/dist/es2019/components/common/EmojiErrorMessage.js +7 -3
  40. package/dist/es2019/components/common/EmojiPlaceholder.js +1 -0
  41. package/dist/es2019/components/common/EmojiRadioButton.js +54 -0
  42. package/dist/es2019/components/common/EmojiUploadPicker.js +75 -36
  43. package/dist/es2019/components/common/EmojiUploadPreview.js +11 -2
  44. package/dist/es2019/components/common/FileChooser.js +1 -1
  45. package/dist/es2019/components/common/ResourcedEmojiComponent.js +4 -0
  46. package/dist/es2019/components/common/RetryableButton.js +7 -3
  47. package/dist/es2019/components/common/TonePreviewButton.js +34 -0
  48. package/dist/es2019/components/common/ToneSelector.js +55 -21
  49. package/dist/es2019/components/common/styles.js +41 -10
  50. package/dist/es2019/components/i18n.js +44 -4
  51. package/dist/es2019/components/picker/CategorySelector.js +114 -89
  52. package/dist/es2019/components/picker/CategoryTracker.js +0 -24
  53. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +2 -2
  54. package/dist/es2019/components/picker/EmojiPickerComponent.js +14 -7
  55. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +51 -21
  56. package/dist/es2019/components/picker/EmojiPickerList.js +102 -21
  57. package/dist/es2019/components/picker/EmojiPickerListSearch.js +14 -4
  58. package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +4 -1
  59. package/dist/es2019/components/picker/VirtualList.js +193 -12
  60. package/dist/es2019/components/picker/styles.js +20 -28
  61. package/dist/es2019/context/EmojiPickerListContext.js +17 -0
  62. package/dist/es2019/hooks/useEmojiPickerListContext.js +3 -0
  63. package/dist/es2019/util/constants.js +31 -0
  64. package/dist/es2019/util/shared-styles.js +1 -2
  65. package/dist/es2019/version.json +1 -1
  66. package/dist/esm/api/EmojiResource.js +29 -24
  67. package/dist/esm/api/media/TokenManager.js +4 -4
  68. package/dist/esm/components/common/CachingEmoji.js +14 -6
  69. package/dist/esm/components/common/Emoji.js +48 -12
  70. package/dist/esm/components/common/EmojiActions.js +61 -25
  71. package/dist/esm/components/common/EmojiErrorMessage.js +7 -3
  72. package/dist/esm/components/common/EmojiPlaceholder.js +1 -0
  73. package/dist/esm/components/common/EmojiRadioButton.js +52 -0
  74. package/dist/esm/components/common/EmojiUploadPicker.js +77 -36
  75. package/dist/esm/components/common/EmojiUploadPreview.js +11 -2
  76. package/dist/esm/components/common/FileChooser.js +1 -1
  77. package/dist/esm/components/common/ResourcedEmojiComponent.js +4 -0
  78. package/dist/esm/components/common/RetryableButton.js +7 -3
  79. package/dist/esm/components/common/TonePreviewButton.js +33 -0
  80. package/dist/esm/components/common/ToneSelector.js +49 -18
  81. package/dist/esm/components/common/styles.js +40 -12
  82. package/dist/esm/components/i18n.js +44 -4
  83. package/dist/esm/components/picker/CategorySelector.js +114 -95
  84. package/dist/esm/components/picker/CategoryTracker.js +0 -28
  85. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +2 -2
  86. package/dist/esm/components/picker/EmojiPickerComponent.js +13 -7
  87. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +32 -4
  88. package/dist/esm/components/picker/EmojiPickerList.js +141 -52
  89. package/dist/esm/components/picker/EmojiPickerListSearch.js +17 -4
  90. package/dist/esm/components/picker/EmojiPickerVirtualItems.js +5 -2
  91. package/dist/esm/components/picker/VirtualList.js +195 -12
  92. package/dist/esm/components/picker/styles.js +37 -45
  93. package/dist/esm/context/EmojiPickerListContext.js +21 -0
  94. package/dist/esm/hooks/useEmojiPickerListContext.js +5 -0
  95. package/dist/esm/util/constants.js +31 -0
  96. package/dist/esm/util/shared-styles.js +1 -2
  97. package/dist/esm/version.json +1 -1
  98. package/dist/types/api/EmojiResource.d.ts +2 -0
  99. package/dist/types/components/common/Emoji.d.ts +7 -1
  100. package/dist/types/components/common/EmojiActions.d.ts +3 -2
  101. package/dist/types/components/common/{EmojiButton.d.ts → EmojiRadioButton.d.ts} +3 -4
  102. package/dist/types/components/common/EmojiUploadPicker.d.ts +6 -4
  103. package/dist/types/components/common/RetryableButton.d.ts +1 -0
  104. package/dist/types/components/common/TonePreviewButton.d.ts +14 -0
  105. package/dist/types/components/common/ToneSelector.d.ts +8 -5
  106. package/dist/types/components/common/internal-types.d.ts +9 -0
  107. package/dist/types/components/common/styles.d.ts +2 -1
  108. package/dist/types/components/i18n.d.ts +40 -0
  109. package/dist/types/components/picker/CategorySelector.d.ts +3 -10
  110. package/dist/types/components/picker/CategoryTracker.d.ts +0 -2
  111. package/dist/types/components/picker/EmojiPickerCategoryHeading.d.ts +2 -1
  112. package/dist/types/components/picker/EmojiPickerEmojiRow.d.ts +5 -0
  113. package/dist/types/components/picker/EmojiPickerList.d.ts +10 -5
  114. package/dist/types/components/picker/EmojiPickerListSearch.d.ts +1 -0
  115. package/dist/types/components/picker/EmojiPickerVirtualItems.d.ts +1 -1
  116. package/dist/types/components/picker/VirtualList.d.ts +2 -0
  117. package/dist/types/components/picker/styles.d.ts +1 -1
  118. package/dist/types/context/EmojiPickerListContext.d.ts +10 -0
  119. package/dist/types/hooks/useEmojiPickerListContext.d.ts +1 -0
  120. package/dist/types/util/constants.d.ts +27 -0
  121. package/dist/types/util/shared-styles.d.ts +1 -1
  122. package/dist/types/util/type-helpers.d.ts +1 -1
  123. package/package.json +9 -6
  124. package/report.api.md +52 -1
  125. package/README.md +0 -3
  126. package/dist/es2019/components/common/EmojiButton.js +0 -49
  127. package/dist/esm/components/common/EmojiButton.js +0 -43
  128. /package/dist/cjs/{components/hooks.js → hooks/useIsMounted.js} +0 -0
  129. /package/dist/es2019/{components/hooks.js → hooks/useIsMounted.js} +0 -0
  130. /package/dist/esm/{components/hooks.js → hooks/useIsMounted.js} +0 -0
  131. /package/dist/types/{components/hooks.d.ts → hooks/useIsMounted.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 67.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`2b2aa109521`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2b2aa109521) - [ux] improve keyboard navigation in emoji picker list, improve category highlight logic in emoji picker
8
+ - [`7e3c38a86ef`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7e3c38a86ef) - [ux] [COLLAB-2264] add arrow keys support for navigating categories selctor in emoji picker, used tabs structure for emoji picker with category selctor for better accessibility, added more aria-labels for category selector and picker list panel for accessibility, highlight first category in emoji picker at start
9
+
10
+ ### Patch Changes
11
+
12
+ - [`d06e5f9c381`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d06e5f9c381) - Fixed accessibility issues in upload emoji journey flagged by axe and added accessibility tests
13
+ - [`2c650251e9a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2c650251e9a) - Improve uploading custom emoji experience for screen reader user
14
+ - [`ef218ded5ca`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ef218ded5ca) - ResourcedEmoji component will fallback when provider fails to fetch
15
+ - [`37192cbc921`](https://bitbucket.org/atlassian/atlassian-frontend/commits/37192cbc921) - Scroll and focus on newly uploaded emoji in the picker list after uploading
16
+ - [`36f471471e3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/36f471471e3) - fix scroll to category when click category in category toolbar
17
+ - [`ed20cc3d0d9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ed20cc3d0d9) - Changed 'Choose File' button in Emoji Picker to a standard button
18
+ - [`47c411e6564`](https://bitbucket.org/atlassian/atlassian-frontend/commits/47c411e6564) - [ux] [COLLAB-2281] Improve keyboard experience with tone selector, changes include allow arrow key nagivation, allow Tab key to close tone selector, focus on the selected/default tone when tone selector is expanded, focus on tone selector trigger button after closing tone selector
19
+ - [`2896c02e6cb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2896c02e6cb) - update aria attributes across emoji components to improve accessibility
20
+ - [`d4234822fb6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d4234822fb6) - [ux] Updated focus styling to align with Atlassian Design System styling
21
+ - [`221f0101322`](https://bitbucket.org/atlassian/atlassian-frontend/commits/221f0101322) - Fixes a bug where get token could be called multiple times while in flight
22
+ - [`1537683bd72`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1537683bd72) - clean up css of emoji picker
23
+ - [`73b9fda49ad`](https://bitbucket.org/atlassian/atlassian-frontend/commits/73b9fda49ad) - Fixed accessibility issues in emoji picker flagged by axe
24
+ - Updated dependencies
25
+
3
26
  ## 67.1.0
4
27
 
5
28
  ### Minor Changes
@@ -49,6 +49,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
49
49
  (0, _classCallCheck2.default)(this, EmojiResource);
50
50
  _this = _super.call(this);
51
51
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "activeLoaders", 0);
52
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "initialLoaders", 0);
52
53
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "retries", new Map());
53
54
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isInitialised", false);
54
55
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getOptimisticImageURL", function (emojiId) {
@@ -57,8 +58,11 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
57
58
  }
58
59
  return;
59
60
  });
61
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isRepositoryAvailable", function (repository) {
62
+ return !!repository;
63
+ });
60
64
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isLoaded", function () {
61
- return _this.activeLoaders === 0 && !!_this.emojiRepository;
65
+ return _this.initialLoaders !== 0 && _this.activeLoaders === 0;
62
66
  });
63
67
  _this.emojiProviderConfig = config;
64
68
  _this.recordConfig = config.recordConfig;
@@ -69,6 +73,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
69
73
  if (config.providers.length === 0) {
70
74
  throw new Error('No providers specified');
71
75
  }
76
+ _this.initialLoaders = _this.emojiProviderConfig.providers.length;
72
77
  _this.activeLoaders = _this.emojiProviderConfig.providers.length;
73
78
  _this.emojiResponses = [];
74
79
  return _this;
@@ -192,7 +197,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
192
197
  switch (_context3.prev = _context3.next) {
193
198
  case 0:
194
199
  force = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;
195
- if (!(force || !this.emojiRepository && !this.isInitialised)) {
200
+ if (!(force || !this.isRepositoryAvailable(this.emojiRepository) && !this.isInitialised)) {
196
201
  _context3.next = 6;
197
202
  break;
198
203
  }
@@ -226,7 +231,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
226
231
  while (1) {
227
232
  switch (_context4.prev = _context4.next) {
228
233
  case 0:
229
- if (!(this.emojiRepository && this.isLoaded())) {
234
+ if (!(this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository))) {
230
235
  _context4.next = 8;
231
236
  break;
232
237
  }
@@ -264,7 +269,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
264
269
  }
265
270
  return _context4.abrupt("return");
266
271
  case 17:
267
- if (this.siteEmojiResource) {
272
+ if (this.isRepositoryAvailable(this.siteEmojiResource)) {
268
273
  _context4.next = 20;
269
274
  break;
270
275
  }
@@ -334,7 +339,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
334
339
  }, {
335
340
  key: "initSiteEmojiResource",
336
341
  value: function initSiteEmojiResource(emojiResponse, provider) {
337
- if (!this.siteEmojiResource && emojiResponse.mediaApiToken) {
342
+ if (!this.isRepositoryAvailable(this.siteEmojiResource) && emojiResponse.mediaApiToken) {
338
343
  this.siteEmojiResource = new _SiteEmojiResource.default(provider, emojiResponse.mediaApiToken);
339
344
 
340
345
  // Prime cache type + optimistic rendering by checking first Emoji.
@@ -432,7 +437,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
432
437
  while (1) {
433
438
  switch (_context5.prev = _context5.next) {
434
439
  case 0:
435
- if (!(this.siteEmojiResource && (0, _typeHelpers.isMediaRepresentation)(emoji.representation))) {
440
+ if (!(this.isRepositoryAvailable(this.siteEmojiResource) && (0, _typeHelpers.isMediaRepresentation)(emoji.representation))) {
436
441
  _context5.next = 5;
437
442
  break;
438
443
  }
@@ -462,7 +467,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
462
467
  }, {
463
468
  key: "loadMediaEmoji",
464
469
  value: function loadMediaEmoji(emoji, useAlt) {
465
- if (!this.siteEmojiResource || !(0, _typeHelpers.isMediaEmoji)(emoji)) {
470
+ if (!this.isRepositoryAvailable(this.siteEmojiResource) || !(0, _typeHelpers.isMediaEmoji)(emoji)) {
466
471
  return emoji;
467
472
  }
468
473
  return this.siteEmojiResource.loadMediaEmoji(emoji, useAlt);
@@ -473,7 +478,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
473
478
  if (!(0, _typeHelpers.isMediaEmoji)(emoji)) {
474
479
  return true;
475
480
  }
476
- if (!this.siteEmojiResource) {
481
+ if (!this.isRepositoryAvailable(this.siteEmojiResource)) {
477
482
  // Shouldn't have a media emoji without a siteEmojiResouce, but anyway ;)
478
483
  return false;
479
484
  }
@@ -495,7 +500,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
495
500
  query: query,
496
501
  options: options
497
502
  };
498
- if (this.emojiRepository) {
503
+ if (this.isRepositoryAvailable(this.emojiRepository)) {
499
504
  var searchResults = this.emojiRepository.search(query, options);
500
505
  this.notifyResult(searchResults);
501
506
  _ufoExperiences.ufoExperiences['emoji-searched'].success({
@@ -513,7 +518,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
513
518
  key: "findByShortName",
514
519
  value: function findByShortName(shortName) {
515
520
  var _this4 = this;
516
- if (this.isLoaded()) {
521
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
517
522
  // Wait for all emoji to load before looking by shortName (to ensure correct priority)
518
523
  return this.emojiRepository.findByShortName(shortName);
519
524
  }
@@ -527,7 +532,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
527
532
  var _this5 = this;
528
533
  var id = emojiId.id,
529
534
  shortName = emojiId.shortName;
530
- if (this.emojiRepository) {
535
+ if (this.isRepositoryAvailable(this.emojiRepository)) {
531
536
  if (id) {
532
537
  var emoji = this.emojiRepository.findById(id);
533
538
  if (emoji) {
@@ -536,7 +541,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
536
541
  if (this.isLoaded()) {
537
542
  // all loaded but not found by id, try server to see if
538
543
  // this is a newly uploaded emoji
539
- if (this.siteEmojiResource) {
544
+ if (this.isRepositoryAvailable(this.siteEmojiResource)) {
540
545
  return this.siteEmojiResource.findEmoji(emojiId).then(function (emoji) {
541
546
  if (!emoji) {
542
547
  // if not, fallback to searching by shortName to
@@ -565,7 +570,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
565
570
  key: "findById",
566
571
  value: function findById(id) {
567
572
  var _this6 = this;
568
- if (this.isLoaded()) {
573
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
569
574
  return this.emojiRepository.findById(id);
570
575
  }
571
576
  return this.retryIfLoading(function () {
@@ -576,7 +581,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
576
581
  key: "findInCategory",
577
582
  value: function findInCategory(categoryId) {
578
583
  var _this7 = this;
579
- if (this.isLoaded()) {
584
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
580
585
  return Promise.resolve(this.emojiRepository.findInCategory(categoryId));
581
586
  }
582
587
  return this.retryIfLoading(function () {
@@ -587,7 +592,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
587
592
  key: "getAsciiMap",
588
593
  value: function getAsciiMap() {
589
594
  var _this8 = this;
590
- if (this.isLoaded()) {
595
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
591
596
  return Promise.resolve(this.emojiRepository.getAsciiMap());
592
597
  }
593
598
  return this.retryIfLoading(function () {
@@ -598,7 +603,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
598
603
  key: "getFrequentlyUsed",
599
604
  value: function getFrequentlyUsed(options) {
600
605
  var _this9 = this;
601
- if (this.isLoaded()) {
606
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
602
607
  return Promise.resolve(this.emojiRepository.getFrequentlyUsed(options));
603
608
  }
604
609
  return this.retryIfLoading(function () {
@@ -617,7 +622,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
617
622
  key: "recordSelection",
618
623
  value: function recordSelection(emoji) {
619
624
  var recordConfig = this.recordConfig;
620
- if (this.emojiRepository) {
625
+ if (this.isRepositoryAvailable(this.emojiRepository)) {
621
626
  this.emojiRepository.used(emoji);
622
627
  }
623
628
  if (recordConfig) {
@@ -638,9 +643,9 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
638
643
  key: "deleteSiteEmoji",
639
644
  value: function deleteSiteEmoji(emoji) {
640
645
  var _this10 = this;
641
- if (this.siteEmojiResource && emoji.id) {
646
+ if (this.isRepositoryAvailable(this.siteEmojiResource) && emoji.id) {
642
647
  return this.siteEmojiResource.deleteEmoji(emoji).then(function (success) {
643
- if (success && _this10.emojiRepository) {
648
+ if (success && _this10.isRepositoryAvailable(_this10.emojiRepository)) {
644
649
  _this10.emojiRepository.delete(emoji);
645
650
  return true;
646
651
  }
@@ -680,7 +685,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
680
685
  key: "calculateDynamicCategories",
681
686
  value: function calculateDynamicCategories() {
682
687
  var _this11 = this;
683
- if (this.isLoaded()) {
688
+ if (this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository)) {
684
689
  return Promise.resolve(this.emojiRepository.getDynamicCategoryList());
685
690
  }
686
691
  return this.retryIfLoading(function () {
@@ -695,7 +700,7 @@ var EmojiResource = /*#__PURE__*/function (_ref) {
695
700
  }, {
696
701
  key: "addUnknownEmoji",
697
702
  value: function addUnknownEmoji(emoji) {
698
- if (this.emojiRepository) {
703
+ if (this.isRepositoryAvailable(this.emojiRepository)) {
699
704
  this.emojiRepository.addUnknownEmoji(emoji);
700
705
  }
701
706
  }
@@ -720,7 +725,7 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
720
725
  if (!this.allowUpload) {
721
726
  return Promise.resolve(false);
722
727
  }
723
- if (this.siteEmojiResource) {
728
+ if (this.isRepositoryAvailable(this.siteEmojiResource)) {
724
729
  return this.siteEmojiResource.hasUploadToken();
725
730
  }
726
731
  return this.retryIfLoading(function () {
@@ -733,7 +738,7 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
733
738
  var _this14 = this;
734
739
  var retry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
735
740
  return this.isUploadSupported().then(function (supported) {
736
- if (!supported || !_this14.siteEmojiResource) {
741
+ if (!supported || !_this14.isRepositoryAvailable(_this14.siteEmojiResource)) {
737
742
  return Promise.reject('No media api support is configured');
738
743
  }
739
744
  return _this14.siteEmojiResource.uploadEmoji(upload, retry).then(function (emoji) {
@@ -747,7 +752,7 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
747
752
  key: "prepareForUpload",
748
753
  value: function prepareForUpload() {
749
754
  var _this15 = this;
750
- if (this.siteEmojiResource) {
755
+ if (this.isRepositoryAvailable(this.siteEmojiResource)) {
751
756
  this.siteEmojiResource.prepareForUpload();
752
757
  }
753
758
  return this.retryIfLoading(function () {
@@ -57,10 +57,10 @@ var TokenManager = /*#__PURE__*/function () {
57
57
  // still valid
58
58
  return Promise.resolve(mediaApiToken);
59
59
  }
60
- if (activeTokenRefresh) {
61
- // refresh token promise already active, return that
62
- return activeTokenRefresh;
63
- }
60
+ }
61
+ if (activeTokenRefresh) {
62
+ // refresh token promise already active, return that
63
+ return activeTokenRefresh;
64
64
  }
65
65
 
66
66
  // request a new token and track the promise for future requests until completed
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = exports.CachingMediaEmoji = exports.CachingEmoji = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  var _typeHelpers = require("../../util/type-helpers");
@@ -21,7 +21,8 @@ var _constants = require("../../util/constants");
21
21
  var _ufoExperiences = require("../../util/analytics/ufoExperiences");
22
22
  var _useEmoji2 = require("../../hooks/useEmoji");
23
23
  var _analytics2 = require("../../util/analytics/analytics");
24
- var _excluded = ["emoji", "placeholderSize", "showTooltip", "fitToHeight", "children"];
24
+ var _excluded = ["emoji", "placeholderSize"],
25
+ _excluded2 = ["emoji", "placeholderSize", "showTooltip", "fitToHeight", "children"];
25
26
  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); }
26
27
  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; }
27
28
  /**
@@ -30,7 +31,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
30
31
  var CachingEmoji = function CachingEmoji(props) {
31
32
  // Optimisation to only render CachingMediaEmoji if necessary
32
33
  // slight performance hit, which accumulates for a large number of emoji.
33
- var emoji = props.emoji;
34
+ var emoji = props.emoji,
35
+ placeholderSize = props.placeholderSize,
36
+ restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
34
37
  // start emoji rendered experience, it may have already started earlier in `ResourcedEmoji`.
35
38
  (0, _analytics.useSampledUFOComponentExperience)(_analytics.ufoExperiences['emoji-rendered'].getInstance(emoji.id || emoji.shortName), _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP, {
36
39
  source: 'CachingEmoji',
@@ -44,9 +47,14 @@ var CachingEmoji = function CachingEmoji(props) {
44
47
  }, []);
45
48
  var emojiNode = function emojiNode() {
46
49
  if ((0, _typeHelpers.isMediaEmoji)(emoji)) {
47
- return /*#__PURE__*/_react.default.createElement(CachingMediaEmoji, props);
50
+ return /*#__PURE__*/_react.default.createElement(CachingMediaEmoji, (0, _extends2.default)({
51
+ emoji: emoji,
52
+ placeholderSize: placeholderSize
53
+ }, restProps));
48
54
  }
49
- return /*#__PURE__*/_react.default.createElement(_Emoji.default, props);
55
+ return /*#__PURE__*/_react.default.createElement(_Emoji.default, (0, _extends2.default)({
56
+ emoji: emoji
57
+ }, restProps));
50
58
  };
51
59
  return /*#__PURE__*/_react.default.createElement(_UfoErrorBoundary.UfoErrorBoundary, {
52
60
  experiences: [_analytics.ufoExperiences['emoji-rendered'].getInstance(props.emoji.id || props.emoji.shortName)]
@@ -64,7 +72,7 @@ var CachingMediaEmoji = function CachingMediaEmoji(props) {
64
72
  showTooltip = props.showTooltip,
65
73
  fitToHeight = props.fitToHeight,
66
74
  children = props.children,
67
- restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
75
+ restProps = (0, _objectWithoutProperties2.default)(props, _excluded2);
68
76
  var shortName = emoji.shortName,
69
77
  representation = emoji.representation;
70
78
  var _useState = (0, _react.useState)(),
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = exports.SpriteEmoji = exports.ImageEmoji = exports.Emoji = void 0;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
13
  var _react = _interopRequireWildcard(require("react"));
13
14
  var _react2 = require("@emotion/react");
14
15
  var _EmojiUtils = require("../../api/EmojiUtils");
@@ -22,6 +23,8 @@ var _analytics = require("../../util/analytics");
22
23
  var _browserSupport = require("../../util/browser-support");
23
24
  var _useInView3 = require("../../util/useInView");
24
25
  var _ufoExperiences = require("../../util/analytics/ufoExperiences");
26
+ var _excluded = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "showDelete", "disableLazyLoad", "autoWidth"],
27
+ _excluded2 = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "showDelete", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "disableLazyLoad", "autoWidth"];
25
28
  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); }
26
29
  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; }
27
30
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -57,6 +60,13 @@ var handleMouseMove = function handleMouseMove(props, event) {
57
60
  onMouseMove((0, _typeHelpers.toEmojiId)(emoji), emoji, event);
58
61
  }
59
62
  };
63
+ var handleFocus = function handleFocus(props, event) {
64
+ var emoji = props.emoji,
65
+ onFocus = props.onFocus;
66
+ if (onFocus) {
67
+ onFocus((0, _typeHelpers.toEmojiId)(emoji), emoji, event);
68
+ }
69
+ };
60
70
  var handleDelete = function handleDelete(props, event) {
61
71
  var emoji = props.emoji,
62
72
  onDelete = props.onDelete;
@@ -88,7 +98,19 @@ var SpriteEmoji = function SpriteEmoji(props) {
88
98
  selectOnHover = props.selectOnHover,
89
99
  className = props.className,
90
100
  showTooltip = props.showTooltip,
91
- shouldBeInteractive = props.shouldBeInteractive;
101
+ _props$shouldBeIntera = props.shouldBeInteractive,
102
+ shouldBeInteractive = _props$shouldBeIntera === void 0 ? false : _props$shouldBeIntera,
103
+ tabIndex = props.tabIndex,
104
+ onSelected = props.onSelected,
105
+ onMouseMove = props.onMouseMove,
106
+ onFocus = props.onFocus,
107
+ onDelete = props.onDelete,
108
+ onLoadError = props.onLoadError,
109
+ onLoadSuccess = props.onLoadSuccess,
110
+ showDelete = props.showDelete,
111
+ disableLazyLoad = props.disableLazyLoad,
112
+ autoWidth = props.autoWidth,
113
+ other = (0, _objectWithoutProperties2.default)(props, _excluded);
92
114
  var representation = emoji.representation;
93
115
  var sprite = representation.sprite;
94
116
  var classes = "".concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(className ? className : '');
@@ -108,11 +130,11 @@ var SpriteEmoji = function SpriteEmoji(props) {
108
130
  backgroundPosition: "".concat(xPositionInPercent, "% ").concat(yPositionInPercent, "%"),
109
131
  backgroundSize: "".concat(sprite.column * 100, "% ").concat(sprite.row * 100, "%")
110
132
  }, sizing);
111
- return (0, _react2.jsx)("span", {
133
+ return (0, _react2.jsx)("span", (0, _extends2.default)({
112
134
  "data-testid": "sprite-emoji-".concat(emoji.shortName),
113
135
  "data-emoji-type": "sprite",
114
- tabIndex: shouldBeInteractive ? 0 : undefined,
115
- role: shouldBeInteractive ? 'button' : undefined,
136
+ tabIndex: shouldBeInteractive ? tabIndex || 0 : undefined,
137
+ role: shouldBeInteractive ? 'button' : 'img',
116
138
  css: _styles.emojiContainer,
117
139
  className: classes,
118
140
  onKeyPress: function onKeyPress(event) {
@@ -124,9 +146,12 @@ var SpriteEmoji = function SpriteEmoji(props) {
124
146
  onMouseEnter: function onMouseEnter(event) {
125
147
  handleMouseMove(props, event);
126
148
  },
149
+ onFocus: function onFocus(event) {
150
+ handleFocus(props, event);
151
+ },
127
152
  "aria-label": emoji.shortName,
128
153
  title: showTooltip ? emoji.shortName : ''
129
- }, (0, _react2.jsx)("span", {
154
+ }, other), (0, _react2.jsx)("span", {
130
155
  className: _styles.emojiSprite,
131
156
  style: style
132
157
  }, "\xA0"));
@@ -142,10 +167,18 @@ var ImageEmoji = function ImageEmoji(props) {
142
167
  className = props.className,
143
168
  showTooltip = props.showTooltip,
144
169
  showDelete = props.showDelete,
145
- shouldBeInteractive = props.shouldBeInteractive,
170
+ _props$shouldBeIntera2 = props.shouldBeInteractive,
171
+ shouldBeInteractive = _props$shouldBeIntera2 === void 0 ? false : _props$shouldBeIntera2,
172
+ tabIndex = props.tabIndex,
173
+ onSelected = props.onSelected,
174
+ onMouseMove = props.onMouseMove,
175
+ onFocus = props.onFocus,
176
+ onDelete = props.onDelete,
177
+ onLoadError = props.onLoadError,
146
178
  onLoadSuccess = props.onLoadSuccess,
147
179
  disableLazyLoad = props.disableLazyLoad,
148
- autoWidth = props.autoWidth;
180
+ autoWidth = props.autoWidth,
181
+ other = (0, _objectWithoutProperties2.default)(props, _excluded2);
149
182
  var _useInView = (0, _useInView3.useInView)({
150
183
  triggerOnce: true
151
184
  }),
@@ -243,12 +276,12 @@ var ImageEmoji = function ImageEmoji(props) {
243
276
  onError: onError,
244
277
  onLoad: onLoad
245
278
  }, sizing));
246
- return (0, _react2.jsx)("span", {
279
+ return (0, _react2.jsx)("span", (0, _extends2.default)({
247
280
  "data-testid": "image-emoji-".concat(emoji.shortName),
248
281
  "data-emoji-type": "image",
249
282
  css: _styles.emojiStyles,
250
- tabIndex: shouldBeInteractive ? 0 : undefined,
251
- role: shouldBeInteractive ? 'button' : undefined,
283
+ tabIndex: shouldBeInteractive ? tabIndex || 0 : undefined,
284
+ role: shouldBeInteractive ? 'button' : 'img',
252
285
  className: classes,
253
286
  onKeyPress: function onKeyPress(event) {
254
287
  return handleKeyPress(props, event);
@@ -259,10 +292,13 @@ var ImageEmoji = function ImageEmoji(props) {
259
292
  onMouseEnter: function onMouseEnter(event) {
260
293
  handleMouseMove(props, event);
261
294
  },
295
+ onFocus: function onFocus(event) {
296
+ handleFocus(props, event);
297
+ },
262
298
  "aria-label": emoji.shortName,
263
299
  title: showTooltip ? emoji.shortName : '',
264
300
  ref: ref
265
- }, deleteButton, emojiNode);
301
+ }, other), deleteButton, emojiNode);
266
302
  };
267
303
  exports.ImageEmoji = ImageEmoji;
268
304
  var Emoji = function Emoji(props) {
@@ -14,13 +14,14 @@ var _EmojiDeletePreview = _interopRequireDefault(require("../common/EmojiDeleteP
14
14
  var _EmojiUploadPicker = _interopRequireDefault(require("../common/EmojiUploadPicker"));
15
15
  var _EmojiPickerListSearch = require("../picker/EmojiPickerListSearch");
16
16
  var _ToneSelector = _interopRequireDefault(require("./ToneSelector"));
17
- var _EmojiButton = _interopRequireDefault(require("./EmojiButton"));
17
+ var _TonePreviewButton = _interopRequireDefault(require("./TonePreviewButton"));
18
18
  var _i18n = require("../i18n");
19
19
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
20
20
  var _add = _interopRequireDefault(require("@atlaskit/icon/glyph/add"));
21
21
  var _setSkinToneAriaLabelText = require("./setSkinToneAriaLabelText");
22
22
  var _styles = require("./styles");
23
23
  var _styles2 = require("../picker/styles");
24
+ var _constants = require("../../util/constants");
24
25
  /** @jsx jsx */
25
26
 
26
27
  var emojiActionsTestId = 'emoji-actions';
@@ -31,8 +32,7 @@ var uploadEmojiTestId = 'upload-emoji';
31
32
  exports.uploadEmojiTestId = uploadEmojiTestId;
32
33
  var AddOwnEmoji = function AddOwnEmoji(props) {
33
34
  var onOpenUpload = props.onOpenUpload,
34
- uploadEnabled = props.uploadEnabled,
35
- formatMessage = props.intl.formatMessage;
35
+ uploadEnabled = props.uploadEnabled;
36
36
  return (0, _react2.jsx)(_react.Fragment, null, uploadEnabled && (0, _react2.jsx)("div", {
37
37
  css: _styles.addCustomEmoji,
38
38
  "data-testid": uploadEmojiTestId
@@ -40,44 +40,73 @@ var AddOwnEmoji = function AddOwnEmoji(props) {
40
40
  return (0, _react2.jsx)(_standardButton.default, {
41
41
  onClick: onOpenUpload,
42
42
  iconBefore: (0, _react2.jsx)(_add.default, {
43
- label: formatMessage(_i18n.messages.addCustomEmojiLabel),
43
+ label: "",
44
44
  size: "small"
45
45
  }),
46
46
  appearance: "subtle",
47
47
  css: _styles.addCustomEmojiButton,
48
- className: _styles.emojiPickerAddEmoji
48
+ className: _styles.emojiPickerAddEmoji,
49
+ tabIndex: 0,
50
+ id: "add-custom-emoji"
49
51
  }, label);
50
52
  })));
51
53
  };
52
54
  var TonesWrapper = function TonesWrapper(props) {
53
55
  var toneEmoji = props.toneEmoji,
54
- selectedTone = props.selectedTone,
56
+ _props$selectedTone = props.selectedTone,
57
+ selectedTone = _props$selectedTone === void 0 ? _constants.DEFAULT_TONE : _props$selectedTone,
55
58
  intl = props.intl,
56
- onToneSelected = props.onToneSelected,
57
59
  onToneOpen = props.onToneOpen,
58
60
  showToneSelector = props.showToneSelector;
59
61
  var formatMessage = intl.formatMessage;
62
+ var tonePreviewButtonRef = (0, _react.useRef)(null);
63
+ var _useState = (0, _react.useState)(false),
64
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
65
+ focusTonePreviewButton = _useState2[0],
66
+ setFocusTonePreviewButton = _useState2[1];
67
+ (0, _react.useEffect)(function () {
68
+ if (focusTonePreviewButton && tonePreviewButtonRef.current) {
69
+ tonePreviewButtonRef.current.focus();
70
+ }
71
+ return function () {
72
+ setFocusTonePreviewButton(false);
73
+ };
74
+ });
75
+ var onToneCloseHandler = function onToneCloseHandler() {
76
+ var onToneClose = props.onToneClose;
77
+ onToneClose();
78
+ setFocusTonePreviewButton(true);
79
+ };
80
+ var onToneSelectedHandler = function onToneSelectedHandler(toneValue) {
81
+ var onToneSelected = props.onToneSelected;
82
+ onToneSelected(toneValue);
83
+ setFocusTonePreviewButton(true);
84
+ };
60
85
  if (!toneEmoji) {
61
86
  return null;
62
87
  }
63
- var previewEmoji = toneEmoji;
64
- if (selectedTone && previewEmoji.skinVariations) {
65
- previewEmoji = previewEmoji.skinVariations[(selectedTone || 1) - 1];
88
+ var previewToneEmoji = toneEmoji;
89
+ if (selectedTone !== _constants.DEFAULT_TONE && previewToneEmoji.skinVariations) {
90
+ previewToneEmoji = previewToneEmoji.skinVariations[selectedTone - 1];
66
91
  }
67
92
  return (0, _react2.jsx)("div", {
68
93
  css: _styles.emojiToneSelectorContainer
69
- }, showToneSelector && (0, _react2.jsx)(_ToneSelector.default, {
94
+ }, (0, _react2.jsx)(_ToneSelector.default, {
70
95
  emoji: toneEmoji,
71
- onToneSelected: onToneSelected,
72
- previewEmojiId: previewEmoji.id
73
- }), (0, _react2.jsx)(_EmojiButton.default, {
96
+ onToneSelected: onToneSelectedHandler,
97
+ onToneClose: onToneCloseHandler,
98
+ selectedTone: selectedTone,
99
+ isVisible: showToneSelector
100
+ }), (0, _react2.jsx)(_TonePreviewButton.default, {
101
+ ref: tonePreviewButtonRef,
74
102
  ariaExpanded: showToneSelector,
75
- emoji: previewEmoji,
103
+ emoji: previewToneEmoji,
76
104
  selectOnHover: true,
77
105
  onSelected: onToneOpen,
78
106
  ariaLabelText: formatMessage(_i18n.messages.emojiSelectSkinToneButtonAriaLabelText, {
79
- selectedTone: "".concat((0, _setSkinToneAriaLabelText.setSkinToneAriaLabelText)(previewEmoji.name), " selected")
80
- })
107
+ selectedTone: "".concat((0, _setSkinToneAriaLabelText.setSkinToneAriaLabelText)(previewToneEmoji.name))
108
+ }),
109
+ isVisible: !showToneSelector
81
110
  }));
82
111
  };
83
112
  var EmojiActions = function EmojiActions(props) {
@@ -93,15 +122,20 @@ var EmojiActions = function EmojiActions(props) {
93
122
  onFileChooserClicked = props.onFileChooserClicked,
94
123
  emojiToDelete = props.emojiToDelete,
95
124
  onChange = props.onChange,
96
- query = props.query;
97
- var _useState = (0, _react.useState)(false),
98
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
99
- showToneSelector = _useState2[0],
100
- setShowToneSelector = _useState2[1];
125
+ query = props.query,
126
+ _props$resultsCount = props.resultsCount,
127
+ resultsCount = _props$resultsCount === void 0 ? 0 : _props$resultsCount;
128
+ var _useState3 = (0, _react.useState)(false),
129
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
130
+ showToneSelector = _useState4[0],
131
+ setShowToneSelector = _useState4[1];
101
132
  var previewFooterClassnames = [_styles2.emojiPickerFooter, _styles2.emojiActionsContainerWithBottomShadow];
102
133
  var onToneOpenHandler = function onToneOpenHandler() {
103
134
  return setShowToneSelector(true);
104
135
  };
136
+ var onToneCloseHandler = function onToneCloseHandler() {
137
+ return setShowToneSelector(false);
138
+ };
105
139
  var onToneSelectedHandler = function onToneSelectedHandler(toneValue) {
106
140
  setShowToneSelector(false);
107
141
  if (onToneSelected) {
@@ -142,13 +176,15 @@ var EmojiActions = function EmojiActions(props) {
142
176
  css: _styles.emojiActionsWrapper
143
177
  }, !showToneSelector && (0, _react2.jsx)(_EmojiPickerListSearch.EmojiPickerListSearch, {
144
178
  onChange: onChange,
145
- query: query
179
+ query: query,
180
+ resultsCount: resultsCount
146
181
  }), (0, _react2.jsx)(TonesWrapper, (0, _extends2.default)({}, props, {
147
182
  onToneOpen: onToneOpenHandler,
183
+ onToneClose: onToneCloseHandler,
148
184
  onToneSelected: onToneSelectedHandler,
149
185
  showToneSelector: showToneSelector
150
186
  }))), (0, _react2.jsx)(AddOwnEmoji, props));
151
187
  };
152
188
  exports.EmojiActions = EmojiActions;
153
- var _default = (0, _reactIntlNext.injectIntl)(EmojiActions);
189
+ var _default = (0, _reactIntlNext.injectIntl)( /*#__PURE__*/(0, _react.memo)(EmojiActions));
154
190
  exports.default = _default;