@atlaskit/emoji 64.2.1 → 64.4.1

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 (160) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/cjs/api/media/SiteEmojiResource.js +10 -2
  3. package/dist/cjs/components/common/CachingEmoji.js +6 -8
  4. package/dist/cjs/components/common/DeleteButton.js +9 -13
  5. package/dist/cjs/components/common/Emoji.js +18 -36
  6. package/dist/cjs/components/common/EmojiActions.js +26 -31
  7. package/dist/cjs/components/common/EmojiButton.js +7 -7
  8. package/dist/cjs/components/common/EmojiDeletePreview.js +20 -26
  9. package/dist/cjs/components/common/EmojiErrorMessage.js +10 -14
  10. package/dist/cjs/components/common/EmojiPlaceholder.js +5 -12
  11. package/dist/cjs/components/common/EmojiPreview.js +20 -40
  12. package/dist/cjs/components/common/EmojiPreviewComponent.js +34 -0
  13. package/dist/cjs/components/common/EmojiUploadPicker.js +26 -24
  14. package/dist/cjs/components/common/EmojiUploadPreview.js +22 -28
  15. package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
  16. package/dist/cjs/components/common/ResourcedEmojiComponent.js +17 -12
  17. package/dist/cjs/components/common/RetryableButton.js +12 -18
  18. package/dist/cjs/components/common/Scrollable.js +5 -10
  19. package/dist/cjs/components/common/UploadEmoji.js +8 -0
  20. package/dist/cjs/components/common/styles.js +210 -266
  21. package/dist/cjs/components/picker/CategorySelector.js +13 -12
  22. package/dist/cjs/components/picker/EmojiPicker.js +17 -6
  23. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +8 -14
  24. package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -30
  25. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +8 -12
  26. package/dist/cjs/components/picker/EmojiPickerFooter.js +8 -14
  27. package/dist/cjs/components/picker/EmojiPickerList.js +28 -9
  28. package/dist/cjs/components/picker/EmojiPickerListSearch.js +10 -8
  29. package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +9 -15
  30. package/dist/cjs/components/picker/styles.js +113 -161
  31. package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +40 -24
  32. package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +10 -13
  33. package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +17 -22
  34. package/dist/cjs/components/typeahead/styles.js +17 -19
  35. package/dist/cjs/components/uploader/EmojiUploadComponent.js +22 -15
  36. package/dist/cjs/components/uploader/styles.js +4 -4
  37. package/dist/cjs/index.js +21 -3
  38. package/dist/cjs/types.js +23 -2
  39. package/dist/cjs/util/analytics/analytics.js +11 -41
  40. package/dist/cjs/util/analytics/index.js +16 -14
  41. package/dist/cjs/util/analytics/ufoExperiences.js +48 -0
  42. package/dist/cjs/version.json +1 -1
  43. package/dist/es2019/api/media/SiteEmojiResource.js +10 -2
  44. package/dist/es2019/components/common/CachingEmoji.js +5 -7
  45. package/dist/es2019/components/common/DeleteButton.js +8 -6
  46. package/dist/es2019/components/common/Emoji.js +19 -34
  47. package/dist/es2019/components/common/EmojiActions.js +26 -24
  48. package/dist/es2019/components/common/EmojiButton.js +6 -6
  49. package/dist/es2019/components/common/EmojiDeletePreview.js +20 -20
  50. package/dist/es2019/components/common/EmojiErrorMessage.js +9 -8
  51. package/dist/es2019/components/common/EmojiPlaceholder.js +5 -8
  52. package/dist/es2019/components/common/EmojiPreview.js +19 -35
  53. package/dist/es2019/components/common/EmojiPreviewComponent.js +21 -0
  54. package/dist/es2019/components/common/EmojiUploadPicker.js +25 -22
  55. package/dist/es2019/components/common/EmojiUploadPreview.js +22 -22
  56. package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
  57. package/dist/es2019/components/common/ResourcedEmojiComponent.js +16 -11
  58. package/dist/es2019/components/common/RetryableButton.js +10 -11
  59. package/dist/es2019/components/common/Scrollable.js +6 -10
  60. package/dist/es2019/components/common/UploadEmoji.js +4 -0
  61. package/dist/es2019/components/common/styles.js +195 -262
  62. package/dist/es2019/components/picker/CategorySelector.js +15 -12
  63. package/dist/es2019/components/picker/EmojiPicker.js +15 -6
  64. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +8 -8
  65. package/dist/es2019/components/picker/EmojiPickerComponent.js +46 -22
  66. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +8 -7
  67. package/dist/es2019/components/picker/EmojiPickerFooter.js +8 -8
  68. package/dist/es2019/components/picker/EmojiPickerList.js +28 -8
  69. package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -8
  70. package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +10 -8
  71. package/dist/es2019/components/picker/styles.js +112 -160
  72. package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  73. package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +12 -13
  74. package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +18 -19
  75. package/dist/es2019/components/typeahead/styles.js +14 -15
  76. package/dist/es2019/components/uploader/EmojiUploadComponent.js +19 -9
  77. package/dist/es2019/components/uploader/styles.js +4 -4
  78. package/dist/es2019/index.js +5 -4
  79. package/dist/es2019/types.js +20 -1
  80. package/dist/es2019/util/analytics/analytics.js +16 -37
  81. package/dist/es2019/util/analytics/index.js +2 -1
  82. package/dist/es2019/util/analytics/ufoExperiences.js +35 -0
  83. package/dist/es2019/version.json +1 -1
  84. package/dist/esm/api/media/SiteEmojiResource.js +10 -2
  85. package/dist/esm/components/common/CachingEmoji.js +5 -7
  86. package/dist/esm/components/common/DeleteButton.js +8 -6
  87. package/dist/esm/components/common/Emoji.js +18 -27
  88. package/dist/esm/components/common/EmojiActions.js +26 -25
  89. package/dist/esm/components/common/EmojiButton.js +6 -6
  90. package/dist/esm/components/common/EmojiDeletePreview.js +19 -20
  91. package/dist/esm/components/common/EmojiErrorMessage.js +9 -8
  92. package/dist/esm/components/common/EmojiPlaceholder.js +5 -8
  93. package/dist/esm/components/common/EmojiPreview.js +19 -33
  94. package/dist/esm/components/common/EmojiPreviewComponent.js +20 -0
  95. package/dist/esm/components/common/EmojiUploadPicker.js +27 -25
  96. package/dist/esm/components/common/EmojiUploadPreview.js +21 -22
  97. package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
  98. package/dist/esm/components/common/ResourcedEmojiComponent.js +16 -10
  99. package/dist/esm/components/common/RetryableButton.js +11 -12
  100. package/dist/esm/components/common/Scrollable.js +6 -10
  101. package/dist/esm/components/common/UploadEmoji.js +4 -0
  102. package/dist/esm/components/common/styles.js +192 -242
  103. package/dist/esm/components/picker/CategorySelector.js +14 -12
  104. package/dist/esm/components/picker/EmojiPicker.js +13 -6
  105. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +8 -8
  106. package/dist/esm/components/picker/EmojiPickerComponent.js +47 -22
  107. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +8 -7
  108. package/dist/esm/components/picker/EmojiPickerFooter.js +8 -8
  109. package/dist/esm/components/picker/EmojiPickerList.js +29 -8
  110. package/dist/esm/components/picker/EmojiPickerListSearch.js +10 -8
  111. package/dist/esm/components/picker/EmojiPickerVirtualItems.js +9 -8
  112. package/dist/esm/components/picker/styles.js +108 -149
  113. package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  114. package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +11 -13
  115. package/dist/esm/components/typeahead/EmojiTypeAheadList.js +17 -19
  116. package/dist/esm/components/typeahead/styles.js +14 -14
  117. package/dist/esm/components/uploader/EmojiUploadComponent.js +19 -9
  118. package/dist/esm/components/uploader/styles.js +4 -4
  119. package/dist/esm/index.js +5 -4
  120. package/dist/esm/types.js +20 -1
  121. package/dist/esm/util/analytics/analytics.js +8 -33
  122. package/dist/esm/util/analytics/index.js +2 -1
  123. package/dist/esm/util/analytics/ufoExperiences.js +35 -0
  124. package/dist/esm/version.json +1 -1
  125. package/dist/types/components/common/CachingEmoji.d.ts +8 -6
  126. package/dist/types/components/common/EmojiActions.d.ts +2 -3
  127. package/dist/types/components/common/EmojiDeletePreview.d.ts +3 -3
  128. package/dist/types/components/common/EmojiErrorMessage.d.ts +2 -1
  129. package/dist/types/components/common/EmojiPreview.d.ts +2 -3
  130. package/dist/types/components/common/EmojiPreviewComponent.d.ts +7 -0
  131. package/dist/types/components/common/EmojiUploadPreview.d.ts +3 -3
  132. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +6 -0
  133. package/dist/types/components/common/RetryableButton.d.ts +0 -2
  134. package/dist/types/components/common/styles.d.ts +44 -44
  135. package/dist/types/components/picker/EmojiPicker.d.ts +2 -3
  136. package/dist/types/components/picker/EmojiPickerComponent.d.ts +6 -0
  137. package/dist/types/components/picker/EmojiPickerList.d.ts +10 -0
  138. package/dist/types/components/picker/styles.d.ts +17 -18
  139. package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +6 -0
  140. package/dist/types/components/typeahead/styles.d.ts +8 -7
  141. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
  142. package/dist/types/components/uploader/styles.d.ts +2 -2
  143. package/dist/types/index.d.ts +4 -4
  144. package/dist/types/types.d.ts +13 -0
  145. package/dist/types/util/analytics/analytics.d.ts +3 -7
  146. package/dist/types/util/analytics/index.d.ts +3 -2
  147. package/dist/types/util/analytics/ufoExperiences.d.ts +11 -0
  148. package/package.json +9 -10
  149. package/dist/cjs/components/picker/EmojiPickerPreview.js +0 -87
  150. package/dist/cjs/context/EmojiContext.js +0 -11
  151. package/dist/cjs/context/EmojiContextProvider.js +0 -22
  152. package/dist/es2019/components/picker/EmojiPickerPreview.js +0 -43
  153. package/dist/es2019/context/EmojiContext.js +0 -2
  154. package/dist/es2019/context/EmojiContextProvider.js +0 -10
  155. package/dist/esm/components/picker/EmojiPickerPreview.js +0 -67
  156. package/dist/esm/context/EmojiContext.js +0 -2
  157. package/dist/esm/context/EmojiContextProvider.js +0 -9
  158. package/dist/types/components/picker/EmojiPickerPreview.d.ts +0 -9
  159. package/dist/types/context/EmojiContext.d.ts +0 -4
  160. package/dist/types/context/EmojiContextProvider.d.ts +0 -7
