@atlaskit/emoji 64.7.1 → 65.0.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 (68) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/api/EmojiResource.js +250 -91
  3. package/dist/cjs/api/media/SiteEmojiResource.js +4 -2
  4. package/dist/cjs/api/media/TokenManager.js +13 -12
  5. package/dist/cjs/components/common/EmojiImage.js +99 -0
  6. package/dist/cjs/components/common/EmojiPlaceholder.js +7 -5
  7. package/dist/cjs/components/common/ResourcedEmoji.js +1 -1
  8. package/dist/cjs/components/common/ResourcedEmojiComponent.js +159 -165
  9. package/dist/cjs/components/common/UploadEmoji.js +3 -14
  10. package/dist/cjs/components/common/styles.js +26 -9
  11. package/dist/cjs/components/picker/EmojiPickerComponent.js +3 -3
  12. package/dist/cjs/components/uploader/EmojiUploadComponent.js +1 -1
  13. package/dist/cjs/context/EmojiContextProvider.js +33 -0
  14. package/dist/cjs/index.js +20 -0
  15. package/dist/cjs/types.js +1 -0
  16. package/dist/cjs/util/analytics/samplingUfo.js +13 -3
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/api/EmojiResource.js +116 -40
  19. package/dist/es2019/api/media/SiteEmojiResource.js +2 -2
  20. package/dist/es2019/api/media/TokenManager.js +12 -12
  21. package/dist/es2019/components/common/EmojiImage.js +74 -0
  22. package/dist/es2019/components/common/EmojiPlaceholder.js +7 -5
  23. package/dist/es2019/components/common/ResourcedEmoji.js +1 -1
  24. package/dist/es2019/components/common/ResourcedEmojiComponent.js +117 -104
  25. package/dist/es2019/components/common/UploadEmoji.js +3 -7
  26. package/dist/es2019/components/common/styles.js +30 -9
  27. package/dist/es2019/components/picker/EmojiPickerComponent.js +2 -2
  28. package/dist/es2019/components/uploader/EmojiUploadComponent.js +1 -1
  29. package/dist/es2019/context/EmojiContextProvider.js +9 -1
  30. package/dist/es2019/index.js +5 -4
  31. package/dist/es2019/types.js +1 -0
  32. package/dist/es2019/util/analytics/samplingUfo.js +11 -1
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/api/EmojiResource.js +257 -93
  35. package/dist/esm/api/media/SiteEmojiResource.js +5 -3
  36. package/dist/esm/api/media/TokenManager.js +13 -12
  37. package/dist/esm/components/common/EmojiImage.js +84 -0
  38. package/dist/esm/components/common/EmojiPlaceholder.js +8 -5
  39. package/dist/esm/components/common/ResourcedEmoji.js +1 -1
  40. package/dist/esm/components/common/ResourcedEmojiComponent.js +155 -165
  41. package/dist/esm/components/common/UploadEmoji.js +3 -12
  42. package/dist/esm/components/common/styles.js +25 -10
  43. package/dist/esm/components/picker/EmojiPickerComponent.js +2 -2
  44. package/dist/esm/components/uploader/EmojiUploadComponent.js +1 -1
  45. package/dist/esm/context/EmojiContextProvider.js +30 -1
  46. package/dist/esm/index.js +5 -4
  47. package/dist/esm/types.js +1 -0
  48. package/dist/esm/util/analytics/samplingUfo.js +13 -2
  49. package/dist/esm/version.json +1 -1
  50. package/dist/types/api/EmojiResource.d.ts +20 -2
  51. package/dist/types/api/EmojiUtils.d.ts +7 -1
  52. package/dist/types/api/media/SiteEmojiResource.d.ts +1 -1
  53. package/dist/types/api/media/TokenManager.d.ts +1 -0
  54. package/dist/types/components/common/EmojiImage.d.ts +13 -0
  55. package/dist/types/components/common/EmojiPlaceholder.d.ts +1 -0
  56. package/dist/types/components/common/LoadingEmojiComponent.d.ts +4 -4
  57. package/dist/types/components/common/ResourcedEmoji.d.ts +3 -3
  58. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +21 -12
  59. package/dist/types/components/common/UploadEmoji.d.ts +1 -1
  60. package/dist/types/components/common/styles.d.ts +1 -0
  61. package/dist/types/index.d.ts +5 -4
  62. package/dist/types/types.d.ts +12 -2
  63. package/dist/types/util/analytics/index.d.ts +1 -1
  64. package/dist/types/util/analytics/samplingUfo.d.ts +1 -8
  65. package/dist/types/util/analytics/ufoExperiences.d.ts +2 -2
  66. package/local-config-example.ts +22 -1
  67. package/package.json +4 -4
  68. package/report.api.md +1287 -0
