@atlaskit/emoji 64.6.1 → 64.7.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 (61) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/api/EmojiRepository.js +4 -0
  3. package/dist/cjs/api/EmojiResource.js +8 -0
  4. package/dist/cjs/api/EmojiUtils.js +4 -0
  5. package/dist/cjs/api/internal/UsageFrequencyTracker.js +4 -1
  6. package/dist/cjs/components/common/CachingEmoji.js +13 -10
  7. package/dist/cjs/components/common/DeleteButton.js +2 -1
  8. package/dist/cjs/components/common/Emoji.js +76 -20
  9. package/dist/cjs/components/common/EmojiPlaceholder.js +1 -0
  10. package/dist/cjs/components/common/Popup.js +21 -1
  11. package/dist/cjs/components/common/ResourcedEmojiComponent.js +12 -1
  12. package/dist/cjs/components/picker/EmojiPickerComponent.js +4 -2
  13. package/dist/cjs/components/picker/EmojiPickerListSearch.js +5 -0
  14. package/dist/cjs/components/picker/styles.js +2 -0
  15. package/dist/cjs/types.js +25 -2
  16. package/dist/cjs/util/analytics/ufoExperiences.js +26 -1
  17. package/dist/cjs/util/browser-support.js +8 -0
  18. package/dist/cjs/util/storage-available.js +4 -0
  19. package/dist/cjs/version.json +1 -1
  20. package/dist/es2019/api/EmojiRepository.js +4 -0
  21. package/dist/es2019/api/EmojiResource.js +8 -0
  22. package/dist/es2019/api/EmojiUtils.js +4 -0
  23. package/dist/es2019/api/internal/UsageFrequencyTracker.js +4 -1
  24. package/dist/es2019/components/common/CachingEmoji.js +9 -7
  25. package/dist/es2019/components/common/DeleteButton.js +2 -1
  26. package/dist/es2019/components/common/Emoji.js +54 -21
  27. package/dist/es2019/components/common/EmojiPlaceholder.js +1 -0
  28. package/dist/es2019/components/common/Popup.js +21 -1
  29. package/dist/es2019/components/common/ResourcedEmojiComponent.js +9 -1
  30. package/dist/es2019/components/picker/EmojiPickerComponent.js +4 -1
  31. package/dist/es2019/components/picker/EmojiPickerListSearch.js +5 -0
  32. package/dist/es2019/components/picker/styles.js +3 -0
  33. package/dist/es2019/types.js +22 -1
  34. package/dist/es2019/util/analytics/ufoExperiences.js +27 -2
  35. package/dist/es2019/util/browser-support.js +1 -0
  36. package/dist/es2019/util/storage-available.js +4 -0
  37. package/dist/es2019/version.json +1 -1
  38. package/dist/esm/api/EmojiRepository.js +4 -0
  39. package/dist/esm/api/EmojiResource.js +8 -0
  40. package/dist/esm/api/EmojiUtils.js +4 -0
  41. package/dist/esm/api/internal/UsageFrequencyTracker.js +4 -1
  42. package/dist/esm/components/common/CachingEmoji.js +13 -11
  43. package/dist/esm/components/common/DeleteButton.js +2 -1
  44. package/dist/esm/components/common/Emoji.js +60 -21
  45. package/dist/esm/components/common/EmojiPlaceholder.js +1 -0
  46. package/dist/esm/components/common/Popup.js +21 -1
  47. package/dist/esm/components/common/ResourcedEmojiComponent.js +11 -1
  48. package/dist/esm/components/picker/EmojiPickerComponent.js +4 -1
  49. package/dist/esm/components/picker/EmojiPickerListSearch.js +5 -0
  50. package/dist/esm/components/picker/styles.js +2 -0
  51. package/dist/esm/types.js +22 -1
  52. package/dist/esm/util/analytics/ufoExperiences.js +27 -2
  53. package/dist/esm/util/browser-support.js +1 -0
  54. package/dist/esm/util/storage-available.js +4 -0
  55. package/dist/esm/version.json +1 -1
  56. package/dist/types/components/common/CachingEmoji.d.ts +0 -1
  57. package/dist/types/components/common/Emoji.d.ts +2 -0
  58. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +1 -0
  59. package/dist/types/types.d.ts +15 -0
  60. package/dist/types/util/browser-support.d.ts +1 -0
  61. package/package.json +4 -3
