@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.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/api/EmojiRepository.js +4 -0
- package/dist/cjs/api/EmojiResource.js +8 -0
- package/dist/cjs/api/EmojiUtils.js +4 -0
- package/dist/cjs/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/cjs/components/common/CachingEmoji.js +13 -10
- package/dist/cjs/components/common/DeleteButton.js +2 -1
- package/dist/cjs/components/common/Emoji.js +76 -20
- package/dist/cjs/components/common/EmojiPlaceholder.js +1 -0
- package/dist/cjs/components/common/Popup.js +21 -1
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +12 -1
- package/dist/cjs/components/picker/EmojiPickerComponent.js +4 -2
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/cjs/components/picker/styles.js +2 -0
- package/dist/cjs/types.js +25 -2
- package/dist/cjs/util/analytics/ufoExperiences.js +26 -1
- package/dist/cjs/util/browser-support.js +8 -0
- package/dist/cjs/util/storage-available.js +4 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiRepository.js +4 -0
- package/dist/es2019/api/EmojiResource.js +8 -0
- package/dist/es2019/api/EmojiUtils.js +4 -0
- package/dist/es2019/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/es2019/components/common/CachingEmoji.js +9 -7
- package/dist/es2019/components/common/DeleteButton.js +2 -1
- package/dist/es2019/components/common/Emoji.js +54 -21
- package/dist/es2019/components/common/EmojiPlaceholder.js +1 -0
- package/dist/es2019/components/common/Popup.js +21 -1
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +9 -1
- package/dist/es2019/components/picker/EmojiPickerComponent.js +4 -1
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/es2019/components/picker/styles.js +3 -0
- package/dist/es2019/types.js +22 -1
- package/dist/es2019/util/analytics/ufoExperiences.js +27 -2
- package/dist/es2019/util/browser-support.js +1 -0
- package/dist/es2019/util/storage-available.js +4 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiRepository.js +4 -0
- package/dist/esm/api/EmojiResource.js +8 -0
- package/dist/esm/api/EmojiUtils.js +4 -0
- package/dist/esm/api/internal/UsageFrequencyTracker.js +4 -1
- package/dist/esm/components/common/CachingEmoji.js +13 -11
- package/dist/esm/components/common/DeleteButton.js +2 -1
- package/dist/esm/components/common/Emoji.js +60 -21
- package/dist/esm/components/common/EmojiPlaceholder.js +1 -0
- package/dist/esm/components/common/Popup.js +21 -1
- package/dist/esm/components/common/ResourcedEmojiComponent.js +11 -1
- package/dist/esm/components/picker/EmojiPickerComponent.js +4 -1
- package/dist/esm/components/picker/EmojiPickerListSearch.js +5 -0
- package/dist/esm/components/picker/styles.js +2 -0
- package/dist/esm/types.js +22 -1
- package/dist/esm/util/analytics/ufoExperiences.js +27 -2
- package/dist/esm/util/browser-support.js +1 -0
- package/dist/esm/util/storage-available.js +4 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/CachingEmoji.d.ts +0 -1
- package/dist/types/components/common/Emoji.d.ts +2 -0
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +1 -0
- package/dist/types/types.d.ts +15 -0
- package/dist/types/util/browser-support.d.ts +1 -0
- 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
|
|
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
|
-
},
|
|
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
|
-
};
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
274
|
+
return jsx(SpriteEmoji, props);
|
|
236
275
|
}
|
|
237
276
|
|
|
238
|
-
return
|
|
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
|
-
|
|
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,
|
|
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 {
|
package/dist/esm/version.json
CHANGED
|
@@ -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;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -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.
|
|
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",
|