@atlaskit/emoji 64.7.0 → 65.1.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 +36 -0
- package/dist/cjs/api/EmojiResource.js +250 -87
- package/dist/cjs/api/media/SiteEmojiResource.js +4 -2
- package/dist/cjs/api/media/TokenManager.js +13 -12
- package/dist/cjs/components/common/CachingEmoji.js +21 -3
- package/dist/cjs/components/common/Emoji.js +57 -36
- package/dist/cjs/components/common/EmojiImage.js +99 -0
- package/dist/cjs/components/common/EmojiPlaceholder.js +7 -5
- package/dist/cjs/components/common/RecordSelectionDefault.js +13 -1
- package/dist/cjs/components/common/ResourcedEmoji.js +14 -4
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +173 -156
- package/dist/cjs/components/common/UfoErrorBoundary.js +30 -4
- package/dist/cjs/components/common/UploadEmoji.js +8 -3
- package/dist/cjs/components/common/styles.js +26 -9
- package/dist/cjs/components/picker/EmojiPickerComponent.js +27 -9
- package/dist/cjs/components/picker/EmojiPickerFooter.js +2 -0
- package/dist/cjs/components/picker/styles.js +16 -13
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +7 -2
- package/dist/cjs/context/EmojiContextProvider.js +33 -0
- package/dist/cjs/hooks/index.js +16 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/util/analytics/samplingUfo.js +13 -3
- package/dist/cjs/util/analytics/ufoExperiences.js +22 -4
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/cjs/util/browser-support.js +1 -1
- package/dist/cjs/util/constants.js +6 -5
- package/dist/cjs/util/useInView.js +23 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +117 -37
- package/dist/es2019/api/media/SiteEmojiResource.js +2 -2
- package/dist/es2019/api/media/TokenManager.js +12 -12
- package/dist/es2019/components/common/CachingEmoji.js +20 -3
- package/dist/es2019/components/common/Emoji.js +53 -34
- package/dist/es2019/components/common/EmojiImage.js +74 -0
- package/dist/es2019/components/common/EmojiPlaceholder.js +7 -5
- package/dist/es2019/components/common/RecordSelectionDefault.js +13 -1
- package/dist/es2019/components/common/ResourcedEmoji.js +15 -5
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +136 -105
- package/dist/es2019/components/common/UfoErrorBoundary.js +14 -2
- package/dist/es2019/components/common/UploadEmoji.js +8 -3
- package/dist/es2019/components/common/styles.js +30 -9
- package/dist/es2019/components/picker/EmojiPickerComponent.js +27 -8
- package/dist/es2019/components/picker/EmojiPickerFooter.js +2 -0
- package/dist/es2019/components/picker/styles.js +16 -14
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +7 -2
- package/dist/es2019/context/EmojiContextProvider.js +9 -1
- package/dist/es2019/hooks/index.js +8 -0
- package/dist/es2019/index.js +5 -4
- package/dist/es2019/types.js +3 -0
- package/dist/es2019/util/analytics/samplingUfo.js +11 -1
- package/dist/es2019/util/analytics/ufoExperiences.js +12 -2
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/es2019/util/browser-support.js +1 -1
- package/dist/es2019/util/constants.js +3 -2
- package/dist/es2019/util/useInView.js +12 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +257 -89
- package/dist/esm/api/media/SiteEmojiResource.js +5 -3
- package/dist/esm/api/media/TokenManager.js +13 -12
- package/dist/esm/components/common/CachingEmoji.js +20 -3
- package/dist/esm/components/common/Emoji.js +59 -38
- package/dist/esm/components/common/EmojiImage.js +84 -0
- package/dist/esm/components/common/EmojiPlaceholder.js +8 -5
- package/dist/esm/components/common/RecordSelectionDefault.js +13 -1
- package/dist/esm/components/common/ResourcedEmoji.js +15 -5
- package/dist/esm/components/common/ResourcedEmojiComponent.js +167 -156
- package/dist/esm/components/common/UfoErrorBoundary.js +30 -4
- package/dist/esm/components/common/UploadEmoji.js +8 -3
- package/dist/esm/components/common/styles.js +25 -10
- package/dist/esm/components/picker/EmojiPickerComponent.js +27 -8
- package/dist/esm/components/picker/EmojiPickerFooter.js +2 -0
- package/dist/esm/components/picker/styles.js +16 -14
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +18 -2
- package/dist/esm/components/uploader/EmojiUploadComponent.js +7 -2
- package/dist/esm/context/EmojiContextProvider.js +30 -1
- package/dist/esm/hooks/index.js +8 -0
- package/dist/esm/index.js +5 -4
- package/dist/esm/types.js +3 -0
- package/dist/esm/util/analytics/samplingUfo.js +13 -2
- package/dist/esm/util/analytics/ufoExperiences.js +14 -2
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +2 -1
- package/dist/esm/util/browser-support.js +1 -1
- package/dist/esm/util/constants.js +3 -2
- package/dist/esm/util/useInView.js +12 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/api/EmojiResource.d.ts +19 -2
- package/dist/types/api/EmojiUtils.d.ts +7 -1
- package/dist/types/api/media/SiteEmojiResource.d.ts +1 -1
- package/dist/types/api/media/TokenManager.d.ts +1 -0
- package/dist/types/components/common/Emoji.d.ts +0 -1
- package/dist/types/components/common/EmojiImage.d.ts +13 -0
- package/dist/types/components/common/EmojiPlaceholder.d.ts +1 -0
- package/dist/types/components/common/LoadingEmojiComponent.d.ts +7 -4
- package/dist/types/components/common/ResourcedEmoji.d.ts +3 -3
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +41 -20
- package/dist/types/components/common/UfoErrorBoundary.d.ts +2 -2
- package/dist/types/components/common/UploadEmoji.d.ts +1 -1
- package/dist/types/components/common/styles.d.ts +1 -0
- package/dist/types/components/picker/EmojiPicker.d.ts +9 -0
- package/dist/types/components/picker/EmojiPickerComponent.d.ts +14 -0
- package/dist/types/components/picker/EmojiPickerFooter.d.ts +1 -0
- package/dist/types/components/picker/styles.d.ts +1 -1
- package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +18 -0
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/index.d.ts +5 -4
- package/dist/types/types.d.ts +14 -2
- package/dist/types/util/analytics/index.d.ts +1 -1
- package/dist/types/util/analytics/samplingUfo.d.ts +6 -6
- package/dist/types/util/analytics/ufoExperiences.d.ts +5 -2
- package/dist/types/util/constants.d.ts +2 -1
- package/dist/types/util/useInView.d.ts +4 -0
- package/docs/0-intro.tsx +35 -27
- package/docs/1-resourced-emoji.tsx +74 -0
- package/docs/2-emoji-picker.tsx +56 -0
- package/docs/3-typeahead.tsx +20 -0
- package/docs/4-emoji-provider.tsx +98 -0
- package/local-config-example.ts +22 -1
- package/package.json +4 -4
- package/report.api.md +1287 -0
|
@@ -47,6 +47,8 @@ var _constants = require("../../util/constants");
|
|
|
47
47
|
|
|
48
48
|
var _EmojiContext = require("../../context/EmojiContext");
|
|
49
49
|
|
|
50
|
+
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
51
|
+
|
|
50
52
|
var _excluded = ["placeholderSize"],
|
|
51
53
|
_excluded2 = ["children"];
|
|
52
54
|
|
|
@@ -72,7 +74,10 @@ var CachingEmoji = function CachingEmoji(props) {
|
|
|
72
74
|
emoji: emojiProps.emoji.shortName
|
|
73
75
|
});
|
|
74
76
|
(0, _react.useEffect)(function () {
|
|
75
|
-
(0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji)
|
|
77
|
+
if (!(0, _ufoExperiences.hasUfoMarked)((0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji), 'fmp')) {
|
|
78
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji).markFMP();
|
|
79
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
|
|
76
81
|
}, []);
|
|
77
82
|
|
|
78
83
|
var emojiNode = function emojiNode() {
|
|
@@ -108,7 +113,12 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
108
113
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleLoadError", function (_emojiId) {
|
|
109
114
|
(0, _analytics.sampledUfoRenderedEmoji)(_emojiId).failure({
|
|
110
115
|
metadata: {
|
|
111
|
-
reason: 'load error'
|
|
116
|
+
reason: 'load error',
|
|
117
|
+
source: 'CachingMediaEmoji',
|
|
118
|
+
emoji: {
|
|
119
|
+
id: _emojiId.id,
|
|
120
|
+
shortName: _emojiId.shortName
|
|
121
|
+
}
|
|
112
122
|
}
|
|
113
123
|
});
|
|
114
124
|
|
|
@@ -170,7 +180,15 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
170
180
|
|
|
171
181
|
(0, _analytics.sampledUfoRenderedEmoji)(emoji).failure({
|
|
172
182
|
metadata: {
|
|
173
|
-
reason: 'failed to load media emoji'
|
|
183
|
+
reason: 'failed to load media emoji',
|
|
184
|
+
source: 'CachingMediaEmoji',
|
|
185
|
+
data: {
|
|
186
|
+
emoji: {
|
|
187
|
+
id: emoji.id,
|
|
188
|
+
shortName: emoji.shortName,
|
|
189
|
+
name: emoji.name
|
|
190
|
+
}
|
|
191
|
+
}
|
|
174
192
|
}
|
|
175
193
|
});
|
|
176
194
|
});
|
|
@@ -35,11 +35,11 @@ var _styles = require("./styles");
|
|
|
35
35
|
|
|
36
36
|
var _analytics = require("../../util/analytics");
|
|
37
37
|
|
|
38
|
-
var
|
|
38
|
+
var _browserSupport = require("../../util/browser-support");
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var _useInView3 = require("../../util/useInView");
|
|
41
41
|
|
|
42
|
-
var
|
|
42
|
+
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
43
43
|
|
|
44
44
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
45
45
|
|
|
@@ -111,6 +111,7 @@ var handleImageError = function handleImageError(props, event) {
|
|
|
111
111
|
}
|
|
112
112
|
}; // Pure functional components are used in favour of class based components, due to the performance!
|
|
113
113
|
// When rendering 1500+ emoji using class based components had a significant impact.
|
|
114
|
+
// TODO: add UFO tracking for sprite emoji
|
|
114
115
|
|
|
115
116
|
|
|
116
117
|
var SpriteEmoji = function SpriteEmoji(props) {
|
|
@@ -180,6 +181,15 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
180
181
|
showTooltip = props.showTooltip,
|
|
181
182
|
showDelete = props.showDelete,
|
|
182
183
|
shouldBeInteractive = props.shouldBeInteractive;
|
|
184
|
+
|
|
185
|
+
var _useInView = (0, _useInView3.useInView)({
|
|
186
|
+
triggerOnce: true
|
|
187
|
+
}),
|
|
188
|
+
_useInView2 = (0, _slicedToArray2.default)(_useInView, 2),
|
|
189
|
+
ref = _useInView2[0],
|
|
190
|
+
inView = _useInView2[1];
|
|
191
|
+
|
|
192
|
+
var ufoExp = (0, _analytics.sampledUfoRenderedEmoji)(emoji);
|
|
183
193
|
var classes = "".concat(_styles.emojiMainStyle, " ").concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(_styles.emojiImage, " ").concat(className ? className : '');
|
|
184
194
|
var width;
|
|
185
195
|
var height;
|
|
@@ -220,21 +230,35 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
220
230
|
handleImageError(props, event);
|
|
221
231
|
};
|
|
222
232
|
|
|
233
|
+
var markStartLoadFromMountedTime = (0, _react.useCallback)(function () {
|
|
234
|
+
var mountedMark = ufoExp.metrics.marks.find(function (mark) {
|
|
235
|
+
return mark.name === _types.UfoEmojiTimings.MOUNTED_END;
|
|
236
|
+
});
|
|
237
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_START, mountedMark === null || mountedMark === void 0 ? void 0 : mountedMark.time);
|
|
238
|
+
}, [ufoExp]);
|
|
239
|
+
|
|
223
240
|
var onLoad = function onLoad() {
|
|
224
|
-
|
|
225
|
-
(0,
|
|
241
|
+
// onload could trigger before onBeforeLoad when emojis in viewport at start, so we need to mark onload start manually.
|
|
242
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_START)) {
|
|
243
|
+
markStartLoadFromMountedTime();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_END)) {
|
|
247
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_END);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
ufoExp.success({
|
|
251
|
+
metadata: {
|
|
252
|
+
IBSupported: _browserSupport.isIntersectionObserverSupported
|
|
253
|
+
}
|
|
254
|
+
});
|
|
226
255
|
};
|
|
227
256
|
|
|
228
257
|
var onBeforeLoad = (0, _react.useCallback)(function () {
|
|
229
|
-
(0,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
triggerOnce: true
|
|
234
|
-
}),
|
|
235
|
-
_useInView2 = (0, _slicedToArray2.default)(_useInView, 2),
|
|
236
|
-
ref = _useInView2[0],
|
|
237
|
-
inView = _useInView2[1];
|
|
258
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.ONLOAD_START)) {
|
|
259
|
+
ufoExp.mark(_types.UfoEmojiTimings.ONLOAD_START);
|
|
260
|
+
}
|
|
261
|
+
}, [ufoExp]); // because of the lack of browser support of on before load natively, used IntersectionObserver helper hook to mimic the before load time mark for UFO.
|
|
238
262
|
|
|
239
263
|
(0, _react.useEffect)(function () {
|
|
240
264
|
if (inView) {
|
|
@@ -257,26 +281,6 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
257
281
|
onError: onError,
|
|
258
282
|
onLoad: onLoad
|
|
259
283
|
}, sizing));
|
|
260
|
-
var placeholder = (0, _core.jsx)(_.EmojiPlaceholder, {
|
|
261
|
-
shortName: emoji.shortName,
|
|
262
|
-
size: fitToHeight,
|
|
263
|
-
showTooltip: showTooltip,
|
|
264
|
-
representation: emoji.representation
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
var renderLazyLoadedEmoji = function renderLazyLoadedEmoji() {
|
|
268
|
-
// if browser not supported, render emoji node directly
|
|
269
|
-
if (!_browserSupport.isIntersectionObserverSupported) {
|
|
270
|
-
return emojiNode;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
if (inView) {
|
|
274
|
-
return emojiNode;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
return placeholder;
|
|
278
|
-
};
|
|
279
|
-
|
|
280
284
|
return (0, _core.jsx)("span", {
|
|
281
285
|
"data-testid": "image-emoji-".concat(emoji.shortName),
|
|
282
286
|
"data-emoji-type": "image",
|
|
@@ -296,13 +300,30 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
296
300
|
"aria-label": emoji.shortName,
|
|
297
301
|
title: showTooltip ? emoji.shortName : '',
|
|
298
302
|
ref: ref
|
|
299
|
-
}, deleteButton,
|
|
303
|
+
}, deleteButton, emojiNode);
|
|
300
304
|
};
|
|
301
305
|
|
|
302
306
|
exports.ImageEmoji = ImageEmoji;
|
|
303
307
|
|
|
304
308
|
var Emoji = function Emoji(props) {
|
|
305
|
-
var emoji = props.emoji; //
|
|
309
|
+
var emoji = props.emoji; // start emoji rendered experience, it may have already started earlier in ResourcedEmoji or CachingEmoji
|
|
310
|
+
|
|
311
|
+
(0, _analytics.useSampledUFOComponentExperience)(_analytics.ufoExperiences['emoji-rendered'].getInstance(emoji.id || emoji.shortName), _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP, {
|
|
312
|
+
source: 'emoji',
|
|
313
|
+
emoji: emoji.shortName
|
|
314
|
+
});
|
|
315
|
+
(0, _react.useEffect)(function () {
|
|
316
|
+
var ufoExp = (0, _analytics.sampledUfoRenderedEmoji)(emoji);
|
|
317
|
+
|
|
318
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, 'fmp')) {
|
|
319
|
+
ufoExp.markFMP();
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
if (!(0, _ufoExperiences.hasUfoMarked)(ufoExp, _types.UfoEmojiTimings.MOUNTED_END)) {
|
|
323
|
+
ufoExp.mark(_types.UfoEmojiTimings.MOUNTED_END);
|
|
324
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
325
|
+
|
|
326
|
+
}, []); // TODO: We always prefer render as image as having accessibility issues with sprite representation
|
|
306
327
|
|
|
307
328
|
if ((0, _typeHelpers.isSpriteRepresentation)(emoji.representation)) {
|
|
308
329
|
return (0, _core.jsx)(SpriteEmoji, props);
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.EmojiImage = void 0;
|
|
9
|
+
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
|
|
12
|
+
var _core = require("@emotion/core");
|
|
13
|
+
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
|
|
16
|
+
var _styles = require("./styles");
|
|
17
|
+
|
|
18
|
+
var _constants = require("../../util/constants");
|
|
19
|
+
|
|
20
|
+
/** @jsx jsx */
|
|
21
|
+
var EmojiImage = function EmojiImage(props) {
|
|
22
|
+
var _props$maxSize = props.maxSize,
|
|
23
|
+
maxSize = _props$maxSize === void 0 ? _constants.defaultEmojiHeight : _props$maxSize,
|
|
24
|
+
representation = props.representation,
|
|
25
|
+
showTooltip = props.showTooltip,
|
|
26
|
+
imageUrl = props.imageUrl,
|
|
27
|
+
showImageBeforeLoad = props.showImageBeforeLoad,
|
|
28
|
+
emojiId = props.emojiId,
|
|
29
|
+
onImageLoadError = props.onImageLoadError;
|
|
30
|
+
var shortName = emojiId.shortName;
|
|
31
|
+
|
|
32
|
+
var _useState = (0, _react.useState)(false),
|
|
33
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
34
|
+
validImage = _useState2[0],
|
|
35
|
+
setValidImage = _useState2[1];
|
|
36
|
+
|
|
37
|
+
var imageSize = (0, _react.useMemo)(function () {
|
|
38
|
+
if (representation) {
|
|
39
|
+
return {
|
|
40
|
+
width: maxSize / (representation.height * representation.width),
|
|
41
|
+
height: maxSize
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
width: maxSize,
|
|
47
|
+
height: maxSize
|
|
48
|
+
};
|
|
49
|
+
}, [maxSize, representation]);
|
|
50
|
+
var style = {
|
|
51
|
+
minWidth: "".concat(imageSize.width, "px"),
|
|
52
|
+
width: "".concat(imageSize.width, "px"),
|
|
53
|
+
height: "".concat(imageSize.height, "px")
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
var handleImageLoad = function handleImageLoad() {
|
|
57
|
+
return setValidImage(true);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
var handleImageLoadError = function handleImageLoadError() {
|
|
61
|
+
setValidImage(false);
|
|
62
|
+
|
|
63
|
+
if (onImageLoadError) {
|
|
64
|
+
onImageLoadError();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
var visibility = (0, _react.useMemo)(function () {
|
|
69
|
+
return showImageBeforeLoad || validImage ? 'initial' : 'hidden';
|
|
70
|
+
}, [validImage, showImageBeforeLoad]);
|
|
71
|
+
return (0, _core.jsx)("span", {
|
|
72
|
+
"data-testid": "emoji-image-".concat(shortName),
|
|
73
|
+
"aria-label": shortName,
|
|
74
|
+
className: "".concat(_styles.emojiMainStyle, " ").concat(_styles.emojiNodeStyles, " ").concat(_styles.emojiImage),
|
|
75
|
+
style: style,
|
|
76
|
+
css: [_styles.emojiContainer, _styles.emojiStyles],
|
|
77
|
+
title: showTooltip ? shortName : ''
|
|
78
|
+
}, (0, _core.jsx)("img", {
|
|
79
|
+
className: "emoji",
|
|
80
|
+
alt: shortName,
|
|
81
|
+
onLoad: function onLoad() {
|
|
82
|
+
return handleImageLoad();
|
|
83
|
+
},
|
|
84
|
+
onError: function onError() {
|
|
85
|
+
return handleImageLoadError();
|
|
86
|
+
},
|
|
87
|
+
src: imageUrl,
|
|
88
|
+
style: {
|
|
89
|
+
objectFit: 'contain',
|
|
90
|
+
visibility: visibility
|
|
91
|
+
},
|
|
92
|
+
width: imageSize.width,
|
|
93
|
+
height: imageSize.height //@ts-ignore
|
|
94
|
+
,
|
|
95
|
+
loading: "lazy"
|
|
96
|
+
}));
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
exports.EmojiImage = EmojiImage;
|
|
@@ -11,19 +11,19 @@ var _styles = require("./styles");
|
|
|
11
11
|
|
|
12
12
|
var _constants = require("../../util/constants");
|
|
13
13
|
|
|
14
|
-
var _typeHelpers = require("../../util/type-helpers");
|
|
15
|
-
|
|
16
14
|
/** @jsx jsx */
|
|
17
15
|
var EmojiPlaceholder = function EmojiPlaceholder(props) {
|
|
18
16
|
var shortName = props.shortName,
|
|
19
17
|
_props$size = props.size,
|
|
20
18
|
size = _props$size === void 0 ? _constants.defaultEmojiHeight : _props$size,
|
|
21
19
|
showTooltip = props.showTooltip,
|
|
22
|
-
representation = props.representation
|
|
20
|
+
representation = props.representation,
|
|
21
|
+
_props$loading = props.loading,
|
|
22
|
+
loading = _props$loading === void 0 ? false : _props$loading;
|
|
23
23
|
var scaledWidth;
|
|
24
24
|
var scaledHeight;
|
|
25
25
|
|
|
26
|
-
if (representation && size
|
|
26
|
+
if (representation && size) {
|
|
27
27
|
var _width = representation.width;
|
|
28
28
|
var _height = representation.height;
|
|
29
29
|
|
|
@@ -37,14 +37,16 @@ var EmojiPlaceholder = function EmojiPlaceholder(props) {
|
|
|
37
37
|
var height = scaledHeight || size;
|
|
38
38
|
var style = {
|
|
39
39
|
fill: 'f7f7f7',
|
|
40
|
+
minWidth: "".concat(width, "px"),
|
|
40
41
|
width: "".concat(width, "px"),
|
|
41
42
|
height: "".concat(height, "px")
|
|
42
43
|
};
|
|
43
44
|
return (0, _core.jsx)("span", {
|
|
44
45
|
"data-testid": "emoji-placeholder-".concat(shortName),
|
|
46
|
+
"aria-busy": loading,
|
|
45
47
|
"aria-label": shortName,
|
|
46
48
|
className: _styles.placeholder,
|
|
47
|
-
css: _styles.placeholderContainer,
|
|
49
|
+
css: loading ? [_styles.placeholderContainer, _styles.placeholderContainerAnimated] : _styles.placeholderContainer,
|
|
48
50
|
style: style,
|
|
49
51
|
title: showTooltip ? shortName : ''
|
|
50
52
|
});
|
|
@@ -28,7 +28,19 @@ var createRecordSelectionDefault = function createRecordSelectionDefault(provide
|
|
|
28
28
|
}).catch(function () {
|
|
29
29
|
fireAnalytics && fireAnalytics(_analytics.recordFailed);
|
|
30
30
|
|
|
31
|
-
_analytics.ufoExperiences['emoji-selection-recorded'].failure(
|
|
31
|
+
_analytics.ufoExperiences['emoji-selection-recorded'].failure({
|
|
32
|
+
metadata: {
|
|
33
|
+
reason: 'recordSelection error',
|
|
34
|
+
source: 'RecordSelectionDefault',
|
|
35
|
+
data: {
|
|
36
|
+
emoji: {
|
|
37
|
+
id: emoji.id,
|
|
38
|
+
name: emoji.name,
|
|
39
|
+
shortName: emoji.shortName
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
32
44
|
});
|
|
33
45
|
}
|
|
34
46
|
} finally {
|
|
@@ -57,7 +57,7 @@ var resourcedEmojiModuleLoader = function resourcedEmojiModuleLoader() {
|
|
|
57
57
|
|
|
58
58
|
var resourcedEmojiComponentLoader = function resourcedEmojiComponentLoader() {
|
|
59
59
|
return resourcedEmojiModuleLoader().then(function (module) {
|
|
60
|
-
return module.
|
|
60
|
+
return module.ResourcedEmojiComponent;
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
63
|
|
|
@@ -77,11 +77,12 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
77
77
|
asyncLoadedComponent: ResourcedEmoji.AsyncLoadedComponent
|
|
78
78
|
});
|
|
79
79
|
(0, _analytics.sampledUfoRenderedEmoji)(props.emojiId).start({
|
|
80
|
-
samplingRate: _constants.
|
|
80
|
+
samplingRate: _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
_analytics.ufoExperiences['emoji-rendered'].getInstance(props.emojiId.id || props.emojiId.shortName).addMetadata({
|
|
84
|
-
source: 'resourced-emoji'
|
|
84
|
+
source: 'resourced-emoji',
|
|
85
|
+
emoji: props.emojiId.shortName
|
|
85
86
|
});
|
|
86
87
|
|
|
87
88
|
return _this;
|
|
@@ -90,7 +91,16 @@ var ResourcedEmoji = /*#__PURE__*/function (_LoadingEmojiComponen) {
|
|
|
90
91
|
(0, _createClass2.default)(ResourcedEmoji, [{
|
|
91
92
|
key: "componentWillUnmount",
|
|
92
93
|
value: function componentWillUnmount() {
|
|
93
|
-
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).abort(
|
|
94
|
+
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).abort({
|
|
95
|
+
metadata: {
|
|
96
|
+
source: 'ResourcedEmoji',
|
|
97
|
+
reason: 'unmount',
|
|
98
|
+
data: {
|
|
99
|
+
emojiId: this.props.emojiId.id,
|
|
100
|
+
shortName: this.props.emojiId.shortName
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
94
104
|
}
|
|
95
105
|
}, {
|
|
96
106
|
key: "asyncLoadComponent",
|