@@ -1,4 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
4
 
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; }
@@ -7,14 +8,18 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
7
8
 
8
9
  /** @jsx jsx */
9
10
  import { jsx } from '@emotion/core';
10
- import React from 'react';
11
+ import React, { useEffect, useCallback } from 'react';
11
12
  import { shouldUseAltRepresentation } from '../../api/EmojiUtils';
12
13
  import { deleteEmojiLabel } from '../../util/constants';
13
14
  import { isImageRepresentation, isMediaRepresentation, isSpriteRepresentation, toEmojiId } from '../../util/type-helpers';
15
+ import { UfoEmojiTimings } from '../../types';
14
16
  import { leftClick } from '../../util/mouse';
15
17
  import DeleteButton from './DeleteButton';
16
18
  import { emojiContainer, emojiNodeStyles, commonSelectedStyles, selectOnHoverStyles, emojiSprite, emojiMainStyle, emojiStyles, emojiImage } from './styles';
17
19
  import { sampledUfoRenderedEmoji } from '../../util/analytics';
20
+ import { EmojiPlaceholder } from '../..';
21
+ import { useInView } from 'react-intersection-observer';
22
+ import { isIntersectionObserverSupported } from '../../util/browser-support'; // import { isIntersectionObserverSupported } from '../../util/browser-support';
18
23
 
19
24
  var handleMouseDown = function handleMouseDown(props, event) {
20
25
  // Clicked emoji delete button
@@ -80,7 +85,7 @@ var handleImageError = function handleImageError(props, event) {
80
85
  // When rendering 1500+ emoji using class based components had a significant impact.
81
86
 
82
87
 
83
- var renderAsSprite = function renderAsSprite(props) {
88
+ export var SpriteEmoji = function SpriteEmoji(props) {
84
89
  var emoji = props.emoji,
85
90
  fitToHeight = props.fitToHeight,
86
91
  selected = props.selected,
@@ -111,11 +116,9 @@ var renderAsSprite = function renderAsSprite(props) {
111
116
  backgroundSize: "".concat(sprite.column * 100, "% ").concat(sprite.row * 100, "%")
112
117
  }, sizing);
113
118
 
114
- var emojiNode = jsx("span", {
115
- className: emojiSprite,
116
- style: style
117
- }, "\xA0");
118
119
  return jsx("span", {
120
+ "data-testid": "sprite-emoji-".concat(emoji.shortName),
121
+ "data-emoji-type": "sprite",
119
122
  tabIndex: shouldBeInteractive ? 0 : undefined,
120
123
  role: shouldBeInteractive ? 'button' : undefined,
121
124
  css: emojiContainer,
@@ -131,11 +134,13 @@ var renderAsSprite = function renderAsSprite(props) {
131
134
  },
132
135
  "aria-label": emoji.shortName,
133
136
  title: showTooltip ? emoji.shortName : ''
134
- }, emojiNode);
137
+ }, jsx("span", {
138
+ className: emojiSprite,
139
+ style: style
140
+ }, "\xA0"));
135
141
  }; // Keep as pure functional component, see renderAsSprite.
136
142
 
