@atlaskit/emoji 64.2.0 → 64.4.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 (184) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/cjs/api/EmojiResource.js +36 -1
  3. package/dist/cjs/api/media/SiteEmojiResource.js +10 -2
  4. package/dist/cjs/components/common/CachingEmoji.js +38 -12
  5. package/dist/cjs/components/common/DeleteButton.js +9 -13
  6. package/dist/cjs/components/common/Emoji.js +25 -36
  7. package/dist/cjs/components/common/EmojiActions.js +26 -31
  8. package/dist/cjs/components/common/EmojiButton.js +7 -7
  9. package/dist/cjs/components/common/EmojiDeletePreview.js +20 -26
  10. package/dist/cjs/components/common/EmojiErrorMessage.js +10 -14
  11. package/dist/cjs/components/common/EmojiPlaceholder.js +5 -12
  12. package/dist/cjs/components/common/EmojiPreview.js +20 -40
  13. package/dist/cjs/components/common/EmojiPreviewComponent.js +34 -0
  14. package/dist/cjs/components/common/EmojiUploadPicker.js +26 -24
  15. package/dist/cjs/components/common/EmojiUploadPreview.js +22 -28
  16. package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
  17. package/dist/cjs/components/common/ResourcedEmoji.js +25 -9
  18. package/dist/cjs/components/common/ResourcedEmojiComponent.js +33 -11
  19. package/dist/cjs/components/common/RetryableButton.js +12 -18
  20. package/dist/cjs/components/common/Scrollable.js +5 -10
  21. package/dist/cjs/components/common/UfoErrorBoundary.js +52 -0
  22. package/dist/cjs/components/common/UploadEmoji.js +8 -0
  23. package/dist/cjs/components/common/styles.js +210 -266
  24. package/dist/cjs/components/picker/CategorySelector.js +13 -12
  25. package/dist/cjs/components/picker/EmojiPicker.js +17 -6
  26. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +8 -14
  27. package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -30
  28. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +8 -12
  29. package/dist/cjs/components/picker/EmojiPickerFooter.js +8 -14
  30. package/dist/cjs/components/picker/EmojiPickerList.js +28 -9
  31. package/dist/cjs/components/picker/EmojiPickerListSearch.js +10 -8
  32. package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +9 -15
  33. package/dist/cjs/components/picker/styles.js +113 -161
  34. package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +40 -24
  35. package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +10 -13
  36. package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +17 -22
  37. package/dist/cjs/components/typeahead/styles.js +17 -19
  38. package/dist/cjs/components/uploader/EmojiUploadComponent.js +22 -15
  39. package/dist/cjs/components/uploader/styles.js +4 -4
  40. package/dist/cjs/index.js +9 -3
  41. package/dist/cjs/types.js +12 -2
  42. package/dist/cjs/util/{analytics.js → analytics/analytics.js} +12 -10
  43. package/dist/cjs/util/analytics/index.js +205 -0
  44. package/dist/cjs/util/analytics/samplingUfo.js +278 -0
  45. package/dist/cjs/util/analytics/ufoExperiences.js +46 -0
  46. package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +49 -0
  47. package/dist/cjs/util/constants.js +10 -3
  48. package/dist/cjs/version.json +1 -1
  49. package/dist/es2019/api/EmojiResource.js +28 -1
  50. package/dist/es2019/api/media/SiteEmojiResource.js +10 -2
  51. package/dist/es2019/components/common/CachingEmoji.js +34 -12
  52. package/dist/es2019/components/common/DeleteButton.js +8 -6
  53. package/dist/es2019/components/common/Emoji.js +27 -36
  54. package/dist/es2019/components/common/EmojiActions.js +26 -24
  55. package/dist/es2019/components/common/EmojiButton.js +6 -6
  56. package/dist/es2019/components/common/EmojiDeletePreview.js +20 -20
  57. package/dist/es2019/components/common/EmojiErrorMessage.js +9 -8
  58. package/dist/es2019/components/common/EmojiPlaceholder.js +5 -8
  59. package/dist/es2019/components/common/EmojiPreview.js +19 -35
  60. package/dist/es2019/components/common/EmojiPreviewComponent.js +21 -0
  61. package/dist/es2019/components/common/EmojiUploadPicker.js +25 -22
  62. package/dist/es2019/components/common/EmojiUploadPreview.js +22 -22
  63. package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
  64. package/dist/es2019/components/common/ResourcedEmoji.js +22 -5
  65. package/dist/es2019/components/common/ResourcedEmojiComponent.js +32 -11
  66. package/dist/es2019/components/common/RetryableButton.js +10 -11
  67. package/dist/es2019/components/common/Scrollable.js +6 -10
  68. package/dist/es2019/components/common/UfoErrorBoundary.js +11 -0
  69. package/dist/es2019/components/common/UploadEmoji.js +4 -0
  70. package/dist/es2019/components/common/styles.js +195 -262
  71. package/dist/es2019/components/picker/CategorySelector.js +15 -12
  72. package/dist/es2019/components/picker/EmojiPicker.js +15 -6
  73. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +8 -8
  74. package/dist/es2019/components/picker/EmojiPickerComponent.js +46 -22
  75. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +8 -7
  76. package/dist/es2019/components/picker/EmojiPickerFooter.js +8 -8
  77. package/dist/es2019/components/picker/EmojiPickerList.js +28 -8
  78. package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -8
  79. package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +10 -8
  80. package/dist/es2019/components/picker/styles.js +112 -160
  81. package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  82. package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +12 -13
  83. package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +18 -19
  84. package/dist/es2019/components/typeahead/styles.js +14 -15
  85. package/dist/es2019/components/uploader/EmojiUploadComponent.js +19 -9
  86. package/dist/es2019/components/uploader/styles.js +4 -4
  87. package/dist/es2019/index.js +4 -3
  88. package/dist/es2019/types.js +10 -1
  89. package/dist/es2019/util/{analytics.js → analytics/analytics.js} +17 -11
  90. package/dist/es2019/util/analytics/index.js +4 -0
  91. package/dist/es2019/util/analytics/samplingUfo.js +147 -0
  92. package/dist/es2019/util/analytics/ufoExperiences.js +34 -0
  93. package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +39 -0
  94. package/dist/es2019/util/constants.js +5 -1
  95. package/dist/es2019/version.json +1 -1
  96. package/dist/esm/api/EmojiResource.js +32 -1
  97. package/dist/esm/api/media/SiteEmojiResource.js +10 -2
  98. package/dist/esm/components/common/CachingEmoji.js +36 -12
  99. package/dist/esm/components/common/DeleteButton.js +8 -6
  100. package/dist/esm/components/common/Emoji.js +26 -29
  101. package/dist/esm/components/common/EmojiActions.js +26 -25
  102. package/dist/esm/components/common/EmojiButton.js +6 -6
  103. package/dist/esm/components/common/EmojiDeletePreview.js +19 -20
  104. package/dist/esm/components/common/EmojiErrorMessage.js +9 -8
  105. package/dist/esm/components/common/EmojiPlaceholder.js +5 -8
  106. package/dist/esm/components/common/EmojiPreview.js +19 -33
  107. package/dist/esm/components/common/EmojiPreviewComponent.js +20 -0
  108. package/dist/esm/components/common/EmojiUploadPicker.js +27 -25
  109. package/dist/esm/components/common/EmojiUploadPreview.js +21 -22
  110. package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
  111. package/dist/esm/components/common/ResourcedEmoji.js +22 -9
  112. package/dist/esm/components/common/ResourcedEmojiComponent.js +32 -10
  113. package/dist/esm/components/common/RetryableButton.js +11 -12
  114. package/dist/esm/components/common/Scrollable.js +6 -10
  115. package/dist/esm/components/common/UfoErrorBoundary.js +38 -0
  116. package/dist/esm/components/common/UploadEmoji.js +4 -0
  117. package/dist/esm/components/common/styles.js +192 -242
  118. package/dist/esm/components/picker/CategorySelector.js +14 -12
  119. package/dist/esm/components/picker/EmojiPicker.js +13 -6
  120. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +8 -8
  121. package/dist/esm/components/picker/EmojiPickerComponent.js +47 -22
  122. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +8 -7
  123. package/dist/esm/components/picker/EmojiPickerFooter.js +8 -8
  124. package/dist/esm/components/picker/EmojiPickerList.js +29 -8
  125. package/dist/esm/components/picker/EmojiPickerListSearch.js +10 -8
  126. package/dist/esm/components/picker/EmojiPickerVirtualItems.js +9 -8
  127. package/dist/esm/components/picker/styles.js +108 -149
  128. package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +35 -17
  129. package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +11 -13
  130. package/dist/esm/components/typeahead/EmojiTypeAheadList.js +17 -19
  131. package/dist/esm/components/typeahead/styles.js +14 -14
  132. package/dist/esm/components/uploader/EmojiUploadComponent.js +19 -9
  133. package/dist/esm/components/uploader/styles.js +4 -4
  134. package/dist/esm/index.js +4 -3
  135. package/dist/esm/types.js +10 -1
  136. package/dist/esm/util/{analytics.js → analytics/analytics.js} +9 -7
  137. package/dist/esm/util/analytics/index.js +4 -0
  138. package/dist/esm/util/analytics/samplingUfo.js +259 -0
  139. package/dist/esm/util/analytics/ufoExperiences.js +34 -0
  140. package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +39 -0
  141. package/dist/esm/util/constants.js +5 -1
  142. package/dist/esm/version.json +1 -1
  143. package/dist/types/api/EmojiResource.d.ts +1 -0
  144. package/dist/types/components/common/CachingEmoji.d.ts +8 -6
  145. package/dist/types/components/common/EmojiActions.d.ts +2 -3
  146. package/dist/types/components/common/EmojiDeletePreview.d.ts +3 -3
  147. package/dist/types/components/common/EmojiErrorMessage.d.ts +2 -1
  148. package/dist/types/components/common/EmojiPreview.d.ts +2 -3
  149. package/dist/types/components/common/EmojiPreviewComponent.d.ts +7 -0
  150. package/dist/types/components/common/EmojiUploadPreview.d.ts +3 -3
  151. package/dist/types/components/common/ResourcedEmoji.d.ts +2 -0
  152. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +6 -0
  153. package/dist/types/components/common/RetryableButton.d.ts +0 -2
  154. package/dist/types/components/common/UfoErrorBoundary.d.ts +8 -0
  155. package/dist/types/components/common/styles.d.ts +44 -44
  156. package/dist/types/components/picker/EmojiPicker.d.ts +2 -3
  157. package/dist/types/components/picker/EmojiPickerComponent.d.ts +6 -0
  158. package/dist/types/components/picker/EmojiPickerList.d.ts +10 -0
  159. package/dist/types/components/picker/styles.d.ts +17 -18
  160. package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +6 -0
  161. package/dist/types/components/typeahead/styles.d.ts +8 -7
  162. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
  163. package/dist/types/components/uploader/styles.d.ts +2 -2
  164. package/dist/types/index.d.ts +3 -3
  165. package/dist/types/types.d.ts +6 -0
  166. package/dist/types/util/{analytics.d.ts → analytics/analytics.d.ts} +7 -7
  167. package/dist/types/util/analytics/index.d.ts +6 -0
  168. package/dist/types/util/analytics/samplingUfo.d.ts +31 -0
  169. package/dist/types/util/analytics/ufoExperiences.d.ts +12 -0
  170. package/dist/types/util/analytics/useSampledUFOComponentExperience.d.ts +8 -0
  171. package/dist/types/util/constants.d.ts +2 -0
  172. package/package.json +10 -9
  173. package/dist/cjs/components/picker/EmojiPickerPreview.js +0 -87
  174. package/dist/cjs/context/EmojiContext.js +0 -11
  175. package/dist/cjs/context/EmojiContextProvider.js +0 -22
  176. package/dist/es2019/components/picker/EmojiPickerPreview.js +0 -43
  177. package/dist/es2019/context/EmojiContext.js +0 -2
  178. package/dist/es2019/context/EmojiContextProvider.js +0 -10
  179. package/dist/esm/components/picker/EmojiPickerPreview.js +0 -67
  180. package/dist/esm/context/EmojiContext.js +0 -2
  181. package/dist/esm/context/EmojiContextProvider.js +0 -9
  182. package/dist/types/components/picker/EmojiPickerPreview.d.ts +0 -9
  183. package/dist/types/context/EmojiContext.d.ts +0 -4
  184. package/dist/types/context/EmojiContextProvider.d.ts +0 -7
