@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,15 +10,16 @@ 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';
14
15
  import { PureComponent } from 'react';
15
16
  import { FormattedMessage } from 'react-intl-next';
16
- import classNames from 'classnames';
17
- import * as styles from './styles';
18
17
  import { supportsUploadFeature } from '../../api/EmojiResource';
19
18
  import EmojiUploadPickerWithIntl from '../common/EmojiUploadPicker';
20
19
  import { uploadEmoji } from '../common/UploadEmoji';
21
20
  import { createAndFireEventInElementsChannel, selectedFileEvent, uploadCancelButton, uploadConfirmButton } from '../../util/analytics';
21
+ import { emojiUploadFooter, emojiUploadWidget } from './styles';
22
+ import { ufoExperiences } from '../../util/analytics/ufoExperiences';
22
23
 
23
24
  var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
24
25
  _inherits(EmojiUploadComponent, _PureComponent);
@@ -34,6 +35,10 @@ var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
34
35
 
35
36
  _defineProperty(_assertThisInitialized(_this), "onUploadEmoji", function (upload, retry) {
36
37
  var emojiProvider = _this.props.emojiProvider;
38
+ ufoExperiences['emoji-uploaded'].start();
39
+ ufoExperiences['emoji-uploaded'].addMetadata({
40
+ retry: retry
41
+ });
37
42
 
38
43
  _this.fireAnalytics(uploadConfirmButton({
39
44
  retry: retry
@@ -95,16 +100,21 @@ var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
95
100
  }
96
101
 
97
102
  _createClass(EmojiUploadComponent, [{
103
+ key: "componentWillUnmount",
104
+ value: function componentWillUnmount() {
105
+ ufoExperiences['emoji-uploaded'].abort();
106
+ }
107
+ }, {
98
108
  key: "render",
99
109
  value: function render() {
100
110
  var uploadErrorMessage = this.state.uploadErrorMessage;
101
- var errorMessage = uploadErrorMessage ? /*#__PURE__*/React.createElement(FormattedMessage, uploadErrorMessage) : null;
102
- return /*#__PURE__*/React.createElement("div", {
103
- className: classNames([styles.emojiUploadWidget]),
111
+ var errorMessage = uploadErrorMessage ? jsx(FormattedMessage, uploadErrorMessage) : null;
112
+ return jsx("div", {
113
+ css: emojiUploadWidget,
104
114
  ref: this.props.onUploaderRef
105
- }, /*#__PURE__*/React.createElement("div", {
106
- className: classNames([styles.emojiUploadFooter])
107
- }, /*#__PURE__*/React.createElement(EmojiUploadPickerWithIntl, {
115
+ }, jsx("div", {
116
+ css: emojiUploadFooter
117
+ }, jsx(EmojiUploadPickerWithIntl, {
108
118
  ref: this.onUploaderRef,
109
119
  onFileChooserClicked: this.onFileChooserClicked,
110
120
  onUploadCancelled: this.onUploadCancelled,
@@ -1,8 +1,8 @@
1
- import { style } from 'typestyle';
2
1
  import { token } from '@atlaskit/tokens';
3
- import { emojiPickerWidth } from '../../util/constants'; // Uploader
2
+ import { emojiPickerWidth } from '../../util/constants';
3
+ import { css } from '@emotion/core'; // Uploader
4
4
 
5
- export var emojiUploadWidget = style({
5
+ export var emojiUploadWidget = css({
6
6
  display: 'flex',
7
7
  flexDirection: 'column',
8
8
  justifyContent: 'center',
@@ -16,6 +16,6 @@ export var emojiUploadWidget = style({
16
16
  marginTop: '-16px'
17
17
  }); /// Footer
18
18
 
19
- export var emojiUploadFooter = style({
19
+ export var emojiUploadFooter = css({
20
20
  flex: '0 0 auto'
21
21
  });
package/dist/esm/index.js CHANGED
@@ -6,18 +6,19 @@ import EmojiPicker from './components/picker/EmojiPicker';
6
6
  import EmojiUploader from './components/uploader/EmojiUploader';
7
7
  import EmojiTypeAhead from './components/typeahead/EmojiTypeAhead';
8
8
  import EmojiTypeAheadItem from './components/typeahead/EmojiTypeAheadItem';
9
- export { selected, selectOnHover, emojiSprite, emojiNode, emojiImage } from './components/common/styles';
9
+ export { // renaming exports to prevent breaking changes due to renaming
10
+ commonSelectedStyles as selected, selectOnHoverStyles as selectOnHover, emojiSprite, emojiNodeStyles as emojiNode, emojiImage } from './components/common/styles';
10
11
  import EmojiResource from './api/EmojiResource';
11
12
  import EmojiRepository from './api/EmojiRepository';
12
13
  import EmojiLoader from './api/EmojiLoader';
13
14
  import { denormaliseEmojiServiceResponse } from './api/EmojiUtils';
14
15
  import { toEmojiId, toOptionalEmojiId } from './util/type-helpers';
15
- import { recordSelectionFailedSli, recordSelectionSucceededSli } from './util/analytics';
16
+ import { recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences } from './util/analytics';
16
17
  import { customCategory, defaultEmojiHeight, emojiPickerWidth, emojiPickerHeight } from './util/constants';
17
18
  import { UsageFrequencyTracker } from './api/internal/UsageFrequencyTracker';
18
19
  export { // Classes
19
20
  AbstractResource, Emoji, EmojiPlaceholder, EmojiLoader, EmojiPicker, EmojiUploader, EmojiResource, EmojiRepository, EmojiTypeAhead, ResourcedEmoji, // functions
20
- denormaliseEmojiServiceResponse, toEmojiId, toOptionalEmojiId, recordSelectionFailedSli, recordSelectionSucceededSli, // Constants
21
+ denormaliseEmojiServiceResponse, toEmojiId, toOptionalEmojiId, recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, // Constants
21
22
  emojiPickerWidth, emojiPickerHeight, defaultEmojiHeight, customCategory, UsageFrequencyTracker, EmojiTypeAheadItem };
22
23
  export { // Enums
23
24
  SearchSort } from './types';
package/dist/esm/types.js CHANGED
@@ -33,4 +33,13 @@ export var SearchSort;
33
33
  SearchSort[SearchSort["None"] = 0] = "None";
34
34
  SearchSort[SearchSort["Default"] = 1] = "Default";
35
35
  SearchSort[SearchSort["UsageFrequency"] = 2] = "UsageFrequency";
36
- })(SearchSort || (SearchSort = {}));
36
+ })(SearchSort || (SearchSort = {}));
37
+
38
+ export var ProviderTypes;
39
+
40
+ (function (ProviderTypes) {
41
+ ProviderTypes["SITE"] = "SITE";
42
+ ProviderTypes["STANDARD"] = "STANDARD";
43
+ ProviderTypes["ATLASSIAN"] = "ATLASSIAN";
44
+ ProviderTypes["UNKNOWN"] = "UNKNOWN";
45
+ })(ProviderTypes || (ProviderTypes = {}));
@@ -11,7 +11,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
11
11
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
12
 
13
13
  import { createAndFireEvent } from '@atlaskit/analytics-next';
14
- import { name as packageName, version as packageVersion } from '../version.json';
14
+ import { name as packageName, version as packageVersion } from '../../version.json';
15
15
  export var createAndFireEventInElementsChannel = createAndFireEvent('fabric-elements');
16
16
 
17
17
  var createEvent = function createEvent(eventType, action, actionSubject, actionSubjectId) {
@@ -28,12 +28,12 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
28
28
  };
29
29
  };
30
30
 
31
- export var insertionSucceeded = function insertionSucceeded(source) {
31
+ export var recordSucceeded = function recordSucceeded(source) {
32
32
  return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
33
33
  source: source
34
34
  });
35
35
  };
36
- export var insertionFailed = function insertionFailed(source) {
36
+ export var recordFailed = function recordFailed(source) {
37
37
  return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
38
38
  source: source
39
39
  });
@@ -195,18 +195,20 @@ export var typeaheadRenderedEvent = function typeaheadRenderedEvent(duration, qu
195
195
  return createEvent('operational', 'rendered', 'emojiTypeahead', undefined, _objectSpread({
196
196
  duration: duration
197
197
  }, extractCommonAttributes(query, emojiList)));
198
- };
198
+ }; // it's used in editor typeahead to fire success record analytics
199
+
199
200
  export var recordSelectionSucceededSli = function recordSelectionSucceededSli(options) {
200
201
  return function () {
201
202
  if (options && options.createAnalyticsEvent) {
202
- createAndFireEvent('editor')(insertionSucceeded('typeahead'))(options.createAnalyticsEvent);
203
+ createAndFireEvent('editor')(recordSucceeded('typeahead'))(options.createAnalyticsEvent);
203
204
  }
204
205
  };
205
- };
206
+ }; // it's used in editor typeahead to fire failure record analytics
207
+
206
208
  export var recordSelectionFailedSli = function recordSelectionFailedSli(options) {
207
209
  return function (err) {
208
210
  if (options && options.createAnalyticsEvent) {
209
- createAndFireEvent('editor')(insertionFailed('typeahead'))(options.createAnalyticsEvent);
211
+ createAndFireEvent('editor')(recordFailed('typeahead'))(options.createAnalyticsEvent);
210
212
  }
211
213
 
212
214
  return Promise.reject(err);
@@ -0,0 +1,4 @@
1
+ export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling } from './samplingUfo';
2
+ export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, recordFailed, recordSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
3
+ export { sampledUfoRenderedEmoji, ufoExperiences } from './ufoExperiences';
4
+ export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
@@ -0,0 +1,259 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
+
5
+ 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; }
6
+
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
+
9
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
10
+
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+
13
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
+
15
+ export var ufoExperiencesSampled = {};
16
+
17
+ var sampleChance = function sampleChance(min, max) {
18
+ // min and max included
19
+ return Math.floor(Math.random() * (max - min + 1) + min);
20
+ };
21
+
22
+ export var clearSampled = function clearSampled() {
23
+ var _iterator = _createForOfIteratorHelper(Object.getOwnPropertyNames(ufoExperiencesSampled)),
24
+ _step;
25
+
26
+ try {
27
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
28
+ var prop = _step.value;
29
+ delete ufoExperiencesSampled[prop];
30
+ }
31
+ } catch (err) {
32
+ _iterator.e(err);
33
+ } finally {
34
+ _iterator.f();
35
+ }
36
+ }; // default sampling function to determine which one to be sampled
37
+
38
+ export var isExperienceSampled = function isExperienceSampled(rate) {
39
+ // if invalid sampling rate provided, we sample it
40
+ if (rate > 1 || rate < 0) {
41
+ return true;
42
+ }
43
+
44
+ if (rate === 1) {
45
+ return true;
46
+ }
47
+
48
+ if (rate === 0) {
49
+ return false;
50
+ }
51
+
52
+ var maxCount = Math.ceil(1 / rate);
53
+ var chance = sampleChance(1, maxCount);
54
+ return chance === maxCount;
55
+ };
56
+
57
+ var hasSampledFromStart = function hasSampledFromStart(experience) {
58
+ if (!ufoExperiencesSampled[experience.id]) {
59
+ return false;
60
+ }
61
+
62
+ if (experience.instanceId) {
63
+ // if the instance of concurrent exp has been sampled from start, allow it.
64
+ return ufoExperiencesSampled[experience.id].sampledInstance[experience.instanceId];
65
+ }
66
+
67
+ return ufoExperiencesSampled[experience.id].sampled;
68
+ };
69
+
70
+ /**
71
+ * This function is a temp solution to reduce the event traffic, as UFO package does not support it.
72
+ *
73
+ * e.g. Emoji Picker contains thousands of emojis, which means will trigger a large number of renderred events without sampling
74
+ * @param ufoExperience
75
+ * @returns
76
+ */
77
+ export var withSampling = function withSampling(ufoExperience) {
78
+ var init = function init() {
79
+ if (!ufoExperiencesSampled[ufoExperience.id]) {
80
+ ufoExperiencesSampled[ufoExperience.id] = {
81
+ sampled: false,
82
+ sampledInstance: {}
83
+ };
84
+ }
85
+ };
86
+
87
+ var start = /*#__PURE__*/function () {
88
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(options) {
89
+ var isSampled;
90
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
91
+ while (1) {
92
+ switch (_context.prev = _context.next) {
93
+ case 0:
94
+ if (!hasSampledFromStart(ufoExperience)) {
95
+ _context.next = 2;
96
+ break;
97
+ }
98
+
99
+ return _context.abrupt("return");
100
+
101
+ case 2:
102
+ isSampled = options.samplingFunc || isExperienceSampled;
103
+
104
+ if (isSampled(options.samplingRate)) {
105
+ _context.next = 7;
106
+ break;
107
+ }
108
+
109
+ if (ufoExperience.instanceId) {
110
+ ufoExperiencesSampled[ufoExperience.id].sampledInstance[ufoExperience.instanceId] = false;
111
+ }
112
+
113
+ ufoExperiencesSampled[ufoExperience.id].sampled = false;
114
+ return _context.abrupt("return");
115
+
116
+ case 7:
117
+ // update sampled records
118
+ if (ufoExperience.instanceId) {
119
+ ufoExperiencesSampled[ufoExperience.id].sampledInstance[ufoExperience.instanceId] = true;
120
+ ufoExperiencesSampled[ufoExperience.id].sampled = true;
121
+ }
122
+
123
+ return _context.abrupt("return", ufoExperience.start(options.startTime));
124
+
125
+ case 9:
126
+ case "end":
127
+ return _context.stop();
128
+ }
129
+ }
130
+ }, _callee);
131
+ }));
132
+
133
+ return function start(_x) {
134
+ return _ref.apply(this, arguments);
135
+ };
136
+ }();
137
+
138
+ var success = /*#__PURE__*/function () {
139
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(config) {
140
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
141
+ while (1) {
142
+ switch (_context2.prev = _context2.next) {
143
+ case 0:
144
+ if (hasSampledFromStart(ufoExperience)) {
145
+ _context2.next = 2;
146
+ break;
147
+ }
148
+
149
+ return _context2.abrupt("return", null);
150
+
151
+ case 2:
152
+ return _context2.abrupt("return", ufoExperience.success(config));
153
+
154
+ case 3:
155
+ case "end":
156
+ return _context2.stop();
157
+ }
158
+ }
159
+ }, _callee2);
160
+ }));
161
+
162
+ return function success(_x2) {
163
+ return _ref2.apply(this, arguments);
164
+ };
165
+ }();
166
+
167
+ var failure = /*#__PURE__*/function () {
168
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(config) {
169
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
170
+ while (1) {
171
+ switch (_context3.prev = _context3.next) {
172
+ case 0:
173
+ if (hasSampledFromStart(ufoExperience)) {
174
+ _context3.next = 2;
175
+ break;
176
+ }
177
+
178
+ return _context3.abrupt("return", null);
179
+
180
+ case 2:
181
+ return _context3.abrupt("return", ufoExperience.failure(config));
182
+
183
+ case 3:
184
+ case "end":
185
+ return _context3.stop();
186
+ }
187
+ }
188
+ }, _callee3);
189
+ }));
190
+
191
+ return function failure(_x3) {
192
+ return _ref3.apply(this, arguments);
193
+ };
194
+ }();
195
+
196
+ var abort = /*#__PURE__*/function () {
197
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(config) {
198
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
199
+ while (1) {
200
+ switch (_context4.prev = _context4.next) {
201
+ case 0:
202
+ if (hasSampledFromStart(ufoExperience)) {
203
+ _context4.next = 2;
204
+ break;
205
+ }
206
+
207
+ return _context4.abrupt("return", null);
208
+
209
+ case 2:
210
+ return _context4.abrupt("return", ufoExperience.abort(config));
211
+
212
+ case 3:
213
+ case "end":
214
+ return _context4.stop();
215
+ }
216
+ }
217
+ }, _callee4);
218
+ }));
219
+
220
+ return function abort(_x4) {
221
+ return _ref4.apply(this, arguments);
222
+ };
223
+ }();
224
+
225
+ var mark = function mark(name, timestamp) {
226
+ if (!hasSampledFromStart(ufoExperience)) {
227
+ return;
228
+ }
229
+
230
+ return ufoExperience.mark(name, timestamp);
231
+ };
232
+
233
+ var markFMP = function markFMP(timestamp) {
234
+ if (!hasSampledFromStart(ufoExperience)) {
235
+ return;
236
+ }
237
+
238
+ return ufoExperience.markFMP(timestamp);
239
+ };
240
+
241
+ var markInlineResponse = function markInlineResponse(timestamp) {
242
+ if (!hasSampledFromStart(ufoExperience)) {
243
+ return;
244
+ }
245
+
246
+ return ufoExperience.markInlineResponse(timestamp);
247
+ };
248
+
249
+ init();
250
+ return _objectSpread(_objectSpread({}, ufoExperience), {}, {
251
+ start: start,
252
+ success: success,
253
+ failure: failure,
254
+ abort: abort,
255
+ mark: mark,
256
+ markFMP: markFMP,
257
+ markInlineResponse: markInlineResponse
258
+ });
259
+ };
@@ -0,0 +1,34 @@
1
+ import { ExperiencePerformanceTypes, ExperienceTypes, ConcurrentExperience, UFOExperience } from '@atlaskit/ufo';
2
+ import { withSampling } from './samplingUfo'; // TODO: clean up as not needed
3
+
4
+ var createRenderExperience = function createRenderExperience(componentName) {
5
+ return {
6
+ platform: {
7
+ component: componentName
8
+ },
9
+ type: ExperienceTypes.Load,
10
+ performanceType: ExperiencePerformanceTypes.PageSegmentLoad
11
+ };
12
+ };
13
+
14
+ var createInlineExperience = function createInlineExperience(componentName) {
15
+ return {
16
+ platform: {
17
+ component: componentName
18
+ },
19
+ type: ExperienceTypes.Experience,
20
+ performanceType: ExperiencePerformanceTypes.InlineResult
21
+ };
22
+ };
23
+
24
+ export var ufoExperiences = {
25
+ 'emoji-rendered': new ConcurrentExperience('emoji-rendered', createRenderExperience('emoji')),
26
+ 'emoji-resource-fetched': new ConcurrentExperience('emoji-resource-fetched', createRenderExperience('emoji-provider')),
27
+ 'emoji-picker-opened': new UFOExperience('emoji-picker-opened', createRenderExperience('emoji-picker')),
28
+ 'emoji-selection-recorded': new UFOExperience('emoji-selection-recorded', createInlineExperience('emoji-picker')),
29
+ 'emoji-uploaded': new UFOExperience('emoji-uploaded', createInlineExperience('emoji-picker')),
30
+ 'emoji-searched': new UFOExperience('emoji-searched', createInlineExperience('emoji-picker'))
31
+ };
32
+ export var sampledUfoRenderedEmoji = function sampledUfoRenderedEmoji(emojiId) {
33
+ return withSampling(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
34
+ };
@@ -0,0 +1,39 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { withSampling } from './samplingUfo';
3
+
4
+ var useConstructor = function useConstructor(callback) {
5
+ var hasBeenFired = useRef(false);
6
+
7
+ if (!hasBeenFired.current) {
8
+ callback();
9
+ hasBeenFired.current = true;
10
+ }
11
+
12
+ return null;
13
+ };
14
+ /**
15
+ * A hook to start an experience and to auto abort the experience when the parent component is unmounted.
16
+ * Use this instead of a direct call to `experience.start`. If you need to restart the experience
17
+ * simply trigger an unmount and remount of the parent component.
18
+ * @param experience the experience to start and abort
19
+ */
20
+
21
+
22
+ export var useSampledUFOComponentExperience = function useSampledUFOComponentExperience(experience, samplingRate, metadata) {
23
+ useEffect(function () {
24
+ return function () {
25
+ withSampling(experience).abort();
26
+ }; // we want this cleanup to only happen on unmount so this is a legit use of empty array
27
+ // eslint-disable-next-line react-hooks/exhaustive-deps
28
+ }, []);
29
+ useConstructor(function () {
30
+ withSampling(experience).start({
31
+ samplingRate: samplingRate
32
+ });
33
+
34
+ if (metadata) {
35
+ experience.addMetadata(metadata);
36
+ }
37
+ });
38
+ return null;
39
+ };
@@ -19,4 +19,8 @@ export var selectedToneStorageKey = "".concat(localStoragePrefix, ".selectedTone
19
19
  export var defaultCategories = ['PEOPLE', 'NATURE', 'FOODS', 'ACTIVITY', 'PLACES', 'OBJECTS', 'SYMBOLS', 'FLAGS'];
20
20
  export var defaultListLimit = 50;
21
21
  export var migrationUserId = 'hipchat_migration_emoticons';
22
- export var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker';
22
+ export var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker'; // This is the base sampling rate in Emoji
23
+
24
+ export var SAMPLING_RATE_EMOJI_RENDERED_EXP = 0.05; // This rate is used in ResourceEmoji which will be used in stead of base sampling rate above
25
+
26
+ export var SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI = 0.1; // add more sampling rate in parent components like EmojiTypeAheadItem.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "64.2.0",
3
+ "version": "64.4.0",
4
4
  "sideEffects": false
5
5
  }
@@ -59,6 +59,7 @@ export declare class EmojiResource extends AbstractResource<string, EmojiSearchR
59
59
  protected selectedTone: ToneSelection;
60
60
  protected currentUser?: User;
61
61
  constructor(config: EmojiResourceConfig);
62
+ private getProviderType;
62
63
  protected initEmojiRepository(emojiResponses: EmojiResponse[]): void;
63
64
  protected initSiteEmojiResource(emojiResponse: EmojiResponse, provider: ServiceConfig): Promise<void>;
64
65
  private performRetries;
@@ -1,8 +1,8 @@
1
- import React, { ContextType } from 'react';
1
+ import PropTypes from 'prop-types';
2
2
  import { PureComponent } from 'react';
3
3
  import { EmojiDescription } from '../../types';
4
4
  import { Props as EmojiProps } from './Emoji';
5
- import { EmojiContext, EmojiContextType } from '../../context/EmojiContext';
5
+ import { EmojiContext } from './internal-types';
6
6
  export interface State {
7
7
  cachedEmoji?: EmojiDescription;
8
8
  invalidImage?: boolean;
@@ -19,13 +19,15 @@ export declare const CachingEmoji: (props: CachingEmojiProps) => JSX.Element;
19
19
  * rendering paths depending on caching strategy.
20
20
  */
21
21
  export declare class CachingMediaEmoji extends PureComponent<CachingEmojiProps, State> {
22
+ static contextTypes: {
23
+ emoji: PropTypes.Requireable<any>;
24
+ };
22
25
  private mounted;
23
- static contextType: React.Context<EmojiContextType>;
24
- context: ContextType<typeof EmojiContext>;
25
- constructor(props: EmojiProps, context: ContextType<typeof EmojiContext>);
26
+ context: EmojiContext;
27
+ constructor(props: EmojiProps, context: EmojiContext);
26
28
  componentDidMount(): void;
27
29
  componentWillUnmount(): void;
28
- UNSAFE_componentWillReceiveProps(nextProps: EmojiProps, nextContext: EmojiContextType): void;
30
+ UNSAFE_componentWillReceiveProps(nextProps: EmojiProps, nextContext: EmojiContext): void;
29
31
  private loadEmoji;
30
32
  private handleLoadError;
31
33
  render(): JSX.Element;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { PureComponent } from 'react';
3
2
  import { WrappedComponentProps } from 'react-intl-next';
4
3
  import { EmojiDescription, EmojiDescriptionWithVariations, Message, OnToneSelected, OnToneSelectorCancelled, ToneSelection } from '../../types';
@@ -37,7 +36,7 @@ export declare class EmojiActions extends PureComponent<Props & WrappedComponent
37
36
  renderAddOwnEmoji(): JSX.Element | null;
38
37
  render(): JSX.Element;
39
38
  }
40
- declare const _default: React.FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
41
- WrappedComponent: React.ComponentType<Props & WrappedComponentProps<"intl">>;
39
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
40
+ WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps<"intl">>;
42
41
  };
43
42
  export default _default;
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  import { WrappedComponentProps } from 'react-intl-next';
3
3
  import { EmojiDescription } from '../../types';
4
4
  export interface OnDeleteEmoji {
@@ -14,7 +14,7 @@ export interface State {
14
14
  loading: boolean;
15
15
  error: boolean;
16
16
  }
17
- declare const _default: React.FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
18
- WrappedComponent: React.ComponentType<Props & WrappedComponentProps<"intl">>;
17
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
18
+ WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps<"intl">>;
19
19
  };
20
20
  export default _default;
@@ -1,9 +1,10 @@
1
1
  import { PureComponent } from 'react';
2
2
  import { Message } from '../../types';
3
+ import { SerializedStyles } from '@emotion/core';
3
4
  export interface Props {
4
5
  message: Message;
5
- className: string;
6
6
  tooltip?: boolean;
7
+ messageStyles: SerializedStyles;
7
8
  }
8
9
  export default class EmojiErrorMessage extends PureComponent<Props> {
9
10
  renderWithTooltip(): JSX.Element;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { PureComponent } from 'react';
3
2
  import { WrappedComponentProps } from 'react-intl-next';
4
3
  import { EmojiDescription, EmojiDescriptionWithVariations, OnToneSelected, OnToneSelectorCancelled, ToneSelection } from '../../types';
@@ -26,7 +25,7 @@ export declare class EmojiPreview extends PureComponent<Props & WrappedComponent
26
25
  renderAddOwnEmoji(): JSX.Element | null;
27
26
  render(): JSX.Element;
28
27
  }
29
- declare const _default: React.FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
30
- WrappedComponent: React.ComponentType<Props & WrappedComponentProps<"intl">>;
28
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
29
+ WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps<"intl">>;
31
30
  };
32
31
  export default _default;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import { EmojiDescription } from '../../types';
3
+ declare type Props = {
4
+ emoji: EmojiDescription;
5
+ };
6
+ export declare const EmojiPreviewComponent: ({ emoji }: Props) => JSX.Element;
7
+ export {};
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ /// <reference types="react" />
2
2
  import { WrappedComponentProps } from 'react-intl-next';
3
3
  import { Message } from '../../types';
4
4
  import { UploadStatus } from './internal-types';
@@ -10,7 +10,7 @@ export interface EmojiUploadPreviewProps {
10
10
  onUploadCancelled: () => void;
11
11
  onAddEmoji: () => void;
12
12
  }
13
- declare const _default: React.FC<import("react-intl-next").WithIntlProps<EmojiUploadPreviewProps & WrappedComponentProps<"intl">>> & {
14
- WrappedComponent: React.ComponentType<EmojiUploadPreviewProps & WrappedComponentProps<"intl">>;
13
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<EmojiUploadPreviewProps & WrappedComponentProps<"intl">>> & {
14
+ WrappedComponent: import("react").ComponentType<EmojiUploadPreviewProps & WrappedComponentProps<"intl">>;
15
15
  };
16
16
  export default _default;