137
-
138
- var renderAsImage = function renderAsImage(props) {
143
+ export var ImageEmoji = function ImageEmoji(props) {
139
144
  var emoji = props.emoji,
140
145
  fitToHeight = props.fitToHeight,
141
146
  selected = props.selected,
@@ -185,16 +190,28 @@ var renderAsImage = function renderAsImage(props) {
185
190
  };
186
191
 
187
192
  var onLoad = function onLoad() {
193
+ sampledUfoRenderedEmoji(emoji).mark(UfoEmojiTimings.ONLOAD_END);
188
194
  sampledUfoRenderedEmoji(emoji).success();
189
- }; // Pass src attribute as key to force React to rerender img node since browser does not
190
- // change preview image until loaded
191
- // We currently have the following error: property 'loading' does not exist on type 'DetailedHTMLProps<ImgHTMLAttributes, HTMLImageElement>'
192
- // The fix for this was added as a part of @types/react@16.9.20 - https://github.com/facebook/react/issues/16942
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.
194
-
195
+ };
195
196
 
197
+ var onBeforeLoad = useCallback(function () {
198
+ sampledUfoRenderedEmoji(emoji).mark(UfoEmojiTimings.ONLOAD_START);
199
+ }, [emoji]);
200
+
201
+ var _useInView = useInView({
202
+ triggerOnce: true
203
+ }),
204
+ _useInView2 = _slicedToArray(_useInView, 2),
205
+ ref = _useInView2[0],
206
+ inView = _useInView2[1];
207
+
208
+ useEffect(function () {
209
+ if (inView) {
210
+ onBeforeLoad();
211
+ }
212
+ }, [inView, onBeforeLoad]);
196
213
  var emojiNode = jsx("img", _extends({
197
- // @ts-ignore
214
+ //@ts-ignore
198
215
  loading: "lazy",
199
216
  src: src,
200
217
  key: src,
@@ -209,7 +226,29 @@ var renderAsImage = function renderAsImage(props) {
209
226
  onError: onError,
210
227
  onLoad: onLoad
211
228
  }, sizing));
229
+ var placeholder = jsx(EmojiPlaceholder, {
230
+ shortName: emoji.shortName,
231
+ size: fitToHeight,
232
+ showTooltip: showTooltip,
233
+ representation: emoji.representation
234
+ });
235
+
236
+ var renderLazyLoadedEmoji = function renderLazyLoadedEmoji() {
237
+ // if browser not supported, render emoji node directly
238
+ if (!isIntersectionObserverSupported) {
239
+ return emojiNode;
240
+ }
241
+
242
+ if (inView) {
243
+ return emojiNode;
244
+ }
245
+
246
+ return placeholder;
247
+ };
248
+
212
249
  return jsx("span", {
250
+ "data-testid": "image-emoji-".concat(emoji.shortName),
251
+ "data-emoji-type": "image",
213
252
  css: emojiStyles,
214
253
  tabIndex: shouldBeInteractive ? 0 : undefined,
215
254
  role: shouldBeInteractive ? 'button' : undefined,
@@ -224,17 +263,17 @@ var renderAsImage = function renderAsImage(props) {
224
263
  handleMouseMove(props, event);
225
264
  },
226
265
  "aria-label": emoji.shortName,
227
- title: showTooltip ? emoji.shortName : ''
228
- }, deleteButton, emojiNode);
266
+ title: showTooltip ? emoji.shortName : '',
267
+ ref: ref
268
+ }, deleteButton, renderLazyLoadedEmoji());
229
269
  };
230
-
231
270
  export var Emoji = function Emoji(props) {
232
271
  var emoji = props.emoji; // TODO: We always prefer render as image as having accessibility issues with sprite representation
233
272
 
234
273
  if (isSpriteRepresentation(emoji.representation)) {
235
- return renderAsSprite(props);
274
+ return jsx(SpriteEmoji, props);
236
275
  }
237
276
 
238
- return renderAsImage(props);
277
+ return jsx(ImageEmoji, props);
239
278
  };
240
279
  export default Emoji;
@@ -31,6 +31,7 @@ var EmojiPlaceholder = function EmojiPlaceholder(props) {
31
31
  height: "".concat(height, "px")
32
32
  };