@@ -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 && ((0, _typeHelpers.isImageRepresentation)(representation) || (0, _typeHelpers.isMediaRepresentation)(representation))) {
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
  });
@@ -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.default;
60
+ return module.ResourcedEmojiComponent;
61
61
  });
62
62
  };
63
63
 
@@ -7,21 +7,9 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = void 0;
10
+ exports.ResourcedEmojiComponent = void 0;
11
11
 
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
24
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
25
13
 
26
14
  var _react = _interopRequireWildcard(require("react"));
27
15
 
@@ -31,7 +19,7 @@ var _typeHelpers = require("../../util/type-helpers");
31
19
 
32
20
  var _types = require("../../types");
33
21
 
34
- var _CachingEmoji = _interopRequireDefault(require("./CachingEmoji"));
22
+ var _Emoji = _interopRequireDefault(require("./Emoji"));
35
23
 
36
24
  var _EmojiPlaceholder = _interopRequireDefault(require("./EmojiPlaceholder"));
37
25
 
@@ -39,76 +27,68 @@ var _analytics = require("../../util/analytics");
39
27
 
40
28
  var _LegacyEmojiContextProvider = _interopRequireDefault(require("../../context/LegacyEmojiContextProvider"));
41
29
 
30
+ var _EmojiImage = require("./EmojiImage");
31
+
42
32
  var _ufoExperiences = require("../../util/analytics/ufoExperiences");
43
33
 
44
34
  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
35
 
46
36
  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
37
 
