@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,13 +1,15 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import React from 'react';
2
+
3
+ /** @jsx jsx */
4
+ import { jsx } from '@emotion/core';
3
5
  import { PureComponent } from 'react';
4
6
  import { FormattedMessage } from 'react-intl-next';
5
- import classNames from 'classnames';
6
- import * as styles from './styles';
7
7
  import { supportsUploadFeature } from '../../api/EmojiResource';
8
8
  import EmojiUploadPickerWithIntl from '../common/EmojiUploadPicker';
9
9
  import { uploadEmoji } from '../common/UploadEmoji';
10
10
  import { createAndFireEventInElementsChannel, selectedFileEvent, uploadCancelButton, uploadConfirmButton } from '../../util/analytics';
11
+ import { emojiUploadFooter, emojiUploadWidget } from './styles';
12
+ import { ufoExperiences } from '../../util/analytics/ufoExperiences';
11
13
  export default class EmojiUploadComponent extends PureComponent {
12
14
  constructor(props) {
13
15
  super(props);
@@ -16,6 +18,10 @@ export default class EmojiUploadComponent extends PureComponent {
16
18
  const {
17
19
  emojiProvider
18
20
  } = this.props;
21
+ ufoExperiences['emoji-uploaded'].start();
22
+ ufoExperiences['emoji-uploaded'].addMetadata({
23
+ retry
24
+ });
19
25
  this.fireAnalytics(uploadConfirmButton({
20
26
  retry
21
27
  }));
@@ -77,17 +83,21 @@ export default class EmojiUploadComponent extends PureComponent {
77
83
  this.state = {};
78
84
  }
79
85
 
86
+ componentWillUnmount() {
87
+ ufoExperiences['emoji-uploaded'].abort();
88
+ }
89
+
80
90
  render() {
81
91
  const {
82
92
  uploadErrorMessage
83
93
  } = this.state;
84
- const errorMessage = uploadErrorMessage ? /*#__PURE__*/React.createElement(FormattedMessage, uploadErrorMessage) : null;
85
- return /*#__PURE__*/React.createElement("div", {
86
- className: classNames([styles.emojiUploadWidget]),
94
+ const errorMessage = uploadErrorMessage ? jsx(FormattedMessage, uploadErrorMessage) : null;
95
+ return jsx("div", {
96
+ css: emojiUploadWidget,
87
97
  ref: this.props.onUploaderRef
88
- }, /*#__PURE__*/React.createElement("div", {
89
- className: classNames([styles.emojiUploadFooter])
90
- }, /*#__PURE__*/React.createElement(EmojiUploadPickerWithIntl, {
98
+ }, jsx("div", {
99
+ css: emojiUploadFooter
100
+ }, jsx(EmojiUploadPickerWithIntl, {
91
101
  ref: this.onUploaderRef,
92
102
  onFileChooserClicked: this.onFileChooserClicked,
93
103
  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 const emojiUploadWidget = style({
5
+ export const emojiUploadWidget = css({
6
6
  display: 'flex',
7
7
  flexDirection: 'column',
8
8
  justifyContent: 'center',
@@ -16,6 +16,6 @@ export const emojiUploadWidget = style({
16
16
  marginTop: '-16px'
17
17
  }); /// Footer
18
18
 
19
- export const emojiUploadFooter = style({
19
+ export const emojiUploadFooter = css({
20
20
  flex: '0 0 auto'
21
21
  });
@@ -6,19 +6,20 @@ 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
- SearchSort } from './types';
24
+ SearchSort, UfoExperienceName, UfoComponentName } from './types';
24
25
  export default EmojiPicker;
@@ -42,4 +42,23 @@ export let ProviderTypes;
42
42
  ProviderTypes["STANDARD"] = "STANDARD";
43
43
  ProviderTypes["ATLASSIAN"] = "ATLASSIAN";
44
44
  ProviderTypes["UNKNOWN"] = "UNKNOWN";
45
- })(ProviderTypes || (ProviderTypes = {}));
45
+ })(ProviderTypes || (ProviderTypes = {}));
46
+
47
+ export let UfoExperienceName;
48
+
49
+ (function (UfoExperienceName) {
50
+ UfoExperienceName["EMOJI_RENDERED"] = "emoji-rendered";
51
+ UfoExperienceName["EMOJI_RESOURCE_FETCHED"] = "emoji-resource-fetched";
52
+ UfoExperienceName["EMOJI_PICKER_OPENED"] = "emoji-picker-opened";
53
+ UfoExperienceName["EMOJI_SELECTION_RECORDED"] = "emoji-selection-recorded";
54
+ UfoExperienceName["EMOJI_UPLOADED"] = "emoji-uploaded";
55
+ UfoExperienceName["EMOJI_SEARCHED"] = "emoji-searched";
56
+ })(UfoExperienceName || (UfoExperienceName = {}));
57
+
58
+ export let UfoComponentName;
59
+
60
+ (function (UfoComponentName) {
61
+ UfoComponentName["EMOJI"] = "emoji";
62
+ UfoComponentName["EMOJI_PICKER"] = "emoji-picker";
63
+ UfoComponentName["EMOJI_PROVIDER"] = "emoji-provider";
64
+ })(UfoComponentName || (UfoComponentName = {}));
@@ -1,32 +1,5 @@
1
1
  import { createAndFireEvent } from '@atlaskit/analytics-next';
2
2
  import { name as packageName, version as packageVersion } from '../../version.json';
3
- import { ExperiencePerformanceTypes, ExperienceTypes, ConcurrentExperience } from '@atlaskit/ufo';
4
- import { withSampling } from './samplingUfo';
5
-
6
- const createRenderExperience = componentName => {
7
- return {
8
- platform: {
9
- component: componentName
10
- },
11
- type: ExperienceTypes.Load,
12
- performanceType: ExperiencePerformanceTypes.PageSegmentLoad
13
- };
14
- }; // const createInlineExperience = (componentName: string) => {
15
- // return {
16
- // platform: { component: componentName },
17
- // type: ExperienceTypes.Experience,
18
- // performanceType: ExperiencePerformanceTypes.InlineResult,
19
- // };
20
- // };
21
-
22
-
23
- export const ufoExperiences = {
24
- 'emoji-rendered': new ConcurrentExperience('emoji-rendered', createRenderExperience('emoji')),
25
- 'emoji-resource-fetched': new ConcurrentExperience('emoji-resource-fetched', createRenderExperience('emoji-provider'))
26
- };
27
- export const sampledUfoRenderedEmoji = emojiId => {
28
- return withSampling(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
29
- };
30
3
  export const createAndFireEventInElementsChannel = createAndFireEvent('fabric-elements');
31
4
 
32
5
  const createEvent = (eventType, action, actionSubject, actionSubjectId, attributes = {}) => ({
@@ -41,12 +14,16 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
41
14
  }
42
15
  });
43
16
 
44
- export const insertionSucceeded = source => createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
45
- source
46
- });
47
- export const insertionFailed = source => createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
48
- source
49
- });
17
+ export const recordSucceeded = source => {
18
+ return createEvent('operational', 'succeeded', 'recordEmojiSelection', undefined, {
19
+ source
20
+ });
21
+ };
22
+ export const recordFailed = source => {
23
+ return createEvent('operational', 'failed', 'recordEmojiSelection', undefined, {
24
+ source
25
+ });
26
+ };
50
27
 
51
28
  const emojiPickerEvent = (action, attributes = {}, actionSubjectId) => createEvent('ui', action, 'emojiPicker', actionSubjectId, attributes);
52
29
 
@@ -146,15 +123,17 @@ export const typeaheadSelectedEvent = (pressed, duration, emoji, emojiList, quer
146
123
  export const typeaheadRenderedEvent = (duration, query, emojiList) => createEvent('operational', 'rendered', 'emojiTypeahead', undefined, {
147
124
  duration,
148
125
  ...extractCommonAttributes(query, emojiList)
149
- });
126
+ }); // it's used in editor typeahead to fire success record analytics
127
+
150
128
  export const recordSelectionSucceededSli = options => () => {
151
129
  if (options && options.createAnalyticsEvent) {
152
- createAndFireEvent('editor')(insertionSucceeded('typeahead'))(options.createAnalyticsEvent);
130
+ createAndFireEvent('editor')(recordSucceeded('typeahead'))(options.createAnalyticsEvent);
153
131
  }
154
- };
132
+ }; // it's used in editor typeahead to fire failure record analytics
133
+
155
134
  export const recordSelectionFailedSli = options => err => {
156
135
  if (options && options.createAnalyticsEvent) {
157
- createAndFireEvent('editor')(insertionFailed('typeahead'))(options.createAnalyticsEvent);
136
+ createAndFireEvent('editor')(recordFailed('typeahead'))(options.createAnalyticsEvent);
158
137
  }
159
138
 
160
139
  return Promise.reject(err);
@@ -1,3 +1,4 @@
1
1
  export { ufoExperiencesSampled, clearSampled, isExperienceSampled, withSampling } from './samplingUfo';
2
- export { categoryClickedEvent, createAndFireEventInElementsChannel, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, insertionFailed, insertionSucceeded, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, recordSelectionFailedSli, recordSelectionSucceededSli, sampledUfoRenderedEmoji, selectedFileEvent, toneSelectedEvent, toneSelectorClosedEvent, toneSelectorOpenedEvent, typeaheadCancelledEvent, typeaheadRenderedEvent, typeaheadSelectedEvent, ufoExperiences, uploadBeginButton, uploadCancelButton, uploadConfirmButton, uploadFailedEvent, uploadSucceededEvent } from './analytics';
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';
3
4
  export { useSampledUFOComponentExperience } from './useSampledUFOComponentExperience';
@@ -0,0 +1,35 @@
1
+ import { UfoComponentName, UfoExperienceName } from '../../types';
2
+ import { ExperiencePerformanceTypes, ExperienceTypes, ConcurrentExperience, UFOExperience } from '@atlaskit/ufo';
3
+ import { withSampling } from './samplingUfo';
4
+
5
+ const createRenderExperience = componentName => {
6
+ return {
7
+ platform: {
8
+ component: componentName
9
+ },
10
+ type: ExperienceTypes.Load,
11
+ performanceType: ExperiencePerformanceTypes.PageSegmentLoad
12
+ };
13
+ };
14
+
15
+ const createInlineExperience = componentName => {
16
+ return {
17
+ platform: {
18
+ component: componentName
19
+ },
20
+ type: ExperienceTypes.Experience,
21
+ performanceType: ExperiencePerformanceTypes.InlineResult
22
+ };
23
+ };
24
+
25
+ export const ufoExperiences = {
26
+ 'emoji-rendered': new ConcurrentExperience(UfoExperienceName.EMOJI_RENDERED, createRenderExperience(UfoComponentName.EMOJI)),
27
+ 'emoji-resource-fetched': new ConcurrentExperience(UfoExperienceName.EMOJI_RESOURCE_FETCHED, createRenderExperience(UfoComponentName.EMOJI_PROVIDER)),
28
+ 'emoji-picker-opened': new UFOExperience(UfoExperienceName.EMOJI_PICKER_OPENED, createRenderExperience(UfoComponentName.EMOJI_PICKER)),
29
+ 'emoji-selection-recorded': new UFOExperience(UfoExperienceName.EMOJI_SELECTION_RECORDED, createInlineExperience(UfoComponentName.EMOJI_PROVIDER)),
30
+ 'emoji-uploaded': new UFOExperience(UfoExperienceName.EMOJI_UPLOADED, createInlineExperience(UfoComponentName.EMOJI_PICKER)),
31
+ 'emoji-searched': new UFOExperience(UfoExperienceName.EMOJI_SEARCHED, createInlineExperience(UfoComponentName.EMOJI_PICKER))
32
+ };
33
+ export const sampledUfoRenderedEmoji = emojiId => {
34
+ return withSampling(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
35
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "64.2.1",
3
+ "version": "64.4.1",
4
4
  "sideEffects": false
5
5
  }
@@ -178,7 +178,11 @@ var SiteEmojiResource = /*#__PURE__*/function () {
178
178
  }, {
179
179
  key: "findEmoji",
180
180
  value: function findEmoji(emojiId) {
181
- var path = "../".concat(emojiId.id);
181
+ if (!emojiId.id) {
182
+ return Promise.reject(false);
183
+ }
184
+
185
+ var path = "../".concat(encodeURIComponent(emojiId.id));
182
186
  return emojiRequest(this.siteServiceConfig, {
183
187
  path: path
184
188
  }).then(function (serviceResponse) {
@@ -202,7 +206,11 @@ var SiteEmojiResource = /*#__PURE__*/function () {
202
206
  return Promise.reject(false);
203
207
  }
204
208
 
205
- var path = "".concat(emoji.id);
209
+ if (!emoji.id) {
210
+ return Promise.reject(false);
211
+ }
212
+
213
+ var path = "".concat(encodeURIComponent(emoji.id));
206
214
  var requestInit = {
207
215
  method: 'DELETE'
208
216
  };
@@ -14,6 +14,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
14
14
 
15
15
  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; } }
16
16
 
17
+ import PropTypes from 'prop-types';
17
18
  import React from 'react';
18
19
  import { PureComponent } from 'react';
19
20
  import { shouldUseAltRepresentation } from '../../api/EmojiUtils';
@@ -21,7 +22,6 @@ import { isEmojiDescription, isMediaEmoji, isPromise } from '../../util/type-hel
21
22
  import debug from '../../util/logger';
22
23
  import Emoji from './Emoji';
23
24
  import EmojiPlaceholder from './EmojiPlaceholder';
24
- import { EmojiContext } from '../../context/EmojiContext';
25
25
  import { UfoErrorBoundary } from './UfoErrorBoundary';
26
26
  import { sampledUfoRenderedEmoji, ufoExperiences, useSampledUFOComponentExperience } from '../../util/analytics';
27
27
  import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
@@ -67,7 +67,7 @@ export var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
67
67
 
68
68
  _classCallCheck(this, CachingMediaEmoji);
69
69
 
70
- _this = _super.call(this, props);
70
+ _this = _super.call(this, props, context);
71
71
 
72
72
  _defineProperty(_assertThisInitialized(_this), "mounted", false);
73
73
 
@@ -122,10 +122,6 @@ export var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
122
122
  value: function loadEmoji(emoji, context, forceLoad) {
123
123
  var _this2 = this;
124
124
 
125
- if (!context) {
126
- return;
127
- }
128
-
129
125
  if (!context.emoji) {
130
126
  return undefined;
131
127
  }
@@ -219,6 +215,8 @@ export var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
219
215
  return CachingMediaEmoji;
220
216
  }(PureComponent);
221
217
 
222
- _defineProperty(CachingMediaEmoji, "contextType", EmojiContext);
218
+ _defineProperty(CachingMediaEmoji, "contextTypes", {
219
+ emoji: PropTypes.object
220
+ });
223
221
 
224
222
  export default CachingEmoji;
@@ -1,16 +1,18 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/core';
1
3
  import Button from '@atlaskit/button/custom-theme-button';
2
4
  import CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';
3
- import React from 'react';
4
5
  import { token } from '@atlaskit/tokens';
5
6
  import { N500 } from '@atlaskit/theme/colors';
6
7
  import { deleteEmojiLabel } from '../../util/constants';
7
- import * as styles from './styles';
8
+ import { emojiDeleteButton, deleteButton } from './styles';
8
9
 
9
10
  var DeleteButton = function DeleteButton(props) {
10
- return /*#__PURE__*/React.createElement("span", {
11
- className: styles.deleteButton
12
- }, /*#__PURE__*/React.createElement(Button, {
13
- iconBefore: /*#__PURE__*/React.createElement(CrossCircleIcon, {
11
+ return jsx("span", {
12
+ css: deleteButton,
13
+ className: emojiDeleteButton
14
+ }, jsx(Button, {
15
+ iconBefore: jsx(CrossCircleIcon, {
14
16
  label: deleteEmojiLabel,
15
17
  primaryColor: token('color.text.subtle', N500),
16
18
  size: "small"
@@ -5,14 +5,15 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
5
5
 
6
6
  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; }
7
7
 
8
- import classNames from 'classnames';
8
+ /** @jsx jsx */
9
+ import { jsx } from '@emotion/core';
9
10
  import React from 'react';
10
11
  import { shouldUseAltRepresentation } from '../../api/EmojiUtils';
11
12
  import { deleteEmojiLabel } from '../../util/constants';
12
13
  import { isImageRepresentation, isMediaRepresentation, isSpriteRepresentation, toEmojiId } from '../../util/type-helpers';
13
14
  import { leftClick } from '../../util/mouse';
14
- import * as styles from './styles';
15
15
  import DeleteButton from './DeleteButton';
16
+ import { emojiContainer, emojiNodeStyles, commonSelectedStyles, selectOnHoverStyles, emojiSprite, emojiMainStyle, emojiStyles, emojiImage } from './styles';
16
17
  import { sampledUfoRenderedEmoji } from '../../util/analytics';
17
18
 
18
19
  var handleMouseDown = function handleMouseDown(props, event) {
@@ -80,8 +81,6 @@ var handleImageError = function handleImageError(props, event) {
80
81
 
81
82
 
82
83
  var renderAsSprite = function renderAsSprite(props) {
83
- var _classes;
84
-
85
84
  var emoji = props.emoji,
86
85
  fitToHeight = props.fitToHeight,
87
86
  selected = props.selected,
@@ -91,18 +90,15 @@ var renderAsSprite = function renderAsSprite(props) {
91
90
  shouldBeInteractive = props.shouldBeInteractive;
92
91
  var representation = emoji.representation;
93
92
  var sprite = representation.sprite;
94
- var classes = (_classes = {}, _defineProperty(_classes, styles.emojiContainer, true), _defineProperty(_classes, styles.emojiNode, true), _defineProperty(_classes, styles.selected, selected), _defineProperty(_classes, styles.selectOnHover, selectOnHover), _classes);
95
-
96
- if (className) {
97
- classes[className] = true;
98
- }
99
-
93
+ var classes = "".concat(emojiNodeStyles, " ").concat(selected ? commonSelectedStyles : '', " ").concat(selectOnHover ? selectOnHoverStyles : '', " ").concat(className ? className : '');
100
94
  var sizing = {};
101
95
 
102
96
  if (fitToHeight) {
103
97
  sizing = {
104
98
  width: "".concat(fitToHeight, "px"),
105
- height: "".concat(fitToHeight, "px")
99
+ height: "".concat(fitToHeight, "px"),
100
+ minHeight: "".concat(fitToHeight, "px"),
101
+ minWidth: "".concat(fitToHeight, "px")
106
102
  };
107
103
  }
108
104
 
@@ -115,14 +111,15 @@ var renderAsSprite = function renderAsSprite(props) {
115
111
  backgroundSize: "".concat(sprite.column * 100, "% ").concat(sprite.row * 100, "%")
116
112
  }, sizing);
117
113
 
118
- var emojiNode = /*#__PURE__*/React.createElement("span", {
119
- className: styles.emojiSprite,
114
+ var emojiNode = jsx("span", {
115
+ className: emojiSprite,
120
116
  style: style
121
117
  }, "\xA0");
122
- return /*#__PURE__*/React.createElement("span", {
118
+ return jsx("span", {
123
119
  tabIndex: shouldBeInteractive ? 0 : undefined,
124
120
  role: shouldBeInteractive ? 'button' : undefined,
125
- className: classNames(classes),
121
+ css: emojiContainer,
122
+ className: classes,
126
123
  onKeyPress: function onKeyPress(event) {
127
124
  return handleKeyPress(props, event);
128
125
  },
@@ -139,8 +136,6 @@ var renderAsSprite = function renderAsSprite(props) {
139
136
 
140
137
 
141
138
  var renderAsImage = function renderAsImage(props) {
142
- var _classes2;
143
-
144
139
  var emoji = props.emoji,
145
140
  fitToHeight = props.fitToHeight,
146
141
  selected = props.selected,
@@ -149,12 +144,7 @@ var renderAsImage = function renderAsImage(props) {
149
144
  showTooltip = props.showTooltip,
150
145
  showDelete = props.showDelete,
151
146
  shouldBeInteractive = props.shouldBeInteractive;
152
- var classes = (_classes2 = {}, _defineProperty(_classes2, styles.emoji, true), _defineProperty(_classes2, styles.emojiNode, true), _defineProperty(_classes2, styles.selected, selected), _defineProperty(_classes2, styles.selectOnHover, selectOnHover), _defineProperty(_classes2, styles.emojiImage, true), _classes2);
153
-
154
- if (className) {
155
- classes[className] = true;
156
- }
157
-
147
+ var classes = "".concat(emojiMainStyle, " ").concat(emojiNodeStyles, " ").concat(selected ? commonSelectedStyles : '', " ").concat(selectOnHover ? selectOnHoverStyles : '', " ").concat(emojiImage, " ").concat(className ? className : '');
158
148
  var width;
159
149
  var height;
160
150
  var src;
@@ -173,7 +163,7 @@ var renderAsImage = function renderAsImage(props) {
173
163
  var deleteButton;
174
164
 
175
165
  if (showDelete) {
176
- deleteButton = /*#__PURE__*/React.createElement(DeleteButton, {
166
+ deleteButton = jsx(DeleteButton, {
177
167
  onClick: function onClick(event) {
178
168
  return handleDelete(props, event);
179
169
  }
@@ -203,7 +193,7 @@ var renderAsImage = function renderAsImage(props) {
203
193
  // TODO: remove @ts-ignore for the <img> below when the @types/react will be bumped from v16.8.0 to v16.9.20 or higher.
204
194
 
205
195
 
206
- var emojiNode = /*#__PURE__*/React.createElement("img", _extends({
196
+ var emojiNode = jsx("img", _extends({
207
197
  // @ts-ignore
208
198
  loading: "lazy",
209
199
  src: src,
@@ -219,10 +209,11 @@ var renderAsImage = function renderAsImage(props) {
219
209
  onError: onError,
220
210
  onLoad: onLoad
221
211
  }, sizing));
222
- return /*#__PURE__*/React.createElement("span", {
212
+ return jsx("span", {
213
+ css: emojiStyles,
223
214
  tabIndex: shouldBeInteractive ? 0 : undefined,
224
215
  role: shouldBeInteractive ? 'button' : undefined,
225
- className: classNames(classes),
216
+ className: classes,
226
217
  onKeyPress: function onKeyPress(event) {
227
218
  return handleKeyPress(props, event);
228
219
  },
@@ -10,14 +10,12 @@ 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 classNames from 'classnames';
14
- import React from 'react';
13
+ /** @jsx jsx */
14
+ import { jsx } from '@emotion/core';
15
15
  import { PureComponent } from 'react';
16
16
  import { FormattedMessage, injectIntl } from 'react-intl-next';
17
17
  import EmojiDeletePreview from '../common/EmojiDeletePreview';
18
18
  import EmojiUploadPicker from '../common/EmojiUploadPicker';
19
- import * as styles from './styles';
20
- import * as footerStyles from '../picker/styles';
21
19
  import EmojiPickerListSearch from '../picker/EmojiPickerListSearch';
22
20
  import ToneSelector from './ToneSelector';
23
21
  import EmojiButton from './EmojiButton';
@@ -25,6 +23,8 @@ import { messages } from '../i18n';
25
23
  import AkButton from '@atlaskit/button/standard-button';
26
24
  import AddIcon from '@atlaskit/icon/glyph/add';
27
25
  import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
26
+ import { addCustomEmoji, addCustomEmojiButton, emojiPickerAddEmoji, emojiToneSelectorContainer } from './styles';
27
+ import { emojiActionsContainerWithBottomShadow, emojiPickerFooter } from '../picker/styles';
28
28
  export var EmojiActions = /*#__PURE__*/function (_PureComponent) {
29
29
  _inherits(EmojiActions, _PureComponent);
30
30
 
@@ -96,13 +96,13 @@ export var EmojiActions = /*#__PURE__*/function (_PureComponent) {
96
96
  previewEmoji = previewEmoji.skinVariations[(selectedTone || 1) - 1];
97
97
  }
98
98
 
99
- return /*#__PURE__*/React.createElement("div", {
100
- className: styles.emojiToneSelectorContainer
101
- }, this.state.selectingTone && /*#__PURE__*/React.createElement(ToneSelector, {
99
+ return jsx("div", {
100
+ css: emojiToneSelectorContainer
101
+ }, this.state.selectingTone && jsx(ToneSelector, {
102
102
  emoji: toneEmoji,
103
103
  onToneSelected: this.onToneSelected,
104
104
  previewEmojiId: previewEmoji.id
105
- }), /*#__PURE__*/React.createElement(EmojiButton, {
105
+ }), jsx(EmojiButton, {
106
106
  ariaExpanded: this.state.selectingTone,
107
107
  emoji: previewEmoji,
108
108
  selectOnHover: true,
@@ -126,17 +126,18 @@ export var EmojiActions = /*#__PURE__*/function (_PureComponent) {
126
126
  return null;
127
127
  }
128
128
 
129
- return /*#__PURE__*/React.createElement("div", {
130
- className: styles.AddCustomEmoji
131
- }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel, function (label) {
132
- return /*#__PURE__*/React.createElement(AkButton, {
129
+ return jsx("div", {
130
+ css: addCustomEmoji
131
+ }, jsx(FormattedMessage, messages.addCustomEmojiLabel, function (label) {
132
+ return jsx(AkButton, {
133
133
  onClick: onOpenUpload,
134
- iconBefore: /*#__PURE__*/React.createElement(AddIcon, {
134
+ iconBefore: jsx(AddIcon, {
135
135
  label: formatMessage(messages.addCustomEmojiLabel),
136
136
  size: "small"
137
137
  }),
138
138
  appearance: "subtle",
139
- className: styles.addCustomEmojiButton + ' emoji-picker-add-emoji'
139
+ css: addCustomEmojiButton,
140
+ className: emojiPickerAddEmoji
140
141
  }, label);
141
142
  }));
142
143
  }
@@ -155,12 +156,12 @@ export var EmojiActions = /*#__PURE__*/function (_PureComponent) {
155
156
  emojiToDelete = _this$props3.emojiToDelete,
156
157
  onChange = _this$props3.onChange,
157
158
  query = _this$props3.query;
158
- var previewFooterClassnames = classNames([footerStyles.emojiPickerFooter, footerStyles.emojiActionsContainerWithBottomShadow]);
159
+ var previewFooterClassnames = [emojiPickerFooter, emojiActionsContainerWithBottomShadow];
159
160
 
160
161
  if (uploading) {
161
- return /*#__PURE__*/React.createElement("div", {
162
- className: previewFooterClassnames
163
- }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
162
+ return jsx("div", {
163
+ css: previewFooterClassnames
164
+ }, jsx(EmojiUploadPicker, {
164
165
  onUploadCancelled: onUploadCancelled,
165
166
  onUploadEmoji: onUploadEmoji,
166
167
  onFileChooserClicked: onFileChooserClicked,
@@ -170,25 +171,25 @@ export var EmojiActions = /*#__PURE__*/function (_PureComponent) {
170
171
  }
171
172
 
172
173
  if (emojiToDelete) {
173
- return /*#__PURE__*/React.createElement("div", {
174
- className: previewFooterClassnames
175
- }, /*#__PURE__*/React.createElement(EmojiDeletePreview, {
174
+ return jsx("div", {
175
+ css: previewFooterClassnames
176
+ }, jsx(EmojiDeletePreview, {
176
177
  emoji: emojiToDelete,
177
178
  onDeleteEmoji: onDeleteEmoji,
178
179
  onCloseDelete: onCloseDelete
179
180
  }));
180
181
  }
181
182
 
182
- return /*#__PURE__*/React.createElement("div", {
183
- className: previewFooterClassnames,
183
+ return jsx("div", {
184
+ css: previewFooterClassnames,
184
185
  onMouseLeave: this.onMouseLeave
185
- }, /*#__PURE__*/React.createElement("div", {
186
+ }, jsx("div", {
186
187
  style: {
187
188
  display: 'flex',
188
189
  justifyContent: 'flex-end',
189
190
  alignItems: 'center'
190
191
  }
191
- }, !this.state.selectingTone && /*#__PURE__*/React.createElement(EmojiPickerListSearch, {
192
+ }, !this.state.selectingTone && jsx(EmojiPickerListSearch, {
192
193
  onChange: onChange,
193
194
  query: query
194
195
  }), this.renderTones()), this.renderAddOwnEmoji());
@@ -1,8 +1,9 @@
1
- import classNames from 'classnames';
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/core';
2
3
  import React, { forwardRef } from 'react';
3
- import * as styles from './styles';
4
4
  import Emoji from './Emoji';
5
5
  import { leftClick } from '../../util/mouse';
6
+ import { emojiButton, hiddenToneButton } from './styles';
6
7
 
7
8
  var handleMouseDown = function handleMouseDown(props, event) {
8
9
  var onSelected = props.onSelected;
@@ -28,11 +29,10 @@ export var EmojiButton = /*#__PURE__*/forwardRef(function (props, ref) {
28
29
  ariaLabelText = props.ariaLabelText,
29
30
  ariaExpanded = props.ariaExpanded,
30
31
  shouldHideButton = props.shouldHideButton;
31
- var classes = [shouldHideButton ? styles.hiddenToneButton : styles.emojiButton];
32
- return /*#__PURE__*/React.createElement("button", {
32
+ return jsx("button", {
33
33
  ref: ref,
34
34
  "aria-expanded": ariaExpanded,
35
- className: classNames(classes),
35
+ css: shouldHideButton ? hiddenToneButton : emojiButton,
36
36
  onMouseDown: function onMouseDown(event) {
37
37
  handleMouseDown(props, event);
38
38
  },
@@ -40,7 +40,7 @@ export var EmojiButton = /*#__PURE__*/forwardRef(function (props, ref) {
40
40
  handleKeyPress(props, event);
41
41
  },
42
42
  "aria-label": ariaLabelText
43
- }, /*#__PURE__*/React.createElement(Emoji, {
43
+ }, jsx(Emoji, {
44
44
  emoji: emoji,
45
45
  selectOnHover: selectOnHover
46
46
  }));