@@ -10,7 +10,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
10
10
 
11
11
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
12
12
 
13
- import React from 'react';
13
+ /** @jsx jsx */
14
+ import { jsx } from '@emotion/core';
15
+ import React, { Fragment } from 'react';
14
16
  import { PureComponent } from 'react';
15
17
  import { FormattedMessage, injectIntl } from 'react-intl-next';
16
18
  import TextField from '@atlaskit/textfield';
@@ -21,7 +23,7 @@ import EmojiErrorMessage from './EmojiErrorMessage';
21
23
  import EmojiUploadPreview from './EmojiUploadPreview';
22
24
  import FileChooser from './FileChooser';
23
25
  import { UploadStatus } from './internal-types';
24
- import * as styles from './styles';
26
+ import { emojiChooseFileErrorMessage, emojiUpload, emojiUploadBottom, uploadChooseFileBrowse, uploadChooseFileEmojiName, uploadChooseFileMessage, uploadChooseFileRow } from './styles';
25
27
  var disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
26
28
 
27
29
  var sanitizeName = function sanitizeName(name) {
@@ -79,17 +81,17 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
79
81
  var disableChooser = !name;
80
82
  var 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
81
83
 
82
- return /*#__PURE__*/React.createElement("div", {
83
- className: styles.emojiUpload
84
- }, /*#__PURE__*/React.createElement("div", {
85
- className: styles.uploadChooseFileMessage
86
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel, function (message) {
87
- return /*#__PURE__*/React.createElement("h5", null, message);
88
- })), /*#__PURE__*/React.createElement("div", {
89
- className: styles.uploadChooseFileRow
90
- }, /*#__PURE__*/React.createElement("span", {
91
- className: styles.uploadChooseFileEmojiName
92
- }, /*#__PURE__*/React.createElement(TextField, {
84
+ return jsx("div", {
85
+ css: emojiUpload
86
+ }, jsx("div", {
87
+ css: uploadChooseFileMessage
88
+ }, jsx(FormattedMessage, messages.addCustomEmojiLabel, function (message) {
89
+ return jsx("h5", null, message);
90
+ })), jsx("div", {
91
+ css: uploadChooseFileRow
92
+ }, jsx("span", {
93
+ css: uploadChooseFileEmojiName
94
+ }, jsx(TextField, {
93
95
  placeholder: formatMessage(messages.emojiPlaceholder),
94
96
  "aria-label": formatMessage(messages.emojiNameAriaLabel),
95
97
  maxLength: maxNameLength,
@@ -98,13 +100,13 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
98
100
  value: name,
99
101
  isCompact: true,
100
102
  autoFocus: true
101
- })), /*#__PURE__*/React.createElement("span", {
102
- className: styles.uploadChooseFileBrowse
103
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, function (screenReaderDescription) {
104
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
103
+ })), jsx("span", {
104
+ css: uploadChooseFileBrowse
105
+ }, jsx(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, function (screenReaderDescription) {
106
+ return jsx(Fragment, null, jsx("span", {
105
107
  hidden: true,
106
108
  id: fileChooserButtonDescriptionId
107
- }, screenReaderDescription), /*#__PURE__*/React.createElement(FileChooser, {
109
+ }, screenReaderDescription), jsx(FileChooser, {
108
110
  label: formatMessage(messages.emojiChooseFileTitle),
109
111
  onChange: onChooseFile,
110
112
  onClick: onClick,
@@ -112,10 +114,10 @@ var ChooseEmojiFile = /*#__PURE__*/function (_PureComponent) {
112
114
  ariaDescribedBy: fileChooserButtonDescriptionId,
113
115
  isDisabled: disableChooser
114
116
  }));
115
- }))), /*#__PURE__*/React.createElement("div", {
116
- className: styles.emojiUploadBottom
117
- }, !errorMessage ? /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiImageRequirements)) : /*#__PURE__*/React.createElement(EmojiErrorMessage, {
118
- className: styles.emojiChooseFileErrorMessage,
117
+ }))), jsx("div", {
118
+ css: emojiUploadBottom
119
+ }, !errorMessage ? jsx("p", null, jsx(FormattedMessage, messages.emojiImageRequirements)) : jsx(EmojiErrorMessage, {
120
+ messageStyles: emojiChooseFileErrorMessage,
119
121
  message: errorMessage
120
122
  })));
121
123
  }
@@ -319,7 +321,7 @@ export var EmojiUploadPicker = /*#__PURE__*/function (_PureComponent2) {
319
321
  };
320
322
 
321
323
  if (name && previewImage) {
322
- return /*#__PURE__*/React.createElement(EmojiUploadPreview, {
324
+ return jsx(EmojiUploadPreview, {
323
325
  errorMessage: errorMessage,
324
326
  name: name,
325
327
  onAddEmoji: this.onAddEmoji,
@@ -329,13 +331,13 @@ export var EmojiUploadPicker = /*#__PURE__*/function (_PureComponent2) {
329
331
  });
330
332
  }
331
333
 
332
- return /*#__PURE__*/React.createElement(ChooseEmojiFile, {
334
+ return jsx(ChooseEmojiFile, {
333
335
  name: name,
334
336
  onChooseFile: this.onChooseFile,
335
337
  onClick: this.props.onFileChooserClicked,
336
338
  onNameChange: this.onNameChange,
337
339
  onUploadCancelled: cancelUpload,
338
- errorMessage: chooseEmojiErrorMessage ? /*#__PURE__*/React.createElement(FormattedMessage, chooseEmojiErrorMessage) : undefined,
340
+ errorMessage: chooseEmojiErrorMessage ? jsx(FormattedMessage, chooseEmojiErrorMessage) : undefined,
339
341
  intl: intl
340
342
  });
341
343
  }
@@ -9,8 +9,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
9
9
 
10
10
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
11
11
 
12
+ /** @jsx jsx */
13
+ import { jsx } from '@emotion/core';
12
14
  import AkButton from '@atlaskit/button/custom-theme-button';
13
- import React from 'react';
14
15
  import { PureComponent } from 'react';
15
16
  import { FormattedMessage, injectIntl } from 'react-intl-next';
16
17
  import { customCategory } from '../../util/constants';
@@ -19,7 +20,7 @@ import Emoji from './Emoji';
19
20
  import EmojiErrorMessage from './EmojiErrorMessage';
20
21
  import { UploadStatus } from './internal-types';
21
22
  import RetryableButton from './RetryableButton';
22
- import * as styles from './styles';
23
+ import { bigEmojiPreview, cancelButton, emojiPreviewErrorMessage, uploadAddRow, uploadPreview, uploadPreviewFooter, uploadPreviewText } from './styles';
23
24
 
24
25
  var EmojiUploadPreview = /*#__PURE__*/function (_PureComponent) {
25
26
  _inherits(EmojiUploadPreview, _PureComponent);
@@ -58,44 +59,42 @@ var EmojiUploadPreview = /*#__PURE__*/function (_PureComponent) {
58
59
  },
59
60
  searchable: true
60
61
  };
61
- emojiComponent = /*#__PURE__*/React.createElement(Emoji, {
62
+ emojiComponent = jsx(Emoji, {
62
63
  emoji: emoji
63
64
  });
64
65
  }
65
66
 
66
67
  var uploading = uploadStatus === UploadStatus.Uploading;
67
- return /*#__PURE__*/React.createElement("div", {
68
- className: styles.uploadPreviewFooter
69
- }, /*#__PURE__*/React.createElement("div", {
70
- className: styles.uploadPreview
71
- }, /*#__PURE__*/React.createElement("div", {
72
- className: styles.uploadPreviewText
73
- }, /*#__PURE__*/React.createElement("h5", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiPreviewTitle)), /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.emojiPreview, {
68
+ return jsx("div", {
69
+ css: uploadPreviewFooter
70
+ }, jsx("div", {
71
+ css: uploadPreview
72
+ }, jsx("div", {
73
+ css: uploadPreviewText
74
+ }, jsx("h5", null, jsx(FormattedMessage, messages.emojiPreviewTitle)), jsx(FormattedMessage, _extends({}, messages.emojiPreview, {
74
75
  values: {
75
76
  emoji: emojiComponent
76
77
  }
77
- }))), /*#__PURE__*/React.createElement("div", {
78
- className: styles.bigEmojiPreview
79
- }, emojiComponent)), /*#__PURE__*/React.createElement("div", {
80
- className: styles.uploadAddRow
81
- }, !uploading && errorMessage ? /*#__PURE__*/React.createElement(EmojiErrorMessage, {
82
- className: styles.emojiPreviewErrorMessage,
78
+ }))), jsx("div", {
79
+ css: bigEmojiPreview
80
+ }, emojiComponent)), jsx("div", {
81
+ css: uploadAddRow
82
+ }, !uploading && errorMessage ? jsx(EmojiErrorMessage, {
83
+ messageStyles: emojiPreviewErrorMessage,
83
84
  message: errorMessage,
84
85
  tooltip: true
85
- }) : null, /*#__PURE__*/React.createElement(RetryableButton, {
86
- className: styles.uploadEmojiButton,
87
- retryClassName: styles.uploadRetryButton,
86
+ }) : null, jsx(RetryableButton, {
88
87
  label: formatMessage(messages.addEmojiLabel),
89
88
  onSubmit: onAddEmoji,
90
89
  appearance: "primary",
91
90
  loading: uploading,
92
91
  error: !!errorMessage
93
- }), /*#__PURE__*/React.createElement(AkButton, {
92
+ }), jsx(AkButton, {
94
93
  onClick: onUploadCancelled,
95
94
  appearance: "subtle",
96
95
  isDisabled: uploading,
97
- className: styles.cancelButton
98
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.cancelLabel))));
96
+ css: cancelButton
97
+ }, jsx(FormattedMessage, messages.cancelLabel))));
99
98
  }
100
99
  }]);
101
100
 
@@ -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,10 +12,13 @@ export var createRecordSelectionDefault = function createRecordSelectionDefault(
12
12
  return function (emojiId, emoji, event) {
13
13
  try {
14
14
  if (provider.recordSelection && emoji) {
15
+ ufoExperiences['emoji-selection-recorded'].start();
15
16
  provider.recordSelection(emoji).then(function () {
16
- return fireAnalytics && fireAnalytics(insertionSucceeded);
17
+ fireAnalytics && fireAnalytics(recordSucceeded);
18
+ ufoExperiences['emoji-selection-recorded'].success();
17
19
  }).catch(function () {
18
- return fireAnalytics && fireAnalytics(insertionFailed);
20
+ fireAnalytics && fireAnalytics(recordFailed);
21
+ ufoExperiences['emoji-selection-recorded'].failure();
19
22
  });
20
23
  }
21
24
  } finally {
@@ -14,9 +14,11 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
14
14
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
15
15
 
16
16
  import React from 'react';
17
- import { defaultEmojiHeight } from '../../util/constants';
17
+ import { defaultEmojiHeight, SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI } from '../../util/constants';
18
18
  import EmojiPlaceholder from './EmojiPlaceholder';
19
19
  import LoadingEmojiComponent from './LoadingEmojiComponent';
20
+ import { sampledUfoRenderedEmoji, ufoExperiences } from '../../util/analytics';
21
+ import { UfoErrorBoundary } from './UfoErrorBoundary';
20
22
 
21
23
  var resourcedEmojiModuleLoader = function resourcedEmojiModuleLoader() {
22
24
  return import(
@@ -35,25 +37,34 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
35
37
 
36
38
  var _super = _createSuper(ResourcedEmoji);
37
39
 
38
- function ResourcedEmoji() {
40
+ // state initialised with static component to prevent
41
+ // rerender when the module has already been loaded
42
+ function ResourcedEmoji(props) {
39
43
  var _this;
40
44
 
41
45
  _classCallCheck(this, ResourcedEmoji);
42
46
 
43
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
44
- args[_key] = arguments[_key];
45
- }
46
-
47
- _this = _super.call.apply(_super, [this].concat(args));
47
+ _this = _super.call(this, props, {});
48
48
 
49
49
  _defineProperty(_assertThisInitialized(_this), "state", {
50
50
  asyncLoadedComponent: ResourcedEmoji.AsyncLoadedComponent
51
51
  });
52
52
 
53
+ sampledUfoRenderedEmoji(props.emojiId).start({
54
+ samplingRate: SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI
55
+ });
56
+ ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName).addMetadata({
57
+ source: 'resourced-emoji'
58
+ });
53
59
  return _this;
54
60
  }
55
61
 
56
62
  _createClass(ResourcedEmoji, [{
63
+ key: "componentWillUnmount",
64
+ value: function componentWillUnmount() {
65
+ sampledUfoRenderedEmoji(this.props.emojiId).abort();
66
+ }
67
+ }, {
57
68
  key: "asyncLoadComponent",
58
69
  value: function asyncLoadComponent() {
59
70
  var _this2 = this;
@@ -84,9 +95,11 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
84
95
  emojiProvider = _this$props2.emojiProvider,
85
96
  otherProps = _objectWithoutProperties(_this$props2, _excluded);
86
97
 
87
- return /*#__PURE__*/React.createElement(ResourcedEmojiComponent, _extends({}, otherProps, {
98
+ return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
99
+ experiences: [ufoExperiences['emoji-rendered'].getInstance(this.props.emojiId.id || this.props.emojiId.shortName)]
100
+ }, /*#__PURE__*/React.createElement(ResourcedEmojiComponent, _extends({}, otherProps, {
88
101
  emojiProvider: loadedEmojiProvider
89
- }));
102
+ })));
90
103
  }
91
104
  }]);
92
105
 
@@ -10,13 +10,14 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
10
10
 
11
11
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
12
12
 
13
+ import PropTypes from 'prop-types';
13
14
  import React from 'react';
14
15
  import { Component } from 'react';
15
16
  import { defaultEmojiHeight } from '../../util/constants';
16
17
  import { isPromise } from '../../util/type-helpers';
17
18
  import CachingEmoji from './CachingEmoji';
18
19
  import EmojiPlaceholder from './EmojiPlaceholder';
19
- import { EmojiContextProvider } from '../../context/EmojiContextProvider';
20
+ import { sampledUfoRenderedEmoji } from '../../util/analytics';
20
21
 
21
22
  var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
22
23
  _inherits(ResourcedEmojiComponent, _Component);
@@ -40,6 +41,15 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
40
41
  }
41
42
 
42
43
  _createClass(ResourcedEmojiComponent, [{
44
+ key: "getChildContext",
45
+ value: function getChildContext() {
46
+ return {
47
+ emoji: {
48
+ emojiProvider: this.props.emojiProvider
49
+ }
50
+ };
51
+ }
52
+ }, {
43
53
  key: "refreshEmoji",
44
54
  value: function refreshEmoji(emojiProvider, emojiId) {
45
55
  var _this2 = this;
@@ -57,7 +67,22 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
57
67
  emoji: emoji,
58
68
  loaded: true
59
69
  });
70
+
71
+ if (!emoji) {
72
+ // emoji is undefined
73
+ sampledUfoRenderedEmoji(emojiId).failure({
74
+ metadata: {
75
+ reason: 'failed to find'
76
+ }
77
+ });
78
+ }
60
79
  }
80
+ }).catch(function () {
81
+ sampledUfoRenderedEmoji(emojiId).failure({
82
+ metadata: {
83
+ reason: 'failed to load'
84
+ }
85
+ });
61
86
  });
62
87
  } else {
63
88
  // loaded
@@ -128,22 +153,19 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
128
153
  shortName = _this$props$emojiId.shortName,
129
154
  id = _this$props$emojiId.id,
130
155
  fallback = _this$props$emojiId.fallback;
131
- var emojiContextValue = {
132
- emoji: {
133
- emojiProvider: this.props.emojiProvider
134
- }
135
- };
136
- return /*#__PURE__*/React.createElement(EmojiContextProvider, {
137
- emojiContextValue: emojiContextValue
138
- }, /*#__PURE__*/React.createElement("span", {
156
+ return /*#__PURE__*/React.createElement("span", {
139
157
  "data-emoji-id": id,
140
158
  "data-emoji-short-name": shortName,
141
159
  "data-emoji-text": fallback || shortName
142
- }, element));
160
+ }, element);
143
161
  }