48
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
49
-
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
-
52
- var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
53
- (0, _inherits2.default)(ResourcedEmojiComponent, _Component);
54
-
55
- var _super = _createSuper(ResourcedEmojiComponent);
56
-
57
- function ResourcedEmojiComponent(props) {
58
- var _this;
59
-
60
- (0, _classCallCheck2.default)(this, ResourcedEmojiComponent);
61
- _this = _super.call(this, props);
62
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "ready", false);
63
- _this.state = {
64
- emoji: undefined,
65
- loaded: false
66
- };
67
- return _this;
68
- }
69
-
70
- (0, _createClass2.default)(ResourcedEmojiComponent, [{
71
- key: "refreshEmoji",
72
- value: function refreshEmoji(emojiProvider, emojiId) {
73
- var _this2 = this;
74
-
75
- var foundEmoji = emojiProvider.findByEmojiId(emojiId);
76
- (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_START);
77
-
78
- if ((0, _typeHelpers.isPromise)(foundEmoji)) {
79
- this.setState({
80
- loaded: false
81
- });
82
- foundEmoji.then(function (emoji) {
83
- if (_this2.ready) {
84
- // don't update state if component was unmounted
85
- _this2.setState({
86
- emoji: emoji,
87
- loaded: true
88
- });
89
-
90
- (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
91
-
92
- if (!emoji) {
93
- // emoji is undefined
94
- (0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
95
- metadata: {
96
- reason: 'failed to find',
97
- source: 'ResourcedEmojiComponent',
98
- data: {
99
- emoji: {
100
- id: emojiId.id,
101
- shortName: emojiId.shortName
102
- }
103
- }
104
- }
105
- });
106
- }
107
- }
108
- }).catch(function () {
38
+ var ResourcedEmojiComponentRenderStatesEnum;
39
+
40
+ (function (ResourcedEmojiComponentRenderStatesEnum) {
41
+ ResourcedEmojiComponentRenderStatesEnum["INITIAL"] = "INITIAL";
42
+ ResourcedEmojiComponentRenderStatesEnum["OPTIMISTIC"] = "OPTIMISTIC";
43
+ ResourcedEmojiComponentRenderStatesEnum["FALLBACK"] = "FALLBACK";
44
+ ResourcedEmojiComponentRenderStatesEnum["EMOJI"] = "EMOJI";
45
+ })(ResourcedEmojiComponentRenderStatesEnum || (ResourcedEmojiComponentRenderStatesEnum = {}));
46
+
47
+ var ResourcedEmojiComponent = function ResourcedEmojiComponent(_ref) {
48
+ var emojiProvider = _ref.emojiProvider,
49
+ emojiId = _ref.emojiId,
50
+ showTooltip = _ref.showTooltip,
51
+ customFallback = _ref.customFallback,
52
+ _ref$fitToHeight = _ref.fitToHeight,
53
+ fitToHeight = _ref$fitToHeight === void 0 ? _constants.defaultEmojiHeight : _ref$fitToHeight,
54
+ _ref$optimistic = _ref.optimistic,
55
+ optimistic = _ref$optimistic === void 0 ? false : _ref$optimistic,
56
+ optimisticImageURL = _ref.optimisticImageURL;
57
+ var shortName = emojiId.shortName,
58
+ id = emojiId.id,
59
+ fallback = emojiId.fallback;
60
+ var emojiContextValue = {
61
+ emoji: {
62
+ emojiProvider: emojiProvider
63
+ }
64
+ };
65
+
66
+ var _useState = (0, _react.useState)(),
67
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
68
+ emoji = _useState2[0],
69
+ setEmoji = _useState2[1];
70
+
71
+ var _useState3 = (0, _react.useState)(false),
72
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
73
+ loaded = _useState4[0],
74
+ setLoaded = _useState4[1];
75
+
76
+ var fetchOrGetEmoji = function fetchOrGetEmoji(emojiProvider, emojiId) {
77
+ var optimisticFetch = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
78
+ // TODO: Pass in optimistic into findByEmojiId to allow a single emoji meta fetch
79
+ var foundEmoji = emojiProvider.fetchByEmojiId(emojiId, optimisticFetch);
80
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_START);
81
+
82
+ if ((0, _typeHelpers.isPromise)(foundEmoji)) {
83
+ setLoaded(false);
84
+ foundEmoji.then(function (emoji) {
85
+ setEmoji(emoji);
86
+
87
+ if (!emoji) {
88
+ // emoji is undefined
109
89
  (0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
110
90
  metadata: {
111
- reason: 'failed to load',
91
+ reason: 'failed to find',
112
92
  source: 'ResourcedEmojiComponent',
113
93
  data: {
114
94
  emoji: {
@@ -118,99 +98,113 @@ var ResourcedEmojiComponent = /*#__PURE__*/function (_Component) {
118
98
  }
119
99
  }
120
100
  });
101
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
102
+
103
+ if (!emoji) {
104
+ // emoji is undefined
105
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
106
+ metadata: {
107
+ reason: 'failed to find',
108
+ source: 'ResourcedEmojiComponent',
109
+ data: {
110
+ emoji: {
111
+ id: emojiId.id,
112
+ shortName: emojiId.shortName
113
+ }
114
+ }
115
+ }
116
+ });
117
+ }
118
+ }
119
+ }).catch(function () {
120
+ setEmoji(undefined);
121
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
122
+ metadata: {
123
+ reason: 'failed to load',
124
+ source: 'ResourcedEmojiComponent',
125
+ data: {
126
+ emoji: {
127
+ id: emojiId.id,
128
+ shortName: emojiId.shortName
129
+ }
130
+ }
131
+ }
121
132
  });
122
- } else {
123
- (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END); // loaded
124
-
125
- this.setState({
126
- emoji: foundEmoji,
127
- loaded: true
128
- });
129
- }
133
+ }).finally(function () {
134
+ setLoaded(true);
135
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
136
+ });
137
+ } else {
138
+ setEmoji(foundEmoji);
139
+ setLoaded(true);
140
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
130
141
  }
131
- }, {
132
- key: "UNSAFE_componentWillMount",
133
- value: function UNSAFE_componentWillMount() {
134
- this.ready = true;
135
-
136
- if (!this.state.emoji) {
137
- // using UNSAFE_componentWillMount instead of componentDidMount to avoid needless
138
- // rerendering.
139
- this.refreshEmoji(this.props.emojiProvider, this.props.emojiId);
140
- }
141
- }
142
- }, {
143
- key: "componentWillUnmount",
144
- value: function componentWillUnmount() {
145
- this.ready = false;
142
+ };
143
+
144
+ (0, _react.useEffect)(function () {
145
+ if (!emojiId) {
146
+ return;
146
147
  }
147
- }, {
148
- key: "componentDidMount",
149
- value: function componentDidMount() {
150
- if (!(0, _ufoExperiences.hasUfoMarked)((0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId), _types.UfoEmojiTimings.FMP_END)) {
151
- (0, _analytics.sampledUfoRenderedEmoji)(this.props.emojiId).markFMP();
152
- }
148
+
149
+ if (!(0, _ufoExperiences.hasUfoMarked)((0, _analytics.sampledUfoRenderedEmoji)(emojiId), _types.UfoEmojiTimings.FMP_END)) {
150
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).markFMP();
153
151
  }
154
- }, {
155
- key: "UNSAFE_componentWillReceiveProps",
156
- value: function UNSAFE_componentWillReceiveProps(nextProps) {
157
- if (nextProps.emojiProvider !== this.props.emojiProvider || nextProps.emojiId !== this.props.emojiId) {
158
- this.refreshEmoji(nextProps.emojiProvider, nextProps.emojiId);
159
- }
152
+ }, [emojiId]);
153
+ (0, _react.useMemo)(function () {
154
+ if (!emojiProvider || !emojiId) {
155
+ return;
160
156
  }
161
- }, {
162
- key: "render",
163
- value: function render() {
164
- var _this$props = this.props,
165
- emojiId = _this$props.emojiId,
166
- _this$props$fitToHeig = _this$props.fitToHeight,
167
- fitToHeight = _this$props$fitToHeig === void 0 ? _constants.defaultEmojiHeight : _this$props$fitToHeig,
168
- showTooltip = _this$props.showTooltip;
169
- var _this$state = this.state,
170
- emoji = _this$state.emoji,
171
- loaded = _this$state.loaded;
172
- var shortName = emojiId.shortName,
173
- fallback = emojiId.fallback;
174
-
175
- if (emoji) {
176
- return this.emojiWrapper( /*#__PURE__*/_react.default.createElement(_CachingEmoji.default, {
177
- emoji: emoji,
178
- showTooltip: showTooltip,
179
- fitToHeight: fitToHeight
180
- }));
181
- } else if (loaded) {
182
- // loaded but not found - render fallback
183
- return this.emojiWrapper( /*#__PURE__*/_react.default.createElement("span", null, fallback || shortName));
184
- }
185
157
 
186
- return this.emojiWrapper( /*#__PURE__*/_react.default.createElement(_EmojiPlaceholder.default, {
187
- shortName: shortName,
188
- showTooltip: showTooltip,
189
- size: fitToHeight || _constants.defaultEmojiHeight
190
- }));
158
+ fetchOrGetEmoji(emojiProvider, emojiId, optimistic);
159
+ }, [emojiProvider, emojiId, optimistic]);
160
+ var emojiRenderState = (0, _react.useMemo)(function () {
161
+ if (!emoji && !loaded && !optimisticImageURL) {
162
+ return ResourcedEmojiComponentRenderStatesEnum.INITIAL;
163
+ } else if (!emoji && !loaded && optimisticImageURL) {
164
+ return ResourcedEmojiComponentRenderStatesEnum.OPTIMISTIC;
165
+ } else if (!emoji && loaded) {
166
+ return ResourcedEmojiComponentRenderStatesEnum.FALLBACK;
191
167
  }
192
- }, {
193
- key: "emojiWrapper",
194
- value: function emojiWrapper(element) {
195
- var _this$props$emojiId = this.props.emojiId,
196
- shortName = _this$props$emojiId.shortName,
197
- id = _this$props$emojiId.id,
198
- fallback = _this$props$emojiId.fallback;
199
- var emojiContextValue = {
200
- emoji: {
201
- emojiProvider: this.props.emojiProvider
202
- }
203
- };
204
- return /*#__PURE__*/_react.default.createElement(_LegacyEmojiContextProvider.default, {
205
- emojiContextValue: emojiContextValue
206
- }, /*#__PURE__*/_react.default.createElement("span", {
207
- "data-emoji-id": id,
208
- "data-emoji-short-name": shortName,
209
- "data-emoji-text": fallback || shortName
210
- }, element));
211
- }
212
- }]);
213
- return ResourcedEmojiComponent;
214
- }(_react.Component);
215
168
 
216
- exports.default = ResourcedEmojiComponent;
169
+ return ResourcedEmojiComponentRenderStatesEnum.EMOJI;
170
+ }, [emoji, loaded, optimisticImageURL]);
171
+
172
+ var handleOnLoadError = function handleOnLoadError(emojiId) {
173
+ (0, _analytics.sampledUfoRenderedEmoji)(emojiId).failure({
174
+ metadata: {
175
+ reason: 'load error',
176
+ source: 'ResourcedEmojiComponent',
177
+ data: {
178
+ emoji: {
179
+ id: emojiId.id,
180
+ shortName: emojiId.shortName
181
+ }
182
+ }
183
+ }
184
+ });
185
+ };
186
+
187
+ return /*#__PURE__*/_react.default.createElement(_LegacyEmojiContextProvider.default, {
188
+ emojiContextValue: emojiContextValue
189
+ }, /*#__PURE__*/_react.default.createElement("span", {
190
+ "data-emoji-id": id,
191
+ "data-emoji-short-name": shortName,
192
+ "data-emoji-text": fallback || shortName
193
+ }, emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.INITIAL && /*#__PURE__*/_react.default.createElement(_EmojiPlaceholder.default, {
194
+ shortName: shortName,
195
+ showTooltip: showTooltip,
196
+ size: fitToHeight || _constants.defaultEmojiHeight,
197
+ loading: true
198
+ }), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.OPTIMISTIC && optimisticImageURL && /*#__PURE__*/_react.default.createElement(_EmojiImage.EmojiImage, {
199
+ emojiId: emojiId,
200
+ imageUrl: optimisticImageURL,
201
+ maxSize: fitToHeight || _constants.defaultEmojiHeight
202
+ }), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.FALLBACK && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, customFallback || fallback || shortName), emojiRenderState === ResourcedEmojiComponentRenderStatesEnum.EMOJI && emoji && /*#__PURE__*/_react.default.createElement(_Emoji.default, {
203
+ emoji: emoji,
204
+ onLoadError: handleOnLoadError,
205
+ showTooltip: showTooltip,
206
+ fitToHeight: fitToHeight
207
+ })));
208
+ };
209
+
210
+ exports.ResourcedEmojiComponent = ResourcedEmojiComponent;
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.uploadEmoji = void 0;
9
7
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
8
  var _EmojiResource = require("../../api/EmojiResource");