@@ -1,5 +1,8 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import React from 'react';
2
+
3
+ /** @jsx jsx */
4
+ import { jsx } from '@emotion/core';
5
+ import React, { Fragment } from 'react';
3
6
  import { PureComponent } from 'react';
4
7
  import { FormattedMessage, injectIntl } from 'react-intl-next';
5
8
  import TextField from '@atlaskit/textfield';
@@ -10,7 +13,7 @@ import EmojiErrorMessage from './EmojiErrorMessage';
10
13
  import EmojiUploadPreview from './EmojiUploadPreview';
11
14
  import FileChooser from './FileChooser';
12
15
  import { UploadStatus } from './internal-types';
13
- import * as styles from './styles';
16
+ import { emojiChooseFileErrorMessage, emojiUpload, emojiUploadBottom, uploadChooseFileBrowse, uploadChooseFileEmojiName, uploadChooseFileMessage, uploadChooseFileRow } from './styles';
14
17
  const disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
15
18
 
16
19
  const sanitizeName = name => {
@@ -54,15 +57,15 @@ class ChooseEmojiFile extends PureComponent {
54
57
  const disableChooser = !name;
55
58
  const fileChooserButtonDescriptionId = 'choose.emoji.file.button.screen.reader.description.id'; // Note: FileChooser.accept does not work in Electron due to a bug: https://product-fabric.atlassian.net/browse/FS-1626
56
59
 
57
- return /*#__PURE__*/React.createElement("div", {
58
- className: styles.emojiUpload
59
- }, /*#__PURE__*/React.createElement("div", {
60
- className: styles.uploadChooseFileMessage
61
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel, message => /*#__PURE__*/React.createElement("h5", null, message))), /*#__PURE__*/React.createElement("div", {
62
- className: styles.uploadChooseFileRow
63
- }, /*#__PURE__*/React.createElement("span", {
64
- className: styles.uploadChooseFileEmojiName
65
- }, /*#__PURE__*/React.createElement(TextField, {
60
+ return jsx("div", {
61
+ css: emojiUpload
62
+ }, jsx("div", {
63
+ css: uploadChooseFileMessage
64
+ }, jsx(FormattedMessage, messages.addCustomEmojiLabel, message => jsx("h5", null, message))), jsx("div", {
65
+ css: uploadChooseFileRow
66
+ }, jsx("span", {
67
+ css: uploadChooseFileEmojiName
68
+ }, jsx(TextField, {
66
69
  placeholder: formatMessage(messages.emojiPlaceholder),
67
70
  "aria-label": formatMessage(messages.emojiNameAriaLabel),
68
71
  maxLength: maxNameLength,
@@ -71,22 +74,22 @@ class ChooseEmojiFile extends PureComponent {
71
74
  value: name,
72
75
  isCompact: true,
73
76
  autoFocus: true
74
- })), /*#__PURE__*/React.createElement("span", {
75
- className: styles.uploadChooseFileBrowse
76
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, screenReaderDescription => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
77
+ })), jsx("span", {
78
+ css: uploadChooseFileBrowse
79
+ }, jsx(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, screenReaderDescription => jsx(Fragment, null, jsx("span", {
77
80
  hidden: true,
78
81
  id: fileChooserButtonDescriptionId
79
- }, screenReaderDescription), /*#__PURE__*/React.createElement(FileChooser, {
82
+ }, screenReaderDescription), jsx(FileChooser, {
80
83
  label: formatMessage(messages.emojiChooseFileTitle),
81
84
  onChange: onChooseFile,
82
85
  onClick: onClick,
83
86
  accept: "image/png,image/jpeg,image/gif",
84
87
  ariaDescribedBy: fileChooserButtonDescriptionId,
85
88
  isDisabled: disableChooser
86
- }))))), /*#__PURE__*/React.createElement("div", {
87
- className: styles.emojiUploadBottom
88
- }, !errorMessage ? /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiImageRequirements)) : /*#__PURE__*/React.createElement(EmojiErrorMessage, {
89
- className: styles.emojiChooseFileErrorMessage,
89
+ }))))), jsx("div", {
90
+ css: emojiUploadBottom
91
+ }, !errorMessage ? jsx("p", null, jsx(FormattedMessage, messages.emojiImageRequirements)) : jsx(EmojiErrorMessage, {
92
+ messageStyles: emojiChooseFileErrorMessage,
90
93
  message: errorMessage
91
94
  })));
92
95
  }
@@ -269,7 +272,7 @@ export class EmojiUploadPicker extends PureComponent {
269
272
  };
270
273
 
271
274
  if (name && previewImage) {
272
- return /*#__PURE__*/React.createElement(EmojiUploadPreview, {
275
+ return jsx(EmojiUploadPreview, {
273
276
  errorMessage: errorMessage,
274
277
  name: name,
275
278
  onAddEmoji: this.onAddEmoji,
@@ -279,13 +282,13 @@ export class EmojiUploadPicker extends PureComponent {
279
282
  });
280
283
  }
281
284
 
282
- return /*#__PURE__*/React.createElement(ChooseEmojiFile, {
285
+ return jsx(ChooseEmojiFile, {
283
286
  name: name,
284
287
  onChooseFile: this.onChooseFile,
285
288
  onClick: this.props.onFileChooserClicked,
286
289
  onNameChange: this.onNameChange,
287
290
  onUploadCancelled: cancelUpload,
288
- errorMessage: chooseEmojiErrorMessage ? /*#__PURE__*/React.createElement(FormattedMessage, chooseEmojiErrorMessage) : undefined,
291
+ errorMessage: chooseEmojiErrorMessage ? jsx(FormattedMessage, chooseEmojiErrorMessage) : undefined,
289
292
  intl: intl
290
293
  });
291
294
  }
@@ -1,6 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+
3
+ /** @jsx jsx */
4
+ import { jsx } from '@emotion/core';
2
5
  import AkButton from '@atlaskit/button/custom-theme-button';
3
- import React from 'react';
4
6
  import { PureComponent } from 'react';
5
7
  import { FormattedMessage, injectIntl } from 'react-intl-next';
6
8
  import { customCategory } from '../../util/constants';
@@ -9,7 +11,7 @@ import Emoji from './Emoji';
9
11
  import EmojiErrorMessage from './EmojiErrorMessage';
10
12
  import { UploadStatus } from './internal-types';
11
13
  import RetryableButton from './RetryableButton';
12
- import * as styles from './styles';
14
+ import { bigEmojiPreview, cancelButton, emojiPreviewErrorMessage, uploadAddRow, uploadPreview, uploadPreviewFooter, uploadPreviewText } from './styles';
13
15
 
14
16
  class EmojiUploadPreview extends PureComponent {
15
17
  render() {
@@ -39,44 +41,42 @@ class EmojiUploadPreview extends PureComponent {
39
41
  },
40
42
  searchable: true
41
43
  };
42
- emojiComponent = /*#__PURE__*/React.createElement(Emoji, {
44
+ emojiComponent = jsx(Emoji, {
43
45
  emoji: emoji
44
46
  });
45
47
  }
46
48
 
47
49
  const uploading = uploadStatus === UploadStatus.Uploading;
48
- return /*#__PURE__*/React.createElement("div", {
49
- className: styles.uploadPreviewFooter
50
- }, /*#__PURE__*/React.createElement("div", {
51
- className: styles.uploadPreview
52
- }, /*#__PURE__*/React.createElement("div", {
53
- className: styles.uploadPreviewText
54
- }, /*#__PURE__*/React.createElement("h5", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiPreviewTitle)), /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.emojiPreview, {
50
+ return jsx("div", {
51
+ css: uploadPreviewFooter
52
+ }, jsx("div", {
53
+ css: uploadPreview
54
+ }, jsx("div", {
55
+ css: uploadPreviewText
56
+ }, jsx("h5", null, jsx(FormattedMessage, messages.emojiPreviewTitle)), jsx(FormattedMessage, _extends({}, messages.emojiPreview, {
55
57
  values: {
56
58
  emoji: emojiComponent
57
59
  }
58
- }))), /*#__PURE__*/React.createElement("div", {
59
- className: styles.bigEmojiPreview
60
- }, emojiComponent)), /*#__PURE__*/React.createElement("div", {
61
- className: styles.uploadAddRow
62
- }, !uploading && errorMessage ? /*#__PURE__*/React.createElement(EmojiErrorMessage, {
63
- className: styles.emojiPreviewErrorMessage,
60
+ }))), jsx("div", {
61
+ css: bigEmojiPreview
62
+ }, emojiComponent)), jsx("div", {
63
+ css: uploadAddRow
64
+ }, !uploading && errorMessage ? jsx(EmojiErrorMessage, {
65
+ messageStyles: emojiPreviewErrorMessage,
64
66
  message: errorMessage,
65
67
  tooltip: true
66
- }) : null, /*#__PURE__*/React.createElement(RetryableButton, {
67
- className: styles.uploadEmojiButton,
68
- retryClassName: styles.uploadRetryButton,
68
+ }) : null, jsx(RetryableButton, {
69
69
  label: formatMessage(messages.addEmojiLabel),
70
70
  onSubmit: onAddEmoji,
71
71
  appearance: "primary",
72
72
  loading: uploading,
73
73
  error: !!errorMessage
74
- }), /*#__PURE__*/React.createElement(AkButton, {
74
+ }), jsx(AkButton, {
75
75
  onClick: onUploadCancelled,
76
76
  appearance: "subtle",
77
77
  isDisabled: uploading,
78
- className: styles.cancelButton
79
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.cancelLabel))));
78
+ css: cancelButton
79
+ }, jsx(FormattedMessage, messages.cancelLabel))));
80
80
  }
81
81
 
82
82
  }
@@ -1,4 +1,4 @@
1
- import { insertionFailed, insertionSucceeded } from '../../util/analytics';
1
+ import { recordFailed, recordSucceeded, ufoExperiences } from '../../util/analytics';
2
2
 
3
3
  /**
4
4
  * A function that will wrap any configured Emoji 'onSelection' function to ensure recordSelection is always
@@ -12,7 +12,14 @@ export const createRecordSelectionDefault = (provider, onSelect, fireAnalytics)
12
12
  return (emojiId, emoji, event) => {
13
13
  try {
14
14
  if (provider.recordSelection && emoji) {
15
- provider.recordSelection(emoji).then(() => fireAnalytics && fireAnalytics(insertionSucceeded)).catch(() => fireAnalytics && fireAnalytics(insertionFailed));
15
+ ufoExperiences['emoji-selection-recorded'].start();
16
+ provider.recordSelection(emoji).then(() => {
17
+ fireAnalytics && fireAnalytics(recordSucceeded);
18
+ ufoExperiences['emoji-selection-recorded'].success();
19
+ }).catch(() => {
20
+ fireAnalytics && fireAnalytics(recordFailed);
21
+ ufoExperiences['emoji-selection-recorded'].failure();
22
+ });
16
23
  }
17
24
  } finally {
18
25
  if (onSelect) {
@@ -1,11 +1,11 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import PropTypes from 'prop-types';
2
3
  import React from 'react';
3
4
  import { Component } from 'react';
4
5
  import { defaultEmojiHeight } from '../../util/constants';
5
6
  import { isPromise } from '../../util/type-helpers';
6
7
  import CachingEmoji from './CachingEmoji';
7
8
  import EmojiPlaceholder from './EmojiPlaceholder';
8
- import { EmojiContextProvider } from '../../context/EmojiContextProvider';
9
9
  import { sampledUfoRenderedEmoji } from '../../util/analytics';
10
10
  export default class ResourcedEmojiComponent extends Component {
11
11
  constructor(props) {
@@ -19,6 +19,14 @@ export default class ResourcedEmojiComponent extends Component {
19
19
  };
20
20
  }
21
21
 
22
+ getChildContext() {
23
+ return {
24
+ emoji: {
25
+ emojiProvider: this.props.emojiProvider
26
+ }
27
+ };
28
+ }
29
+
22
30
  refreshEmoji(emojiProvider, emojiId) {
23
31
  const foundEmoji = emojiProvider.findByEmojiId(emojiId);
24
32
 
@@ -118,18 +126,15 @@ export default class ResourcedEmojiComponent extends Component {
118
126
  id,
119
127
  fallback
120
128
  } = this.props.emojiId;
121
- const emojiContextValue = {
122
- emoji: {
123
- emojiProvider: this.props.emojiProvider
124
- }
125
- };
126
- return /*#__PURE__*/React.createElement(EmojiContextProvider, {
127
- emojiContextValue: emojiContextValue
128
- }, /*#__PURE__*/React.createElement("span", {
129
+ return /*#__PURE__*/React.createElement("span", {
129
130
  "data-emoji-id": id,
130
131
  "data-emoji-short-name": shortName,
131
132
  "data-emoji-text": fallback || shortName
132
- }, element));
133
+ }, element);
133
134
  }
134
135
 
135
- }
136
+ }
137
+
138
+ _defineProperty(ResourcedEmojiComponent, "childContextTypes", {
139
+ emoji: PropTypes.object
140
+ });
@@ -1,29 +1,29 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/core';
1
3
  import AkButton from '@atlaskit/button/custom-theme-button';