33
33
  return jsx("span", {
34
+ "data-testid": "emoji-placeholder-".concat(shortName),
34
35
  "aria-label": shortName,
35
36
  className: placeholder,
36
37
  css: placeholderContainer,
@@ -48,6 +48,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
48
48
  if (_this.debounced) {
49
49
  clearTimeout(_this.debounced);
50
50
  _this.debounced = null;
51
+ }
52
+
53
+ if (typeof window === 'undefined') {
54
+ return;
51
55
  } // Timeout set to 30ms as to not throttle IE11
52
56
 
53
57
 
@@ -67,7 +71,11 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
67
71
  this.popup = document.createElement('div');
68
72
  document.body.appendChild(this.popup);
69
73
  this.popup.style.position = 'absolute';
70
- window.addEventListener('resize', this.handleResize);
74
+
75
+ if (typeof window !== 'undefined') {
76
+ window.addEventListener('resize', this.handleResize);
77
+ }
78
+
71
79
  this.applyAbsolutePosition();
72
80
  this.renderContent();
73
81
  }
@@ -80,6 +88,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
80
88
  }, {
81
89
  key: "componentWillUnmount",
82
90
  value: function componentWillUnmount() {
91
+ if (typeof window === 'undefined') {
92
+ return;
93
+ }
94
+
83
95
  window.removeEventListener('resize', this.handleResize);
84
96
 
85
97
  if (this.popup) {
@@ -105,6 +117,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
105
117
  }, {
106
118
  key: "applyAbovePosition",
107
119
  value: function applyAbovePosition() {
120
+ if (typeof window === 'undefined') {
121
+ return;
122
+ }
123
+
108
124
  var targetNode = getTargetNode(this.props.target);
109
125
 
110
126
  if (targetNode && this.popup) {
@@ -119,6 +135,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
119
135
  }, {
120
136
  key: "applyAbsolutePosition",
121
137
  value: function applyAbsolutePosition() {
138
+ if (typeof window === 'undefined') {
139
+ return;
140
+ }
141
+
122
142
  if (this.props.relativePosition === 'above') {
123
143
  this.applyAbovePosition();
124
144
  } else if (this.props.relativePosition === 'below') {
@@ -14,6 +14,7 @@ import React from 'react';
14
14
  import { Component } from 'react';
15
15
  import { defaultEmojiHeight } from '../../util/constants';
16
16
  import { isPromise } from '../../util/type-helpers';
17
+ import { UfoEmojiTimings } from '../../types';
17
18
  import CachingEmoji from './CachingEmoji';
18
19
  import EmojiPlaceholder from './EmojiPlaceholder';
19
20
  import { sampledUfoRenderedEmoji } from '../../util/analytics';
@@ -46,6 +47,7 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
46
47
  var _this2 = this;
47
48
 
48
49
  var foundEmoji = emojiProvider.findByEmojiId(emojiId);
50
+ sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_START);
49
51
 
50
52
  if (isPromise(foundEmoji)) {
51
53
  this.setState({
@@ -59,6 +61,8 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
59
61
  loaded: true
60
62
  });
61
63
 
64
+ sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_END);
65
+
62
66
  if (!emoji) {
63
67
  // emoji is undefined
64
68
  sampledUfoRenderedEmoji(emojiId).failure({
@@ -76,7 +80,8 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
76
80
  });
77
81
  });
78
82
  } else {
79
- // loaded
83
+ sampledUfoRenderedEmoji(emojiId).mark(UfoEmojiTimings.METADATA_END); // loaded
84
+
80
85
  this.setState({
81
86
  emoji: foundEmoji,
82
87
  loaded: true
@@ -99,6 +104,11 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
99
104
  value: function componentWillUnmount() {
100
105
  this.ready = false;
101
106
  }
107
+ }, {
108
+ key: "componentDidMount",
109
+ value: function componentDidMount() {
110
+ sampledUfoRenderedEmoji(this.props.emojiId).mark(UfoEmojiTimings.MOUNTED_END);
111
+ }
102
112
  }, {
103
113
  key: "UNSAFE_componentWillReceiveProps",
104
114
  value: function UNSAFE_componentWillReceiveProps(nextProps) {
@@ -320,6 +320,10 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
320
320
  _defineProperty(_assertThisInitialized(_this), "scrollToEndOfList", function () {
321
321
  var emojiPickerList = _this.refs.emojiPickerList;
322
322
 
323
+ if (typeof window === 'undefined') {
324
+ return;
325
+ }
326
+
323
327
  if (emojiPickerList) {
324
328
  // Wait a tick to ensure repaint and updated height for picker list
325
329
  window.setTimeout(function () {
@@ -425,7 +429,6 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
425
429
  }));
426
430
  ufoExperiences['emoji-picker-opened'].abort();
427
431
  ufoExperiences['emoji-searched'].abort();
428
- ufoExperiences['emoji-selection-recorded'].abort();
429
432
  }
430
433
  }, {
431
434
  key: "UNSAFE_componentWillReceiveProps",
@@ -62,6 +62,11 @@ var EmojiPickerListSearch = /*#__PURE__*/function (_PureComponent) {
62
62
  // setting the focus to search input.
63
63
  // see FS-2056
64
64
  _this.inputRef = input;
65
+
66
+ if (typeof window === 'undefined') {
67
+ return;
68
+ }
69
+
65
70
  window.setTimeout(_this.focusInput);
66
71
  }
67
72
  });
@@ -151,6 +151,8 @@ export var emojiItem = css((_css6 = {
151
151
  margin: '7px',
152
152
  minWidth: '24px',
153
153
  maxWidth: '24px'
154
+ }), _defineProperty(_css6, "& .".concat(emojiNodeStyles, " .").concat(placeholder), {
155
+ margin: '0'
154
156
  }), _defineProperty(_css6, "& .".concat(emojiNodeStyles, " > img"), {
155
157
  position: 'relative',
156
158
  left: '50%',
package/dist/esm/types.js CHANGED
@@ -61,4 +61,25 @@ export var UfoComponentName;
61
61
  UfoComponentName["EMOJI"] = "emoji";
62
62
  UfoComponentName["EMOJI_PICKER"] = "emoji-picker";
63
63
  UfoComponentName["EMOJI_PROVIDER"] = "emoji-provider";
64
- })(UfoComponentName || (UfoComponentName = {}));
64
+ })(UfoComponentName || (UfoComponentName = {}));
65
+
66
+ export var UfoEmojiTimingsKeys;
67
+
68
+ (function (UfoEmojiTimingsKeys) {
69
+ UfoEmojiTimingsKeys["MOUNTED"] = "emoji-mount";
70
+ UfoEmojiTimingsKeys["METADATA"] = "emoji-metadata";
71
+ UfoEmojiTimingsKeys["MEDIADATA"] = "emoji-media";
72
+ UfoEmojiTimingsKeys["ONLOAD"] = "emoji-onload";
73
+ })(UfoEmojiTimingsKeys || (UfoEmojiTimingsKeys = {}));
74
+
75
+ export var UfoEmojiTimings;
76
+
77
+ (function (UfoEmojiTimings) {
78
+ UfoEmojiTimings["MOUNTED_END"] = "emoji-mount_end";
79
+ UfoEmojiTimings["METADATA_START"] = "emoji-metadata_start";
80
+ UfoEmojiTimings["METADATA_END"] = "emoji-metadata_end";
81
+ UfoEmojiTimings["MEDIA_START"] = "emoji-media_start";
82
+ UfoEmojiTimings["MEDIA_END"] = "emoji-media_end";
83
+ UfoEmojiTimings["ONLOAD_START"] = "emoji-onload_start";
84
+ UfoEmojiTimings["ONLOAD_END"] = "emoji-onload_end";
85
+ })(UfoEmojiTimings || (UfoEmojiTimings = {}));
@@ -1,4 +1,4 @@
1
- import { UfoComponentName, UfoExperienceName } from '../../types';
1
+ import { UfoComponentName, UfoEmojiTimings, UfoEmojiTimingsKeys, UfoExperienceName } from '../../types';
2
2
  import { ExperiencePerformanceTypes, ExperienceTypes, ConcurrentExperience, UFOExperience } from '@atlaskit/ufo';
3
3
  import { withSampling } from './samplingUfo';
4
4
 
@@ -22,8 +22,33 @@ var createInlineExperience = function createInlineExperience(componentName) {
22
22
  };
23
23
  };
24
24
 
25
+ var customEmojiTimings = [{
26
+ key: UfoEmojiTimingsKeys.MOUNTED,
27
+ endMark: UfoEmojiTimings.MOUNTED_END
28
+ }, {
29
+ key: UfoEmojiTimingsKeys.METADATA,
30
+ component: 'resourced-emoji',
31
+ startMark: UfoEmojiTimings.METADATA_START,
32
+ endMark: UfoEmojiTimings.METADATA_END
33
+ }, {
34
+ key: UfoEmojiTimingsKeys.MEDIADATA,
35
+ component: 'caching-emoji',
36
+ startMark: UfoEmojiTimings.MEDIA_START,
37
+ endMark: UfoEmojiTimings.MEDIA_END
38
+ }, {
39
+ key: UfoEmojiTimingsKeys.ONLOAD,
40
+ startMark: UfoEmojiTimings.ONLOAD_START,
41
+ endMark: UfoEmojiTimings.ONLOAD_END
42
+ }];
25
43
  export var ufoExperiences = {
26
- 'emoji-rendered': new ConcurrentExperience(UfoExperienceName.EMOJI_RENDERED, createRenderExperience(UfoComponentName.EMOJI)),
44
+ 'emoji-rendered': new ConcurrentExperience(UfoExperienceName.EMOJI_RENDERED, {
45
+ platform: {
46
+ component: UfoComponentName.EMOJI
47
+ },
48
+ type: ExperienceTypes.Operation,
49
+ performanceType: ExperiencePerformanceTypes.Custom,
50
+ timings: customEmojiTimings
51
+ }),
27
52
  'emoji-resource-fetched': new ConcurrentExperience(UfoExperienceName.EMOJI_RESOURCE_FETCHED, createRenderExperience(UfoComponentName.EMOJI_PROVIDER)),
28
53
  'emoji-picker-opened': new UFOExperience(UfoExperienceName.EMOJI_PICKER_OPENED, createRenderExperience(UfoComponentName.EMOJI_PICKER)),
29
54
  'emoji-selection-recorded': new UFOExperience(UfoExperienceName.EMOJI_SELECTION_RECORDED, createInlineExperience(UfoComponentName.EMOJI_PROVIDER)),
@@ -0,0 +1 @@
1
+ export var isIntersectionObserverSupported = typeof window === 'undefined' ? false : !!window.IntersectionObserver;
@@ -1,6 +1,10 @@
1
1
  // Copied from https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage
2
2
  // a brief history of local storage - https://gist.github.com/paulirish/5558557
3
3
  export default function storageAvailable(type) {
4
+ if (typeof window === 'undefined') {
5
+ return false;
6
+ }
7
+
4
8
  var storage;
5
9
 
6
10
  try {
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "64.6.1",
3
+ "version": "64.7.0",
4
4
  "sideEffects": false
5
5
  }
@@ -22,7 +22,6 @@ export declare class CachingMediaEmoji extends PureComponent<CachingEmojiProps,
22
22
  static contextType: React.Context<EmojiContextType>;
23
23
  context: ContextType<typeof EmojiContext>;
24
24
  constructor(props: EmojiProps, context: ContextType<typeof EmojiContext>);
25
- componentDidMount(): void;
26
25
  componentDidUpdate(): void;
27
26
  private loadEmoji;
28
27
  private handleLoadError;
@@ -51,5 +51,7 @@ export interface Props {
51
51
  fitToHeight?: number;
52
52
  shouldBeInteractive?: boolean;
53
53
  }
54
+ export declare const SpriteEmoji: (props: Props) => JSX.Element;
55
+ export declare const ImageEmoji: (props: Props) => JSX.Element;
54
56
  export declare const Emoji: (props: Props) => JSX.Element;
55
57
  export default Emoji;
@@ -20,6 +20,7 @@ export default class ResourcedEmojiComponent extends Component<Props, State> {
20
20
  private refreshEmoji;
21
21
  UNSAFE_componentWillMount(): void;
22
22
  componentWillUnmount(): void;
23
+ componentDidMount(): void;
23
24
  UNSAFE_componentWillReceiveProps(nextProps: Props): void;
24
25
  render(): JSX.Element;
25
26
  private emojiWrapper;
@@ -321,3 +321,18 @@ export declare enum UfoComponentName {
321
321
  EMOJI_PICKER = "emoji-picker",
322
322
  EMOJI_PROVIDER = "emoji-provider"
323
323
  }
324
+ export declare enum UfoEmojiTimingsKeys {
325
+ MOUNTED = "emoji-mount",
326
+ METADATA = "emoji-metadata",
327
+ MEDIADATA = "emoji-media",
328
+ ONLOAD = "emoji-onload"
329
+ }
330
+ export declare enum UfoEmojiTimings {
331
+ MOUNTED_END = "emoji-mount_end",
332
+ METADATA_START = "emoji-metadata_start",
333
+ METADATA_END = "emoji-metadata_end",
334
+ MEDIA_START = "emoji-media_start",
335
+ MEDIA_END = "emoji-media_end",
336
+ ONLOAD_START = "emoji-onload_start",
337
+ ONLOAD_END = "emoji-onload_end"
338
+ }
@@ -0,0 +1 @@
1
+ export declare const isIntersectionObserverSupported: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "64.6.1",
3
+ "version": "64.7.0",
4
4
  "description": "Fabric emoji React components",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -42,6 +42,7 @@
42
42
  "js-search": "^2.0.0",
43
43
  "lru-fast": "^0.2.2",
44
44
  "prop-types": "^15.5.10",
45
+ "react-intersection-observer": "^8.26.2",
45
46
  "react-virtualized": "^9.8.0",
46
47
  "uuid": "^3.1.0"
47
48
  },
@@ -56,15 +57,16 @@
56
57
  "@atlaskit/elements-test-helpers": "^0.7.0",
57
58
  "@atlaskit/media-core": "^33.0.0",
58
59
  "@atlaskit/section-message": "^6.0.0",
60
+ "@atlaskit/ssr": "*",
59
61
  "@atlaskit/util-data-test": "^17.2.0",
60
62
  "@atlaskit/visual-regression": "*",
61
63
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
62
64
  "@atlassian/ufo": "^0.1.10",
65
+ "@testing-library/jest-dom": "^4.1.0",
63
66
  "@testing-library/react": "^8.0.1",
64
67
  "@testing-library/user-event": "10.4.0",
65
68
  "@types/js-search": "^1.4.0",
66
69
  "@types/react-virtualized": "^9.18.12",
67
- "@types/serialize-javascript": "^5.0.0",
68
70
  "@types/webpack-dev-server": "^3.11.2",
69
71
  "enzyme": "^3.10.0",
70
72
  "enzyme-adapter-react-16": "^1.15.1",
@@ -75,7 +77,6 @@
75
77
  "react-addons-perf": "^15.3.2",
76
78
  "react-intl-next": "npm:react-intl@^5.18.1",
77
79
  "rxjs": "^5.5.0",
78
- "serialize-javascript": "^5.0.1",
79
80
  "sinon": "^2.2.0",
80
81
  "typescript": "4.2.4",
81
82
  "wait-for-expect": "^1.2.0",