13
9
 
14
10
  var _analytics = require("../../util/analytics");
@@ -17,18 +13,14 @@ var _i18n = require("../i18n");
17
13
 
18
14
  var _ufoExperiences = require("../../util/analytics/ufoExperiences");
19
15
 
20
- 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; }
21
-
22
- 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; }
23
-
24
- var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics) {
16
+ var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry) {
25
17
  var startTime = Date.now();
26
18
  errorSetter(undefined);
27
19
 
28
20
  if ((0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
29
21
  _ufoExperiences.ufoExperiences['emoji-uploaded'].start();
30
22
 
31
- emojiProvider.uploadCustomEmoji(upload).then(function (emojiDescription) {
23
+ emojiProvider.uploadCustomEmoji(upload, retry).then(function (emojiDescription) {
32
24
  fireAnalytics((0, _analytics.uploadSucceededEvent)({
33
25
  duration: Date.now() - startTime
34
26
  }));
@@ -47,10 +39,7 @@ var uploadEmoji = function uploadEmoji(upload, emojiProvider, errorSetter, onSuc
47
39
  _ufoExperiences.ufoExperiences['emoji-uploaded'].failure({
48
40
  metadata: {
49
41
  source: 'UploadEmoji',
50
- error: err,
51
- data: {
52
- upload: _objectSpread({}, upload)
53
- }
42
+ error: err
54
43
  }
55
44
  });
56
45
  });
@@ -5,7 +5,9 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.uploadRetryButton = exports.uploadPreviewText = exports.uploadPreviewFooter = exports.uploadPreview = exports.uploadEmojiButton = exports.uploadChooseFileRow = exports.uploadChooseFileMessage = exports.uploadChooseFileEmojiName = exports.uploadChooseFileBrowse = exports.uploadAddRow = exports.toneSelectorContainer = exports.submitDelete = exports.selectOnHoverStyles = exports.previewText = exports.previewImg = exports.previewButtonGroup = exports.preview = exports.placeholderContainer = exports.placeholder = exports.hiddenToneButton = exports.emojiUploadBottom = exports.emojiUpload = exports.emojiToneSelectorContainer = exports.emojiStyles = exports.emojiSprite = exports.emojiShortName = exports.emojiScrollable = exports.emojiPreviewErrorMessage = exports.emojiPreview = exports.emojiPickerAddEmoji = exports.emojiNodeStyles = exports.emojiName = exports.emojiMainStyle = exports.emojiImage = exports.emojiDeleteErrorMessage = exports.emojiDeleteButton = exports.emojiContainer = exports.emojiChooseFileErrorMessage = exports.emojiButton = exports.deleteText = exports.deletePreview = exports.deleteFooter = exports.deleteButton = exports.commonSelectedStyles = exports.cancelButton = exports.buttons = exports.buttonSpinner = exports.bigEmojiPreview = exports.addCustomEmojiButton = exports.addCustomEmoji = void 0;
8
+ exports.uploadRetryButton = exports.uploadPreviewText = exports.uploadPreviewFooter = exports.uploadPreview = exports.uploadEmojiButton = exports.uploadChooseFileRow = exports.uploadChooseFileMessage = exports.uploadChooseFileEmojiName = exports.uploadChooseFileBrowse = exports.uploadAddRow = exports.toneSelectorContainer = exports.submitDelete = exports.selectOnHoverStyles = exports.previewText = exports.previewImg = exports.previewButtonGroup = exports.preview = exports.placeholderContainerAnimated = exports.placeholderContainer = exports.placeholder = exports.hiddenToneButton = exports.emojiUploadBottom = exports.emojiUpload = exports.emojiToneSelectorContainer = exports.emojiStyles = exports.emojiSprite = exports.emojiShortName = exports.emojiScrollable = exports.emojiPreviewErrorMessage = exports.emojiPreview = exports.emojiPickerAddEmoji = exports.emojiNodeStyles = exports.emojiName = exports.emojiMainStyle = exports.emojiImage = exports.emojiDeleteErrorMessage = exports.emojiDeleteButton = exports.emojiContainer = exports.emojiChooseFileErrorMessage = exports.emojiButton = exports.deleteText = exports.deletePreview = exports.deleteFooter = exports.deleteButton = exports.commonSelectedStyles = exports.cancelButton = exports.buttons = exports.buttonSpinner = exports.bigEmojiPreview = exports.addCustomEmojiButton = exports.addCustomEmoji = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
11
 
10
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
13
 
@@ -21,7 +23,7 @@ var _sharedStyles = require("../../util/shared-styles");
21
23
 
22
24
  var _colors = require("@atlaskit/theme/colors");
23
25
 
24
- var _css, _css2, _span, _css3, _css6, _input, _css7;
26
+ var _css, _css2, _templateObject, _span, _css3, _css6, _input, _css7;
25
27
 
26
28
  var commonSelectedStyles = 'emoji-common-selected';
27
29
  exports.commonSelectedStyles = commonSelectedStyles;
@@ -59,7 +61,7 @@ var emojiToneSelectorContainer = (0, _core.css)({
59
61
  });
60
62
  exports.emojiToneSelectorContainer = emojiToneSelectorContainer;
61
63
  var emojiStyles = (0, _core.css)((_css = {
62
- borderRadius: '5px',
64
+ borderRadius: "".concat((0, _constants.borderRadius)(), "px"),
63
65
  backgroundColor: 'transparent',
64
66
  display: 'inline-block',
65
67
  verticalAlign: 'middle',
@@ -85,23 +87,38 @@ var emojiContainer = (0, _core.css)((_css2 = {
85
87
  }), (0, _defineProperty2.default)(_css2, ".".concat(emojiSprite), {
86
88
  background: 'transparent no-repeat',
87
89
  display: 'inline-block',
88
- verticalAlign: 'middle',
89
90
  minHeight: "".concat(_constants2.defaultEmojiHeight, "px"),
90
- minWidth: "".concat(_constants2.defaultEmojiHeight, "px")
91
+ minWidth: "".concat(_constants2.defaultEmojiHeight, "px"),
92
+ verticalAlign: 'middle'
91
93
  }), _css2));
92
94
  exports.emojiContainer = emojiContainer;
93
95
  var placeholder = 'emoji-common-placeholder';
94
96
  exports.placeholder = placeholder;
95
97
  var placeholderContainer = (0, _core.css)({
96
- // Ensure no vertical reflow
98
+ position: 'relative',
97
99
  margin: '-1px 0',
98
100
  display: 'inline-block',
99
101
  background: (0, _tokens.token)('color.border', '#f7f7f7'),
100
- borderRadius: '20%',
102
+ borderRadius: "".concat((0, _constants.borderRadius)(), "px"),
103
+ overflow: 'hidden',
101
104
  verticalAlign: 'middle',
102
- whiteSpace: 'nowrap'
105
+ whiteSpace: 'nowrap',
106
+ textAlign: 'center'
103
107
  });
104
108
  exports.placeholderContainer = placeholderContainer;
109
+ var easeSweep = (0, _core.keyframes)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n from {\n transform: translateX(-100%);\n }\n to {\n transform: translateX(100%);\n }\n"])));
110
+ var placeholderContainerAnimated = (0, _core.css)({
111
+ '&::before': {
112
+ content: '""',
113
+ display: 'block',
114
+ position: 'absolute',
115
+ background: (0, _tokens.token)('color.background.neutral', _colors.N20A),
116
+ height: '100%',
117
+ width: '100%',
118
+ animation: "".concat(easeSweep, " 1s cubic-bezier(0.4, 0.0, 0.2, 1) infinite")
119
+ }
120
+ });
121
+ exports.placeholderContainerAnimated = placeholderContainerAnimated;
105
122
  var emojiButton = (0, _core.css)((_css3 = {
106
123
  backgroundColor: 'transparent',
107
124
  border: '0',
@@ -111,7 +128,7 @@ var emojiButton = (0, _core.css)((_css3 = {
111
128
  border: '0 none',
112
129
  padding: 0
113
130
  }), (0, _defineProperty2.default)(_css3, '&>span', (_span = {
114
- borderRadius: '5px',
131
+ borderRadius: "".concat((0, _constants.borderRadius)(), "px"),
115
132
  padding: '8px'
116
133
  }, (0, _defineProperty2.default)(_span, "&>.".concat(emojiSprite), {
117
134
  height: '24px',