@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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 64.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`2b241314079`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2b241314079) - improve lazy load emoji with placeholder and improved analtyics tracking
|
|
8
|
+
|
|
3
9
|
## 64.6.1
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -307,6 +307,10 @@ var EmojiRepository = /*#__PURE__*/function () {
|
|
|
307
307
|
// frequent category being shown in the picker).
|
|
308
308
|
|
|
309
309
|
if (this.dynamicCategoryList.indexOf(_constants.frequentCategory) === -1) {
|
|
310
|
+
if (typeof window === 'undefined') {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
310
314
|
window.setTimeout(function () {
|
|
311
315
|
_this2.dynamicCategoryList.push(_constants.frequentCategory);
|
|
312
316
|
});
|
|
@@ -212,6 +212,10 @@ var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
|
|
|
212
212
|
}, {
|
|
213
213
|
key: "loadStoredTone",
|
|
214
214
|
value: function loadStoredTone() {
|
|
215
|
+
if (typeof window === 'undefined') {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
|
|
215
219
|
var storedToneString = window.localStorage.getItem(_constants.selectedToneStorageKey);
|
|
216
220
|
|
|
217
221
|
if (storedToneString) {
|
|
@@ -525,6 +529,10 @@ var EmojiResource = /*#__PURE__*/function (_AbstractResource) {
|
|
|
525
529
|
value: function setSelectedTone(tone) {
|
|
526
530
|
this.selectedTone = tone;
|
|
527
531
|
|
|
532
|
+
if (typeof window === 'undefined') {
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
|
|
528
536
|
if ((0, _storageAvailable.default)('localStorage')) {
|
|
529
537
|
try {
|
|
530
538
|
window.localStorage.setItem(_constants.selectedToneStorageKey, tone ? tone.toString() : '');
|
|
@@ -31,6 +31,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
31
31
|
|
|
32
32
|
var _typeHelpers = require("../../util/type-helpers");
|
|
33
33
|
|
|
34
|
+
var _types = require("../../types");
|
|
35
|
+
|
|
34
36
|
var _logger = _interopRequireDefault(require("../../util/logger"));
|
|
35
37
|
|
|
36
38
|
var _Emoji = _interopRequireDefault(require("./Emoji"));
|
|
@@ -46,7 +48,7 @@ var _constants = require("../../util/constants");
|
|
|
46
48
|
var _EmojiContext = require("../../context/EmojiContext");
|
|
47
49
|
|
|
48
50
|
var _excluded = ["placeholderSize"],
|
|
49
|
-
_excluded2 = ["children"
|
|
51
|
+
_excluded2 = ["children"];
|
|
50
52
|
|
|
51
53
|
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); }
|
|
52
54
|
|
|
@@ -66,8 +68,12 @@ var CachingEmoji = function CachingEmoji(props) {
|
|
|
66
68
|
emojiProps = (0, _objectWithoutProperties2.default)(props, _excluded); // start emoji rendered experience, it may have already started earlier in ResourcedEmoji
|
|
67
69
|
|
|
68
70
|
(0, _analytics.useSampledUFOComponentExperience)(_analytics.ufoExperiences['emoji-rendered'].getInstance(emojiProps.emoji.id || emojiProps.emoji.shortName), _constants.SAMPLING_RATE_EMOJI_RENDERED_EXP, {
|
|
69
|
-
source: 'caching-emoji'
|
|
71
|
+
source: 'caching-emoji',
|
|
72
|
+
emoji: emojiProps.emoji.shortName
|
|
70
73
|
});
|
|
74
|
+
(0, _react.useEffect)(function () {
|
|
75
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiProps.emoji).mark(_types.UfoEmojiTimings.MOUNTED_END); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
|
+
}, []);
|
|
71
77
|
|
|
72
78
|
var emojiNode = function emojiNode() {
|
|
73
79
|
if ((0, _typeHelpers.isMediaEmoji)(props.emoji)) {
|
|
@@ -120,11 +126,6 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
(0, _createClass2.default)(CachingMediaEmoji, [{
|
|
123
|
-
key: "componentDidMount",
|
|
124
|
-
value: function componentDidMount() {
|
|
125
|
-
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emoji).markFMP();
|
|
126
|
-
}
|
|
127
|
-
}, {
|
|
128
129
|
key: "componentDidUpdate",
|
|
129
130
|
value: function componentDidUpdate() {
|
|
130
131
|
var _this$state$cachedEmo;
|
|
@@ -153,11 +154,14 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
153
154
|
}
|
|
154
155
|
|
|
155
156
|
(0, _logger.default)('Loading image via media cache', emoji.shortName);
|
|
157
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emoji).mark(_types.UfoEmojiTimings.MEDIA_START);
|
|
156
158
|
emojiProvider.getMediaEmojiDescriptionURLWithInlineToken(emoji).then(function (cachedEmoji) {
|
|
157
159
|
_this2.setState({
|
|
158
160
|
cachedEmoji: cachedEmoji,
|
|
159
161
|
invalidImage: false
|
|
160
162
|
});
|
|
163
|
+
|
|
164
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emoji).mark(_types.UfoEmojiTimings.MEDIA_END);
|
|
161
165
|
}).catch(function () {
|
|
162
166
|
_this2.setState({
|
|
163
167
|
cachedEmoji: undefined,
|
|
@@ -179,7 +183,6 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
179
183
|
invalidImage = _this$state.invalidImage;
|
|
180
184
|
var _this$props = this.props,
|
|
181
185
|
children = _this$props.children,
|
|
182
|
-
placeholderSize = _this$props.placeholderSize,
|
|
183
186
|
otherProps = (0, _objectWithoutProperties2.default)(_this$props, _excluded2);
|
|
184
187
|
var emojiComponent;
|
|
185
188
|
|
|
@@ -191,13 +194,13 @@ var CachingMediaEmoji = /*#__PURE__*/function (_PureComponent) {
|
|
|
191
194
|
} else {
|
|
192
195
|
var _this$props2 = this.props,
|
|
193
196
|
emoji = _this$props2.emoji,
|
|
194
|
-
|
|
197
|
+
placeholderSize = _this$props2.placeholderSize,
|
|
195
198
|
showTooltip = _this$props2.showTooltip,
|
|
196
199
|
fitToHeight = _this$props2.fitToHeight;
|
|
197
200
|
var shortName = emoji.shortName,
|
|
198
201
|
representation = emoji.representation;
|
|
199
202
|
emojiComponent = /*#__PURE__*/_react.default.createElement(_EmojiPlaceholder.default, {
|
|
200
|
-
size: fitToHeight ||
|
|
203
|
+
size: fitToHeight || placeholderSize,
|
|
201
204
|
shortName: shortName,
|
|
202
205
|
showTooltip: showTooltip,
|
|
203
206
|
representation: representation
|
|
@@ -25,7 +25,8 @@ var _styles = require("./styles");
|
|
|
25
25
|
var DeleteButton = function DeleteButton(props) {
|
|
26
26
|
return (0, _core.jsx)("span", {
|
|
27
27
|
css: _styles.deleteButton,
|
|
28
|
-
className: _styles.emojiDeleteButton
|
|
28
|
+
className: _styles.emojiDeleteButton,
|
|
29
|
+
"data-testid": "emoji-delete-button"
|
|
29
30
|
}, (0, _core.jsx)(_customThemeButton.default, {
|
|
30
31
|
iconBefore: (0, _core.jsx)(_crossCircle.default, {
|
|
31
32
|
label: _constants.deleteEmojiLabel,
|
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
8
|
-
exports.default = exports.Emoji = void 0;
|
|
10
|
+
exports.default = exports.SpriteEmoji = exports.ImageEmoji = exports.Emoji = void 0;
|
|
9
11
|
|
|
10
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
13
|
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
12
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
17
|
|
|
14
18
|
var _core = require("@emotion/core");
|
|
15
19
|
|
|
16
|
-
var _react =
|
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
21
|
|
|
18
22
|
var _EmojiUtils = require("../../api/EmojiUtils");
|
|
19
23
|
|
|
@@ -21,6 +25,8 @@ var _constants = require("../../util/constants");
|
|
|
21
25
|
|
|
22
26
|
var _typeHelpers = require("../../util/type-helpers");
|
|
23
27
|
|
|
28
|
+
var _types = require("../../types");
|
|
29
|
+
|
|
24
30
|
var _mouse = require("../../util/mouse");
|
|
25
31
|
|
|
26
32
|
var _DeleteButton = _interopRequireDefault(require("./DeleteButton"));
|
|
@@ -29,6 +35,16 @@ var _styles = require("./styles");
|
|
|
29
35
|
|
|
30
36
|
var _analytics = require("../../util/analytics");
|
|
31
37
|
|
|
38
|
+
var _ = require("../..");
|
|
39
|
+
|
|
40
|
+
var _reactIntersectionObserver = require("react-intersection-observer");
|
|
41
|
+
|
|
42
|
+
var _browserSupport = require("../../util/browser-support");
|
|
43
|
+
|
|
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
|
+
|
|
46
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
47
|
+
|
|
32
48
|
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; }
|
|
33
49
|
|
|
34
50
|
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) { (0, _defineProperty2.default)(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; }
|
|
@@ -97,7 +113,7 @@ var handleImageError = function handleImageError(props, event) {
|
|
|
97
113
|
// When rendering 1500+ emoji using class based components had a significant impact.
|
|
98
114
|
|
|
99
115
|
|
|
100
|
-
var
|
|
116
|
+
var SpriteEmoji = function SpriteEmoji(props) {
|
|
101
117
|
var emoji = props.emoji,
|
|
102
118
|
fitToHeight = props.fitToHeight,
|
|
103
119
|
selected = props.selected,
|
|
@@ -128,11 +144,9 @@ var renderAsSprite = function renderAsSprite(props) {
|
|
|
128
144
|
backgroundSize: "".concat(sprite.column * 100, "% ").concat(sprite.row * 100, "%")
|
|
129
145
|
}, sizing);
|
|
130
146
|
|
|
131
|
-
var emojiNode = (0, _core.jsx)("span", {
|
|
132
|
-
className: _styles.emojiSprite,
|
|
133
|
-
style: style
|
|
134
|
-
}, "\xA0");
|
|
135
147
|
return (0, _core.jsx)("span", {
|
|
148
|
+
"data-testid": "sprite-emoji-".concat(emoji.shortName),
|
|
149
|
+
"data-emoji-type": "sprite",
|
|
136
150
|
tabIndex: shouldBeInteractive ? 0 : undefined,
|
|
137
151
|
role: shouldBeInteractive ? 'button' : undefined,
|
|
138
152
|
css: _styles.emojiContainer,
|
|
@@ -148,11 +162,16 @@ var renderAsSprite = function renderAsSprite(props) {
|
|
|
148
162
|
},
|
|
149
163
|
"aria-label": emoji.shortName,
|
|
150
164
|
title: showTooltip ? emoji.shortName : ''
|
|
151
|
-
},
|
|
165
|
+
}, (0, _core.jsx)("span", {
|
|
166
|
+
className: _styles.emojiSprite,
|
|
167
|
+
style: style
|
|
168
|
+
}, "\xA0"));
|
|
152
169
|
}; // Keep as pure functional component, see renderAsSprite.
|
|
153
170
|
|
|
154
171
|
|
|
155
|
-
|
|
172
|
+
exports.SpriteEmoji = SpriteEmoji;
|
|
173
|
+
|
|
174
|
+
var ImageEmoji = function ImageEmoji(props) {
|
|
156
175
|
var emoji = props.emoji,
|
|
157
176
|
fitToHeight = props.fitToHeight,
|
|
158
177
|
selected = props.selected,
|
|
@@ -202,16 +221,28 @@ var renderAsImage = function renderAsImage(props) {
|
|
|
202
221
|
};
|
|
203
222
|
|
|
204
223
|
var onLoad = function onLoad() {
|
|
224
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emoji).mark(_types.UfoEmojiTimings.ONLOAD_END);
|
|
205
225
|
(0, _analytics.sampledUfoRenderedEmoji)(emoji).success();
|
|
206
|
-
};
|
|
207
|
-
// change preview image until loaded
|
|
208
|
-
// We currently have the following error: property 'loading' does not exist on type 'DetailedHTMLProps<ImgHTMLAttributes, HTMLImageElement>'
|
|
209
|
-
// The fix for this was added as a part of @types/react@16.9.20 - https://github.com/facebook/react/issues/16942
|
|
210
|
-
// 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.
|
|
211
|
-
|
|
226
|
+
};
|
|
212
227
|
|
|
228
|
+
var onBeforeLoad = (0, _react.useCallback)(function () {
|
|
229
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emoji).mark(_types.UfoEmojiTimings.ONLOAD_START);
|
|
230
|
+
}, [emoji]);
|
|
231
|
+
|
|
232
|
+
var _useInView = (0, _reactIntersectionObserver.useInView)({
|
|
233
|
+
triggerOnce: true
|
|
234
|
+
}),
|
|
235
|
+
_useInView2 = (0, _slicedToArray2.default)(_useInView, 2),
|
|
236
|
+
ref = _useInView2[0],
|
|
237
|
+
inView = _useInView2[1];
|
|
238
|
+
|
|
239
|
+
(0, _react.useEffect)(function () {
|
|
240
|
+
if (inView) {
|
|
241
|
+
onBeforeLoad();
|
|
242
|
+
}
|
|
243
|
+
}, [inView, onBeforeLoad]);
|
|
213
244
|
var emojiNode = (0, _core.jsx)("img", (0, _extends2.default)({
|
|
214
|
-
|
|
245
|
+
//@ts-ignore
|
|
215
246
|
loading: "lazy",
|
|
216
247
|
src: src,
|
|
217
248
|
key: src,
|
|
@@ -226,7 +257,29 @@ var renderAsImage = function renderAsImage(props) {
|
|
|
226
257
|
onError: onError,
|
|
227
258
|
onLoad: onLoad
|
|
228
259
|
}, 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
|
+
|
|
229
280
|
return (0, _core.jsx)("span", {
|
|
281
|
+
"data-testid": "image-emoji-".concat(emoji.shortName),
|
|
282
|
+
"data-emoji-type": "image",
|
|
230
283
|
css: _styles.emojiStyles,
|
|
231
284
|
tabIndex: shouldBeInteractive ? 0 : undefined,
|
|
232
285
|
role: shouldBeInteractive ? 'button' : undefined,
|
|
@@ -241,18 +294,21 @@ var renderAsImage = function renderAsImage(props) {
|
|
|
241
294
|
handleMouseMove(props, event);
|
|
242
295
|
},
|
|
243
296
|
"aria-label": emoji.shortName,
|
|
244
|
-
title: showTooltip ? emoji.shortName : ''
|
|
245
|
-
|
|
297
|
+
title: showTooltip ? emoji.shortName : '',
|
|
298
|
+
ref: ref
|
|
299
|
+
}, deleteButton, renderLazyLoadedEmoji());
|
|
246
300
|
};
|
|
247
301
|
|
|
302
|
+
exports.ImageEmoji = ImageEmoji;
|
|
303
|
+
|
|
248
304
|
var Emoji = function Emoji(props) {
|
|
249
305
|
var emoji = props.emoji; // TODO: We always prefer render as image as having accessibility issues with sprite representation
|
|
250
306
|
|
|
251
307
|
if ((0, _typeHelpers.isSpriteRepresentation)(emoji.representation)) {
|
|
252
|
-
return
|
|
308
|
+
return (0, _core.jsx)(SpriteEmoji, props);
|
|
253
309
|
}
|
|
254
310
|
|
|
255
|
-
return
|
|
311
|
+
return (0, _core.jsx)(ImageEmoji, props);
|
|
256
312
|
};
|
|
257
313
|
|
|
258
314
|
exports.Emoji = Emoji;
|
|
@@ -41,6 +41,7 @@ var EmojiPlaceholder = function EmojiPlaceholder(props) {
|
|
|
41
41
|
height: "".concat(height, "px")
|
|
42
42
|
};
|
|
43
43
|
return (0, _core.jsx)("span", {
|
|
44
|
+
"data-testid": "emoji-placeholder-".concat(shortName),
|
|
44
45
|
"aria-label": shortName,
|
|
45
46
|
className: _styles.placeholder,
|
|
46
47
|
css: _styles.placeholderContainer,
|
|
@@ -67,6 +67,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
|
|
|
67
67
|
if (_this.debounced) {
|
|
68
68
|
clearTimeout(_this.debounced);
|
|
69
69
|
_this.debounced = null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (typeof window === 'undefined') {
|
|
73
|
+
return;
|
|
70
74
|
} // Timeout set to 30ms as to not throttle IE11
|
|
71
75
|
|
|
72
76
|
|
|
@@ -85,7 +89,11 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
|
|
|
85
89
|
this.popup = document.createElement('div');
|
|
86
90
|
document.body.appendChild(this.popup);
|
|
87
91
|
this.popup.style.position = 'absolute';
|
|
88
|
-
|
|
92
|
+
|
|
93
|
+
if (typeof window !== 'undefined') {
|
|
94
|
+
window.addEventListener('resize', this.handleResize);
|
|
95
|
+
}
|
|
96
|
+
|
|
89
97
|
this.applyAbsolutePosition();
|
|
90
98
|
this.renderContent();
|
|
91
99
|
}
|
|
@@ -98,6 +106,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
|
|
|
98
106
|
}, {
|
|
99
107
|
key: "componentWillUnmount",
|
|
100
108
|
value: function componentWillUnmount() {
|
|
109
|
+
if (typeof window === 'undefined') {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
101
113
|
window.removeEventListener('resize', this.handleResize);
|
|
102
114
|
|
|
103
115
|
if (this.popup) {
|
|
@@ -124,6 +136,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
|
|
|
124
136
|
}, {
|
|
125
137
|
key: "applyAbovePosition",
|
|
126
138
|
value: function applyAbovePosition() {
|
|
139
|
+
if (typeof window === 'undefined') {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
|
|
127
143
|
var targetNode = getTargetNode(this.props.target);
|
|
128
144
|
|
|
129
145
|
if (targetNode && this.popup) {
|
|
@@ -138,6 +154,10 @@ var Popup = /*#__PURE__*/function (_PureComponent) {
|
|
|
138
154
|
}, {
|
|
139
155
|
key: "applyAbsolutePosition",
|
|
140
156
|
value: function applyAbsolutePosition() {
|
|
157
|
+
if (typeof window === 'undefined') {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
141
161
|
if (this.props.relativePosition === 'above') {
|
|
142
162
|
this.applyAbovePosition();
|
|
143
163
|
} else if (this.props.relativePosition === 'below') {
|
|
@@ -29,6 +29,8 @@ var _constants = require("../../util/constants");
|
|
|
29
29
|
|
|
30
30
|
var _typeHelpers = require("../../util/type-helpers");
|
|
31
31
|
|
|
32
|
+
var _types = require("../../types");
|
|
33
|
+
|
|
32
34
|
var _CachingEmoji = _interopRequireDefault(require("./CachingEmoji"));
|
|
33
35
|
|
|
34
36
|
var _EmojiPlaceholder = _interopRequireDefault(require("./EmojiPlaceholder"));
|
|
@@ -69,6 +71,7 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
69
71
|
var _this2 = this;
|
|
70
72
|
|
|
71
73
|
var foundEmoji = emojiProvider.findByEmojiId(emojiId);
|
|
74
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_START);
|
|
72
75
|
|
|
73
76
|
if ((0, _typeHelpers.isPromise)(foundEmoji)) {
|
|
74
77
|
this.setState({
|
|
@@ -82,6 +85,8 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
82
85
|
loaded: true
|
|
83
86
|
});
|
|
84
87
|
|
|
88
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
|
|
89
|
+
|
|
85
90
|
if (!emoji) {
|
|
86
91
|
// emoji is undefined
|
|
87
92
|
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
|
|
@@ -99,7 +104,8 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
99
104
|
});
|
|
100
105
|
});
|
|
101
106
|
} else {
|
|
102
|
-
// loaded
|
|
107
|
+
(0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END); // loaded
|
|
108
|
+
|
|
103
109
|
this.setState({
|
|
104
110
|
emoji: foundEmoji,
|
|
105
111
|
loaded: true
|
|
@@ -122,6 +128,11 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
|
|
|
122
128
|
value: function componentWillUnmount() {
|
|
123
129
|
this.ready = false;
|
|
124
130
|
}
|
|
131
|
+
}, {
|
|
132
|
+
key: "componentDidMount",
|
|
133
|
+
value: function componentDidMount() {
|
|
134
|
+
(0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).mark(_types.UfoEmojiTimings.MOUNTED_END);
|
|
135
|
+
}
|
|
125
136
|
}, {
|
|
126
137
|
key: "UNSAFE_componentWillReceiveProps",
|
|
127
138
|
value: function UNSAFE_componentWillReceiveProps(nextProps) {
|
|
@@ -329,6 +329,10 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
329
329
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "scrollToEndOfList", function () {
|
|
330
330
|
var emojiPickerList = _this.refs.emojiPickerList;
|
|
331
331
|
|
|
332
|
+
if (typeof window === 'undefined') {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
332
336
|
if (emojiPickerList) {
|
|
333
337
|
// Wait a tick to ensure repaint and updated height for picker list
|
|
334
338
|
window.setTimeout(function () {
|
|
@@ -433,8 +437,6 @@ var EmojiPickerComponent = /*#__PURE__*/function (_PureComponent) {
|
|
|
433
437
|
_analytics.ufoExperiences['emoji-picker-opened'].abort();
|
|
434
438
|
|
|
435
439
|
_analytics.ufoExperiences['emoji-searched'].abort();
|
|
436
|
-
|
|
437
|
-
_analytics.ufoExperiences['emoji-selection-recorded'].abort();
|
|
438
440
|
}
|
|
439
441
|
}, {
|
|
440
442
|
key: "UNSAFE_componentWillReceiveProps",
|
|
@@ -84,6 +84,11 @@ var EmojiPickerListSearch = /*#__PURE__*/function (_PureComponent) {
|
|
|
84
84
|
// setting the focus to search input.
|
|
85
85
|
// see FS-2056
|
|
86
86
|
_this.inputRef = input;
|
|
87
|
+
|
|
88
|
+
if (typeof window === 'undefined') {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
87
92
|
window.setTimeout(_this.focusInput);
|
|
88
93
|
}
|
|
89
94
|
});
|
|
@@ -181,6 +181,8 @@ var emojiItem = (0, _core.css)((_css6 = {
|
|
|
181
181
|
margin: '7px',
|
|
182
182
|
minWidth: '24px',
|
|
183
183
|
maxWidth: '24px'
|
|
184
|
+
}), (0, _defineProperty2.default)(_css6, "& .".concat(_styles.emojiNodeStyles, " .").concat(_styles.placeholder), {
|
|
185
|
+
margin: '0'
|
|
184
186
|
}), (0, _defineProperty2.default)(_css6, "& .".concat(_styles.emojiNodeStyles, " > img"), {
|
|
185
187
|
position: 'relative',
|
|
186
188
|
left: '50%',
|
package/dist/cjs/types.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.UfoExperienceName = exports.UfoComponentName = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
6
|
+
exports.UfoExperienceName = exports.UfoEmojiTimingsKeys = exports.UfoEmojiTimings = exports.UfoComponentName = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Minimum information to defined an emoji is the shortName.
|
|
@@ -72,4 +72,27 @@ exports.UfoComponentName = UfoComponentName;
|
|
|
72
72
|
UfoComponentName["EMOJI"] = "emoji";
|
|
73
73
|
UfoComponentName["EMOJI_PICKER"] = "emoji-picker";
|
|
74
74
|
UfoComponentName["EMOJI_PROVIDER"] = "emoji-provider";
|
|
75
|
-
})(UfoComponentName || (exports.UfoComponentName = UfoComponentName = {}));
|
|
75
|
+
})(UfoComponentName || (exports.UfoComponentName = UfoComponentName = {}));
|
|
76
|
+
|
|
77
|
+
var UfoEmojiTimingsKeys;
|
|
78
|
+
exports.UfoEmojiTimingsKeys = UfoEmojiTimingsKeys;
|
|
79
|
+
|
|
80
|
+
(function (UfoEmojiTimingsKeys) {
|
|
81
|
+
UfoEmojiTimingsKeys["MOUNTED"] = "emoji-mount";
|
|
82
|
+
UfoEmojiTimingsKeys["METADATA"] = "emoji-metadata";
|
|
83
|
+
UfoEmojiTimingsKeys["MEDIADATA"] = "emoji-media";
|
|
84
|
+
UfoEmojiTimingsKeys["ONLOAD"] = "emoji-onload";
|
|
85
|
+
})(UfoEmojiTimingsKeys || (exports.UfoEmojiTimingsKeys = UfoEmojiTimingsKeys = {}));
|
|
86
|
+
|
|
87
|
+
var UfoEmojiTimings;
|
|
88
|
+
exports.UfoEmojiTimings = UfoEmojiTimings;
|
|
89
|
+
|
|
90
|
+
(function (UfoEmojiTimings) {
|
|
91
|
+
UfoEmojiTimings["MOUNTED_END"] = "emoji-mount_end";
|
|
92
|
+
UfoEmojiTimings["METADATA_START"] = "emoji-metadata_start";
|
|
93
|
+
UfoEmojiTimings["METADATA_END"] = "emoji-metadata_end";
|
|
94
|
+
UfoEmojiTimings["MEDIA_START"] = "emoji-media_start";
|
|
95
|
+
UfoEmojiTimings["MEDIA_END"] = "emoji-media_end";
|
|
96
|
+
UfoEmojiTimings["ONLOAD_START"] = "emoji-onload_start";
|
|
97
|
+
UfoEmojiTimings["ONLOAD_END"] = "emoji-onload_end";
|
|
98
|
+
})(UfoEmojiTimings || (exports.UfoEmojiTimings = UfoEmojiTimings = {}));
|
|
@@ -31,8 +31,33 @@ var createInlineExperience = function createInlineExperience(componentName) {
|
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
var customEmojiTimings = [{
|
|
35
|
+
key: _types.UfoEmojiTimingsKeys.MOUNTED,
|
|
36
|
+
endMark: _types.UfoEmojiTimings.MOUNTED_END
|
|
37
|
+
}, {
|
|
38
|
+
key: _types.UfoEmojiTimingsKeys.METADATA,
|
|
39
|
+
component: 'resourced-emoji',
|
|
40
|
+
startMark: _types.UfoEmojiTimings.METADATA_START,
|
|
41
|
+
endMark: _types.UfoEmojiTimings.METADATA_END
|
|
42
|
+
}, {
|
|
43
|
+
key: _types.UfoEmojiTimingsKeys.MEDIADATA,
|
|
44
|
+
component: 'caching-emoji',
|
|
45
|
+
startMark: _types.UfoEmojiTimings.MEDIA_START,
|
|
46
|
+
endMark: _types.UfoEmojiTimings.MEDIA_END
|
|
47
|
+
}, {
|
|
48
|
+
key: _types.UfoEmojiTimingsKeys.ONLOAD,
|
|
49
|
+
startMark: _types.UfoEmojiTimings.ONLOAD_START,
|
|
50
|
+
endMark: _types.UfoEmojiTimings.ONLOAD_END
|
|
51
|
+
}];
|
|
34
52
|
var ufoExperiences = {
|
|
35
|
-
'emoji-rendered': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RENDERED,
|
|
53
|
+
'emoji-rendered': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RENDERED, {
|
|
54
|
+
platform: {
|
|
55
|
+
component: _types.UfoComponentName.EMOJI
|
|
56
|
+
},
|
|
57
|
+
type: _ufo.ExperienceTypes.Operation,
|
|
58
|
+
performanceType: _ufo.ExperiencePerformanceTypes.Custom,
|
|
59
|
+
timings: customEmojiTimings
|
|
60
|
+
}),
|
|
36
61
|
'emoji-resource-fetched': new _ufo.ConcurrentExperience(_types.UfoExperienceName.EMOJI_RESOURCE_FETCHED, createRenderExperience(_types.UfoComponentName.EMOJI_PROVIDER)),
|
|
37
62
|
'emoji-picker-opened': new _ufo.UFOExperience(_types.UfoExperienceName.EMOJI_PICKER_OPENED, createRenderExperience(_types.UfoComponentName.EMOJI_PICKER)),
|
|
38
63
|
'emoji-selection-recorded': new _ufo.UFOExperience(_types.UfoExperienceName.EMOJI_SELECTION_RECORDED, createInlineExperience(_types.UfoComponentName.EMOJI_PROVIDER)),
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isIntersectionObserverSupported = void 0;
|
|
7
|
+
var isIntersectionObserverSupported = typeof window === 'undefined' ? false : !!window.IntersectionObserver;
|
|
8
|
+
exports.isIntersectionObserverSupported = isIntersectionObserverSupported;
|
|
@@ -8,6 +8,10 @@ exports.default = storageAvailable;
|
|
|
8
8
|
// Copied from https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage
|
|
9
9
|
// a brief history of local storage - https://gist.github.com/paulirish/5558557
|
|
10
10
|
function storageAvailable(type) {
|
|
11
|
+
if (typeof window === 'undefined') {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
var storage;
|
|
12
16
|
|
|
13
17
|
try {
|
package/dist/cjs/version.json
CHANGED
|
@@ -246,6 +246,10 @@ export default class EmojiRepository {
|
|
|
246
246
|
// frequent category being shown in the picker).
|
|
247
247
|
|
|
248
248
|
if (this.dynamicCategoryList.indexOf(frequentCategory) === -1) {
|
|
249
|
+
if (typeof window === 'undefined') {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
|
|
249
253
|
window.setTimeout(() => {
|
|
250
254
|
this.dynamicCategoryList.push(frequentCategory);
|
|
251
255
|
});
|
|
@@ -143,6 +143,10 @@ export class EmojiResource extends AbstractResource {
|
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
loadStoredTone() {
|
|
146
|
+
if (typeof window === 'undefined') {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
|
|
146
150
|
const storedToneString = window.localStorage.getItem(selectedToneStorageKey);
|
|
147
151
|
|
|
148
152
|
if (storedToneString) {
|
|
@@ -384,6 +388,10 @@ export class EmojiResource extends AbstractResource {
|
|
|
384
388
|
setSelectedTone(tone) {
|
|
385
389
|
this.selectedTone = tone;
|
|
386
390
|
|
|
391
|
+
if (typeof window === 'undefined') {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
|
|
387
395
|
if (storageAvailable('localStorage')) {
|
|
388
396
|
try {
|
|
389
397
|
window.localStorage.setItem(selectedToneStorageKey, tone ? tone.toString() : '');
|