2
4
  import Spinner from '@atlaskit/spinner';
3
- import React from 'react';
4
5
  import { Component } from 'react';
5
6
  import { FormattedMessage } from 'react-intl-next';
6
7
  import { messages } from '../i18n';
7
- import * as styles from './styles';
8
+ import { buttonSpinner, uploadEmojiButton, uploadRetryButton } from './styles';
8
9
  export default class RetryableButton extends Component {
9
10
  constructor(props) {
10
11
  super(props);
11
12
  }
12
13
 
13
14
  renderLoading() {
14
- return /*#__PURE__*/React.createElement("span", {
15
- className: styles.buttonSpinner
16
- }, /*#__PURE__*/React.createElement(Spinner, null));
15
+ return jsx("span", {
16
+ css: buttonSpinner
17
+ }, jsx(Spinner, null));
17
18
  }
18
19
 
19
20
  renderRetry() {
20
21
  const {
21
22
  loading,
22
- retryClassName,
23
23
  onSubmit
24
24
  } = this.props;
25
- return loading ? this.renderLoading() : /*#__PURE__*/React.createElement(FormattedMessage, messages.retryLabel, retryLabel => /*#__PURE__*/React.createElement(AkButton, {
26
- className: retryClassName,
25
+ return loading ? this.renderLoading() : jsx(FormattedMessage, messages.retryLabel, retryLabel => jsx(AkButton, {
26
+ css: uploadRetryButton,
27
27
  appearance: "warning",
28
28
  onClick: onSubmit
29
29
  }, retryLabel));
@@ -33,13 +33,12 @@ export default class RetryableButton extends Component {
33
33
  const {
34
34
  loading,
35
35
  error,
36
- className,
37
36
  appearance,
38
37
  onSubmit,
39
38
  label
40
39
  } = this.props;
41
- return error ? this.renderRetry() : loading ? this.renderLoading() : /*#__PURE__*/React.createElement(AkButton, {
42
- className: className,
40
+ return error ? this.renderRetry() : loading ? this.renderLoading() : jsx(AkButton, {
41
+ css: uploadEmojiButton,
43
42
  appearance: appearance,
44
43
  onClick: onSubmit
45
44
  }, label);
@@ -1,7 +1,8 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  // FIXME - FAB-1732 looking at making a shared component for this
3
- import classNames from 'classnames';
4
- import React from 'react';
3
+
4
+ /** @jsx jsx */
5
+ import { jsx } from '@emotion/core';
5
6
  import { PureComponent } from 'react';
6
7
  import { findDOMNode } from 'react-dom';
7
8
  import * as styles from './styles';
@@ -59,17 +60,12 @@ export default class Scrollable extends PureComponent {
59
60
  maxHeight,
60
61
  onMouseLeave
61
62
  } = this.props;
62
- const scrollableClasses = ['emoji-scrollable', styles.emojiScrollable];
63
-
64
- if (className) {
65
- scrollableClasses.push(className);
66
- }
67
-
68
63
  const style = maxHeight ? {
69
64
  maxHeight
70
65
  } : {};
71
- return /*#__PURE__*/React.createElement("div", {
72
- className: classNames(scrollableClasses),
66
+ return jsx("div", {
67
+ className: `emoji-scrollable ${className}`,
68
+ css: styles.emojiScrollable,
73
69
  onMouseLeave: onMouseLeave,
74
70
  onScroll: this.handleScroll,
75
71
  ref: this.handleRef,
@@ -1,16 +1,19 @@
1
1
  import { supportsUploadFeature } from '../../api/EmojiResource';
2
2
  import { uploadFailedEvent, uploadSucceededEvent } from '../../util/analytics';
3
3
  import { messages } from '../i18n';
4
+ import { ufoExperiences } from '../../util/analytics/ufoExperiences';
4
5
  export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) => {
5
6
  const startTime = Date.now();
6
7
  errorSetter(undefined);
7
8
 
8
9
  if (supportsUploadFeature(emojiProvider)) {
10
+ ufoExperiences['emoji-uploaded'].start();
9
11
  emojiProvider.uploadCustomEmoji(upload).then(emojiDescription => {
10
12
  fireAnalytics(uploadSucceededEvent({
11
13
  duration: Date.now() - startTime
12
14
  }));
13
15
  onSuccess(emojiDescription);
16
+ ufoExperiences['emoji-uploaded'].success();
14
17
  }).catch(err => {
15
18
  errorSetter(messages.emojiUploadFailed); // eslint-disable-next-line no-console
16
19
 
@@ -19,6 +22,7 @@ export const uploadEmoji = (upload, emojiProvider, errorSetter, onSuccess, fireA
19
22
  duration: Date.now() - startTime,
20
23
  reason: messages.emojiUploadFailed.defaultMessage
21
24
  }));
25
+ ufoExperiences['emoji-uploaded'].failure();
22
26
  });
23
27
  }
24
28
  };