144
162
  }]);
145
163
 
146
164
  return ResourcedEmojiComponent;
147
165
  }(Component);
148
166
 
167
+ _defineProperty(ResourcedEmojiComponent, "childContextTypes", {
168
+ emoji: PropTypes.object
169
+ });
170
+
149
171
  export { ResourcedEmojiComponent as default };
@@ -8,13 +8,14 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
8
8
 
9
9
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
10
10
 
11
+ /** @jsx jsx */
12
+ import { jsx } from '@emotion/core';
11
13
  import AkButton from '@atlaskit/button/custom-theme-button';
12
14
  import Spinner from '@atlaskit/spinner';
13
- import React from 'react';
14
15
  import { Component } from 'react';
15
16
  import { FormattedMessage } from 'react-intl-next';
16
17
  import { messages } from '../i18n';
17
- import * as styles from './styles';
18
+ import { buttonSpinner, uploadEmojiButton, uploadRetryButton } from './styles';
18
19
 
19
20
  var RetryableButton = /*#__PURE__*/function (_Component) {
20
21
  _inherits(RetryableButton, _Component);
@@ -30,20 +31,19 @@ var RetryableButton = /*#__PURE__*/function (_Component) {
30
31
  _createClass(RetryableButton, [{
31
32
  key: "renderLoading",
32
33
  value: function renderLoading() {
33
- return /*#__PURE__*/React.createElement("span", {
34
- className: styles.buttonSpinner
35
- }, /*#__PURE__*/React.createElement(Spinner, null));
34
+ return jsx("span", {
35
+ css: buttonSpinner
36
+ }, jsx(Spinner, null));
36
37
  }
37
38
  }, {
38
39
  key: "renderRetry",
39
40
  value: function renderRetry() {
40
41
  var _this$props = this.props,
41
42
  loading = _this$props.loading,
42
- retryClassName = _this$props.retryClassName,
43
43
  onSubmit = _this$props.onSubmit;
44
- return loading ? this.renderLoading() : /*#__PURE__*/React.createElement(FormattedMessage, messages.retryLabel, function (retryLabel) {
45
- return /*#__PURE__*/React.createElement(AkButton, {
46
- className: retryClassName,
44
+ return loading ? this.renderLoading() : jsx(FormattedMessage, messages.retryLabel, function (retryLabel) {
45
+ return jsx(AkButton, {
46
+ css: uploadRetryButton,
47
47
  appearance: "warning",
48
48
  onClick: onSubmit
49
49
  }, retryLabel);
@@ -55,12 +55,11 @@ var RetryableButton = /*#__PURE__*/function (_Component) {
55
55
  var _this$props2 = this.props,
56
56
  loading = _this$props2.loading,
57
57
  error = _this$props2.error,
58
- className = _this$props2.className,
59
58
  appearance = _this$props2.appearance,
60
59
  onSubmit = _this$props2.onSubmit,
61
60
  label = _this$props2.label;
62
- return error ? this.renderRetry() : loading ? this.renderLoading() : /*#__PURE__*/React.createElement(AkButton, {
63
- className: className,
61
+ return error ? this.renderRetry() : loading ? this.renderLoading() : jsx(AkButton, {
62
+ css: uploadEmojiButton,
64
63
  appearance: appearance,
65
64
  onClick: onSubmit
66
65
  }, label);
@@ -11,8 +11,9 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
11
11
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
12
12
 
13
13
  // FIXME - FAB-1732 looking at making a shared component for this
14
- import classNames from 'classnames';
15
- import React from 'react';
14
+
15
+ /** @jsx jsx */
16
+ import { jsx } from '@emotion/core';
16
17
  import { PureComponent } from 'react';
17
18
  import { findDOMNode } from 'react-dom';
18
19
  import * as styles from './styles';
@@ -88,17 +89,12 @@ var Scrollable = /*#__PURE__*/function (_PureComponent) {
88
89
  className = _this$props.className,
89
90
  maxHeight = _this$props.maxHeight,
90
91
  onMouseLeave = _this$props.onMouseLeave;
91
- var scrollableClasses = ['emoji-scrollable', styles.emojiScrollable];
92
-
93
- if (className) {
94
- scrollableClasses.push(className);
95
- }
96
-
97
92
  var style = maxHeight ? {
98
93
  maxHeight: maxHeight
99
94
  } : {};
100
- return /*#__PURE__*/React.createElement("div", {
101
- className: classNames(scrollableClasses),
95
+ return jsx("div", {
96
+ className: "emoji-scrollable ".concat(className),
97
+ css: styles.emojiScrollable,
102
98
  onMouseLeave: onMouseLeave,
103
99
  onScroll: this.handleScroll,
104
100
  ref: this.handleRef,
@@ -0,0 +1,38 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _inherits from "@babel/runtime/helpers/inherits";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
6
+
7
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
+
9
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
10
+
11
+ import React from 'react';
12
+ export var UfoErrorBoundary = /*#__PURE__*/function (_React$Component) {
13
+ _inherits(UfoErrorBoundary, _React$Component);
14
+
15
+ var _super = _createSuper(UfoErrorBoundary);
16
+
17
+ function UfoErrorBoundary() {
18
+ _classCallCheck(this, UfoErrorBoundary);
19
+
20
+ return _super.apply(this, arguments);
21
+ }
22
+
23
+ _createClass(UfoErrorBoundary, [{
24
+ key: "componentDidCatch",
25
+ value: function componentDidCatch() {
26
+ this.props.experiences.forEach(function (e) {
27
+ return e.failure();
28
+ });
29
+ }
30
+ }, {
31
+ key: "render",
32
+ value: function render() {
33
+ return this.props.children;
34
+ }
35
+ }]);
36
+
37
+ return UfoErrorBoundary;
38
+ }(React.Component);
@@ -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 var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) {
5
6
  var 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(function (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(function (err) {
15
18
  errorSetter(messages.emojiUploadFailed); // eslint-disable-next-line no-console
16
19
 
@@ -19,6 +22,7 @@ export var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter
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
  };