@atlaskit/emoji 65.0.0 → 65.2.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 (115) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/cjs/components/common/CachingEmoji.js +84 -151
  3. package/dist/cjs/components/common/Emoji.js +2 -2
  4. package/dist/cjs/components/common/EmojiActions.js +129 -175
  5. package/dist/cjs/components/common/EmojiErrorMessage.js +23 -59
  6. package/dist/cjs/components/common/EmojiPreviewComponent.js +1 -0
  7. package/dist/cjs/components/common/EmojiUploadPicker.js +235 -293
  8. package/dist/cjs/components/common/FileChooser.js +34 -71
  9. package/dist/cjs/components/common/Popup.js +105 -154
  10. package/dist/cjs/components/common/ResourcedEmojiComponent.js +10 -5
  11. package/dist/cjs/components/common/RetryableButton.js +43 -64
  12. package/dist/cjs/components/common/ToneSelector.js +50 -89
  13. package/dist/cjs/components/common/styles.js +14 -16
  14. package/dist/cjs/components/hooks.js +16 -0
  15. package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +16 -48
  16. package/dist/cjs/components/picker/EmojiPickerComponent.js +496 -508
  17. package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +33 -60
  18. package/dist/cjs/components/picker/EmojiPickerFooter.js +13 -46
  19. package/dist/cjs/components/picker/styles.js +16 -13
  20. package/dist/cjs/components/uploader/EmojiUploadComponent.js +124 -109
  21. package/dist/cjs/hooks/useEmojiContext.js +16 -0
  22. package/dist/cjs/hooks/usePrevious.js +16 -0
  23. package/dist/cjs/index.js +16 -0
  24. package/dist/cjs/util/constants.js +3 -1
  25. package/dist/cjs/version.json +1 -1
  26. package/dist/es2019/components/common/CachingEmoji.js +65 -112
  27. package/dist/es2019/components/common/Emoji.js +2 -2
  28. package/dist/es2019/components/common/EmojiActions.js +124 -150
  29. package/dist/es2019/components/common/EmojiErrorMessage.js +22 -26
  30. package/dist/es2019/components/common/EmojiPreviewComponent.js +1 -0
  31. package/dist/es2019/components/common/EmojiUploadPicker.js +190 -253
  32. package/dist/es2019/components/common/FileChooser.js +37 -40
  33. package/dist/es2019/components/common/Popup.js +89 -109
  34. package/dist/es2019/components/common/ResourcedEmojiComponent.js +5 -4
  35. package/dist/es2019/components/common/RetryableButton.js +43 -34
  36. package/dist/es2019/components/common/ToneSelector.js +46 -59
  37. package/dist/es2019/components/common/styles.js +9 -9
  38. package/dist/es2019/components/hooks.js +8 -0
  39. package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +13 -17
  40. package/dist/es2019/components/picker/EmojiPickerComponent.js +417 -497
  41. package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +32 -35
  42. package/dist/es2019/components/picker/EmojiPickerFooter.js +11 -19
  43. package/dist/es2019/components/picker/styles.js +16 -14
  44. package/dist/es2019/components/uploader/EmojiUploadComponent.js +81 -91
  45. package/dist/es2019/hooks/useEmojiContext.js +3 -0
  46. package/dist/es2019/hooks/usePrevious.js +8 -0
  47. package/dist/es2019/index.js +4 -1
  48. package/dist/es2019/util/constants.js +1 -0
  49. package/dist/es2019/version.json +1 -1
  50. package/dist/esm/components/common/CachingEmoji.js +86 -156
  51. package/dist/esm/components/common/Emoji.js +2 -2
  52. package/dist/esm/components/common/EmojiActions.js +129 -176
  53. package/dist/esm/components/common/EmojiErrorMessage.js +21 -56
  54. package/dist/esm/components/common/EmojiPreviewComponent.js +1 -0
  55. package/dist/esm/components/common/EmojiUploadPicker.js +233 -299
  56. package/dist/esm/components/common/FileChooser.js +34 -70
  57. package/dist/esm/components/common/Popup.js +104 -155
  58. package/dist/esm/components/common/ResourcedEmojiComponent.js +8 -4
  59. package/dist/esm/components/common/RetryableButton.js +40 -60
  60. package/dist/esm/components/common/ToneSelector.js +50 -87
  61. package/dist/esm/components/common/styles.js +10 -10
  62. package/dist/esm/components/hooks.js +8 -0
  63. package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +14 -43
  64. package/dist/esm/components/picker/EmojiPickerComponent.js +486 -526
  65. package/dist/esm/components/picker/EmojiPickerEmojiRow.js +31 -59
  66. package/dist/esm/components/picker/EmojiPickerFooter.js +14 -47
  67. package/dist/esm/components/picker/styles.js +16 -14
  68. package/dist/esm/components/uploader/EmojiUploadComponent.js +119 -113
  69. package/dist/esm/hooks/useEmojiContext.js +5 -0
  70. package/dist/esm/hooks/usePrevious.js +8 -0
  71. package/dist/esm/index.js +4 -1
  72. package/dist/esm/util/constants.js +1 -0
  73. package/dist/esm/version.json +1 -1
  74. package/dist/types/api/EmojiResource.d.ts +2 -3
  75. package/dist/types/components/common/CachingEmoji.d.ts +3 -13
  76. package/dist/types/components/common/Emoji.d.ts +1 -2
  77. package/dist/types/components/common/EmojiActions.d.ts +6 -17
  78. package/dist/types/components/common/EmojiErrorMessage.d.ts +3 -6
  79. package/dist/types/components/common/EmojiPreviewComponent.d.ts +2 -2
  80. package/dist/types/components/common/EmojiUploadPicker.d.ts +3 -27
  81. package/dist/types/components/common/FileChooser.d.ts +3 -5
  82. package/dist/types/components/common/LoadingEmojiComponent.d.ts +3 -0
  83. package/dist/types/components/common/Popup.d.ts +3 -20
  84. package/dist/types/components/common/ResourcedEmojiComponent.d.ts +23 -11
  85. package/dist/types/components/common/RetryableButton.d.ts +3 -7
  86. package/dist/types/components/common/ToneSelector.d.ts +4 -10
  87. package/dist/types/components/common/setSkinToneAriaLabelText.d.ts +1 -1
  88. package/dist/types/components/common/styles.d.ts +1 -3
  89. package/dist/types/components/hooks.d.ts +1 -0
  90. package/dist/types/components/picker/CategorySelector.d.ts +1 -1
  91. package/dist/types/components/picker/EmojiPicker.d.ts +12 -3
  92. package/dist/types/components/picker/EmojiPickerCategoryHeading.d.ts +3 -4
  93. package/dist/types/components/picker/EmojiPickerComponent.d.ts +14 -76
  94. package/dist/types/components/picker/EmojiPickerEmojiRow.d.ts +3 -4
  95. package/dist/types/components/picker/EmojiPickerFooter.d.ts +3 -5
  96. package/dist/types/components/picker/styles.d.ts +1 -1
  97. package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +18 -0
  98. package/dist/types/components/uploader/EmojiUploadComponent.d.ts +3 -17
  99. package/dist/types/components/uploader/EmojiUploader.d.ts +5 -7
  100. package/dist/types/hooks/useEmojiContext.d.ts +1 -0
  101. package/dist/types/hooks/usePrevious.d.ts +1 -0
  102. package/dist/types/index.d.ts +3 -1
  103. package/dist/types/types.d.ts +2 -1
  104. package/dist/types/util/constants.d.ts +1 -0
  105. package/docs/0-intro.tsx +35 -27
  106. package/docs/1-resourced-emoji.tsx +74 -0
  107. package/docs/2-emoji-picker.tsx +56 -0
  108. package/docs/3-typeahead.tsx +20 -0
  109. package/docs/4-emoji-provider.tsx +98 -0
  110. package/local-config-example.ts +3 -1
  111. package/package.json +19 -6
  112. package/dist/cjs/components/common/EmojiPreview.js +0 -194
  113. package/dist/es2019/components/common/EmojiPreview.js +0 -152
  114. package/dist/esm/components/common/EmojiPreview.js +0 -170
  115. package/dist/types/components/common/EmojiPreview.d.ts +0 -31
@@ -1,64 +1,36 @@
1
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/createClass";
3
- import _inherits from "@babel/runtime/helpers/inherits";
4
- import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
5
- import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
6
-
7
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
-
9
- 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; } }
10
-
11
1
  /** @jsx jsx */
12
2
  import { jsx } from '@emotion/core';
13
- import { PureComponent } from 'react';
3
+ import { memo } from 'react';
14
4
  import CachingEmoji from '../common/CachingEmoji';
15
5
  import { emojiItem, emojiPickerRow } from './styles';
16
6
 
17
- var EmojiPickerEmojiRow = /*#__PURE__*/function (_PureComponent) {
18
- _inherits(EmojiPickerEmojiRow, _PureComponent);
19
-
20
- var _super = _createSuper(EmojiPickerEmojiRow);
21
-
22
- function EmojiPickerEmojiRow() {
23
- _classCallCheck(this, EmojiPickerEmojiRow);
24
-
25
- return _super.apply(this, arguments);
26
- }
27
-
28
- _createClass(EmojiPickerEmojiRow, [{
29
- key: "render",
30
- value: function render() {
31
- var _this$props = this.props,
32
- emojis = _this$props.emojis,
33
- onSelected = _this$props.onSelected,
34
- onMouseMove = _this$props.onMouseMove,
35
- title = _this$props.title,
36
- showDelete = _this$props.showDelete,
37
- onDelete = _this$props.onDelete;
38
- return jsx("div", {
39
- css: emojiPickerRow
40
- }, emojis.map(function (emoji) {
41
- var shortName = emoji.shortName,
42
- id = emoji.id;
43
- var key = id ? "".concat(id, "-").concat(title) : "".concat(shortName, "-").concat(title);
44
- return jsx("span", {
45
- css: emojiItem,
46
- key: key
47
- }, jsx(CachingEmoji, {
48
- emoji: emoji,
49
- selectOnHover: true,
50
- onSelected: onSelected,
51
- onMouseMove: onMouseMove,
52
- showDelete: showDelete,
53
- onDelete: onDelete,
54
- placeholderSize: 24,
55
- shouldBeInteractive: true
56
- }));
57
- }));
58
- }
59
- }]);
60
-
61
- return EmojiPickerEmojiRow;
62
- }(PureComponent);
63
-
64
- export { EmojiPickerEmojiRow as default };
7
+ var EmojiPickerEmojiRow = function EmojiPickerEmojiRow(_ref) {
8
+ var emojis = _ref.emojis,
9
+ onSelected = _ref.onSelected,
10
+ onMouseMove = _ref.onMouseMove,
11
+ title = _ref.title,
12
+ showDelete = _ref.showDelete,
13
+ onDelete = _ref.onDelete;
14
+ return jsx("div", {
15
+ css: emojiPickerRow
16
+ }, emojis.map(function (emoji) {
17
+ var shortName = emoji.shortName,
18
+ id = emoji.id;
19
+ var key = id ? "".concat(id, "-").concat(title) : "".concat(shortName, "-").concat(title);
20
+ return jsx("span", {
21
+ css: emojiItem,
22
+ key: key
23
+ }, jsx(CachingEmoji, {
24
+ emoji: emoji,
25
+ selectOnHover: true,
26
+ onSelected: onSelected,
27
+ onMouseMove: onMouseMove,
28
+ showDelete: showDelete,
29
+ onDelete: onDelete,
30
+ placeholderSize: 24,
31
+ shouldBeInteractive: true
32
+ }));
33
+ }));
34
+ };
35
+
36
+ export default /*#__PURE__*/memo(EmojiPickerEmojiRow);
@@ -1,51 +1,18 @@
1
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/createClass";
3
- import _inherits from "@babel/runtime/helpers/inherits";
4
- import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
5
- import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
6
-
7
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
-
9
- 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; } }
10
-
11
1
  /** @jsx jsx */
12
2
  import { jsx } from '@emotion/core';
13
- import { PureComponent } from 'react';
3
+ import { memo } from 'react';
14
4
  import { EmojiPreviewComponent } from '../common/EmojiPreviewComponent';
15
5
  import { emojiPickerFooter, emojiPickerFooterWithTopShadow } from './styles';
16
-
17
- var EmojiPickerFooter = /*#__PURE__*/function (_PureComponent) {
18
- _inherits(EmojiPickerFooter, _PureComponent);
19
-
20
- var _super = _createSuper(EmojiPickerFooter);
21
-
22
- function EmojiPickerFooter() {
23
- _classCallCheck(this, EmojiPickerFooter);
24
-
25
- return _super.apply(this, arguments);
26
- }
27
-
28
- _createClass(EmojiPickerFooter, [{
29
- key: "render",
30
- value: function render() {
31
- var _this$props = this.props,
32
- selectedEmoji = _this$props.selectedEmoji,
33
- isUploading = _this$props.isUploading;
34
- var previewFooterClassnames = [emojiPickerFooter, emojiPickerFooterWithTopShadow];
35
-
36
- if (!selectedEmoji || isUploading) {
37
- return null;
38
- }
39
-
40
- return jsx("div", {
41
- css: previewFooterClassnames
42
- }, selectedEmoji && jsx(EmojiPreviewComponent, {
43
- emoji: selectedEmoji
44
- }));
45
- }
46
- }]);
47
-
48
- return EmojiPickerFooter;
49
- }(PureComponent);
50
-
51
- export { EmojiPickerFooter as default };
6
+ var previewFooterClassnames = [emojiPickerFooter, emojiPickerFooterWithTopShadow];
7
+
8
+ var EmojiPickerFooter = function EmojiPickerFooter(_ref) {
9
+ var selectedEmoji = _ref.selectedEmoji;
10
+ return jsx("div", {
11
+ css: previewFooterClassnames,
12
+ "data-testid": "emoji-picker-footer"
13
+ }, selectedEmoji && jsx(EmojiPreviewComponent, {
14
+ emoji: selectedEmoji
15
+ }));
16
+ };
17
+
18
+ export default /*#__PURE__*/memo(EmojiPickerFooter);
@@ -7,22 +7,24 @@ import { token } from '@atlaskit/tokens';
7
7
  import { borderRadius } from '@atlaskit/theme/constants';
8
8
  import { emojiPickerBorderColor, emojiPickerBoxShadow } from '../../util/shared-styles';
9
9
  import { emojiSprite, placeholder, emojiNodeStyles } from '../common/styles';
10
- import { emojiPickerHeight, emojiPickerWidth } from '../../util/constants';
10
+ import { emojiPickerHeight, emojiPickerHeightWithPreview, emojiPickerWidth } from '../../util/constants';
11
11
  import { B200, B300, N100A, N200, N30, N30A, N50, N900 } from '@atlaskit/theme/colors'; // Level 1 - picker
12
12
 
13
- export var emojiPicker = css({
14
- display: 'flex',
15
- flexDirection: 'column',
16
- justifyContent: 'space-between',
17
- background: token('elevation.surface.overlay', 'white'),
18
- border: "".concat(emojiPickerBorderColor, " 1px solid"),
19
- borderRadius: "".concat(borderRadius(), "px"),
20
- boxShadow: emojiPickerBoxShadow,
21
- height: "".concat(emojiPickerHeight, "px"),
22
- width: "".concat(emojiPickerWidth, "px"),
23
- marginBottom: '8px',
24
- minWidth: "".concat(emojiPickerWidth, "px")
25
- }); // Level 2
13
+ export var emojiPicker = function emojiPicker(hasPreview) {
14
+ return css({
15
+ display: 'flex',
16
+ flexDirection: 'column',
17
+ justifyContent: 'space-between',
18
+ background: token('elevation.surface.overlay', 'white'),
19
+ border: "".concat(emojiPickerBorderColor, " 1px solid"),
20
+ borderRadius: "".concat(borderRadius(), "px"),
21
+ boxShadow: emojiPickerBoxShadow,
22
+ height: "".concat(hasPreview ? emojiPickerHeightWithPreview : emojiPickerHeight, "px"),
23
+ width: "".concat(emojiPickerWidth, "px"),
24
+ marginBottom: '8px',
25
+ minWidth: "".concat(emojiPickerWidth, "px")
26
+ });
27
+ }; // Level 2
26
28
  /// Category Selector
27
29
 
28
30
  export var addButton = 'emoji-picker-add-button';
@@ -1,18 +1,10 @@
1
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/createClass";
3
- import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
4
- import _inherits from "@babel/runtime/helpers/inherits";
5
- import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
- import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
-
9
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
10
-
11
- 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; } }
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
12
4
 
13
5
  /** @jsx jsx */
14
6
  import { jsx } from '@emotion/core';
15
- import { PureComponent } from 'react';
7
+ import { useState, memo, useEffect } from 'react';
16
8
  import { FormattedMessage } from 'react-intl-next';
17
9
  import { supportsUploadFeature } from '../../api/EmojiResource';
18
10
  import EmojiUploadPickerWithIntl from '../common/EmojiUploadPicker';
@@ -20,116 +12,130 @@ import { uploadEmoji } from '../common/UploadEmoji';
20
12
  import { createAndFireEventInElementsChannel, selectedFileEvent, uploadCancelButton, uploadConfirmButton } from '../../util/analytics';
21
13
  import { emojiUploadFooter, emojiUploadWidget } from './styles';
22
14
  import { ufoExperiences } from '../../util/analytics/ufoExperiences';
15
+ import { messages } from '../i18n';
23
16
 
24
- var EmojiUploadComponent = /*#__PURE__*/function (_PureComponent) {
25
- _inherits(EmojiUploadComponent, _PureComponent);
26
-
27
- var _super = _createSuper(EmojiUploadComponent);
28
-
29
- function EmojiUploadComponent(props) {
30
- var _this;
31
-
32
- _classCallCheck(this, EmojiUploadComponent);
33
-
34
- _this = _super.call(this, props);
35
-
36
- _defineProperty(_assertThisInitialized(_this), "onUploadEmoji", function (upload, retry) {
37
- var emojiProvider = _this.props.emojiProvider;
38
- ufoExperiences['emoji-uploaded'].start();
39
- ufoExperiences['emoji-uploaded'].addMetadata({
40
- retry: retry
41
- });
42
-
43
- _this.fireAnalytics(uploadConfirmButton({
44
- retry: retry
45
- }));
46
-
47
- var errorSetter = function errorSetter(message) {
48
- _this.setState({
49
- uploadErrorMessage: message
50
- });
51
- };
52
-
53
- uploadEmoji(upload, emojiProvider, errorSetter, _this.prepareForUpload, _this.fireAnalytics, retry);
54
- });
55
-
56
- _defineProperty(_assertThisInitialized(_this), "prepareForUpload", function () {
57
- var emojiProvider = _this.props.emojiProvider;
58
-
59
- if (supportsUploadFeature(emojiProvider)) {
60
- emojiProvider.prepareForUpload();
61
- }
62
-
63
- _this.setState({
64
- uploadErrorMessage: undefined
65
- });
66
-
67
- if (_this.ref) {
68
- _this.ref.clearUploadPicker();
69
- }
70
- });
17
+ var EmojiUploadComponent = function EmojiUploadComponent(props) {
18
+ var emojiProvider = props.emojiProvider,
19
+ createAnalyticsEvent = props.createAnalyticsEvent,
20
+ onUploaderRef = props.onUploaderRef;
71
21
 
72
- _defineProperty(_assertThisInitialized(_this), "onFileChooserClicked", function () {
73
- _this.fireAnalytics(selectedFileEvent());
74
- });
22
+ var _useState = useState(),
23
+ _useState2 = _slicedToArray(_useState, 2),
24
+ uploadErrorMessage = _useState2[0],
25
+ setUploadErrorMessage = _useState2[1];
75
26
 
76
- _defineProperty(_assertThisInitialized(_this), "onUploadCancelled", function () {
77
- _this.fireAnalytics(uploadCancelButton());
78
-
79
- _this.prepareForUpload();
80
- });
81
-
82
- _defineProperty(_assertThisInitialized(_this), "onUploaderRef", function (emojiUploadPicker) {
83
- _this.ref = emojiUploadPicker;
84
- });
85
-
86
- _defineProperty(_assertThisInitialized(_this), "fireAnalytics", function (analyticsEvent) {
87
- var createAnalyticsEvent = _this.props.createAnalyticsEvent;
88
-
89
- if (createAnalyticsEvent) {
90
- createAndFireEventInElementsChannel(analyticsEvent)(createAnalyticsEvent);
91
- }
92
- });
93
-
94
- if (supportsUploadFeature(props.emojiProvider)) {
95
- props.emojiProvider.prepareForUpload();
27
+ useEffect(function () {
28
+ if (supportsUploadFeature(emojiProvider)) {
29
+ emojiProvider.prepareForUpload();
96
30
  }
97
-
98
- _this.state = {};
99
- return _this;
100
- }
101
-
102
- _createClass(EmojiUploadComponent, [{
103
- key: "componentWillUnmount",
104
- value: function componentWillUnmount() {
31
+ }, [emojiProvider]);
32
+ useEffect(function () {
33
+ return function () {
105
34
  ufoExperiences['emoji-uploaded'].abort({
106
35
  metadata: {
107
36
  source: 'EmojiUploadComponent',
108
37
  reason: 'unmount'
109
38
  }
110
39
  });
111
- }
112
- }, {
113
- key: "render",
114
- value: function render() {
115
- var uploadErrorMessage = this.state.uploadErrorMessage;
116
- var errorMessage = uploadErrorMessage ? jsx(FormattedMessage, uploadErrorMessage) : null;
117
- return jsx("div", {
118
- css: emojiUploadWidget,
119
- ref: this.props.onUploaderRef
120
- }, jsx("div", {
121
- css: emojiUploadFooter
122
- }, jsx(EmojiUploadPickerWithIntl, {
123
- ref: this.onUploaderRef,
124
- onFileChooserClicked: this.onFileChooserClicked,
125
- onUploadCancelled: this.onUploadCancelled,
126
- onUploadEmoji: this.onUploadEmoji,
127
- errorMessage: errorMessage
128
- })));
129
- }
130
- }]);
40
+ };
41
+ }, []);
42
+
43
+ var onUploadEmoji = /*#__PURE__*/function () {
44
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(upload, retry, onSuccessHandler) {
45
+ var errorSetter, message;
46
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
47
+ while (1) {
48
+ switch (_context.prev = _context.next) {
49
+ case 0:
50
+ ufoExperiences['emoji-uploaded'].start();
51
+ ufoExperiences['emoji-uploaded'].addMetadata({
52
+ retry: retry
53
+ });
54
+
55
+ if (!supportsUploadFeature(emojiProvider)) {
56
+ _context.next = 16;
57
+ break;
58
+ }
59
+
60
+ fireAnalytics(uploadConfirmButton({
61
+ retry: retry
62
+ }));
63
+ _context.prev = 4;
64
+ _context.next = 7;
65
+ return emojiProvider.prepareForUpload();
66
+
67
+ case 7:
68
+ errorSetter = function errorSetter(message) {
69
+ setUploadErrorMessage(message);
70
+ }; // internally handled error from upload callback
71
+
72
+
73
+ uploadEmoji(upload, emojiProvider, errorSetter, onUploaded(onSuccessHandler), fireAnalytics, retry);
74
+ _context.next = 16;
75
+ break;
76
+
77
+ case 11:
78
+ _context.prev = 11;
79
+ _context.t0 = _context["catch"](4);
80
+ // error from upload token generation
81
+ message = _context.t0 instanceof Error ? _context.t0.message : 'Issue with generating upload token';
82
+ ufoExperiences['emoji-uploaded'].failure({
83
+ metadata: {
84
+ source: 'EmojiUploadComponent',
85
+ error: message
86
+ }
87
+ });
88
+ setUploadErrorMessage(messages.emojiUploadFailed);
89
+
90
+ case 16:
91
+ case "end":
92
+ return _context.stop();
93
+ }
94
+ }
95
+ }, _callee, null, [[4, 11]]);
96
+ }));
97
+
98
+ return function onUploadEmoji(_x, _x2, _x3) {
99
+ return _ref.apply(this, arguments);
100
+ };
101
+ }();
102
+
103
+ var onUploaded = function onUploaded(onSuccessHandler) {
104
+ return function () {
105
+ setUploadErrorMessage(undefined);
131
106
 
132
- return EmojiUploadComponent;
133
- }(PureComponent);
107
+ if (onSuccessHandler) {
108
+ onSuccessHandler();
109
+ }
110
+ };
111
+ };
112
+
113
+ var onFileChooserClicked = function onFileChooserClicked() {
114
+ fireAnalytics(selectedFileEvent());
115
+ };
134
116
 
135
- export { EmojiUploadComponent as default };
117
+ var onUploadCancelled = function onUploadCancelled() {
118
+ fireAnalytics(uploadCancelButton());
119
+ onUploaded();
120
+ };
121
+
122
+ var fireAnalytics = function fireAnalytics(analyticsEvent) {
123
+ if (createAnalyticsEvent) {
124
+ createAndFireEventInElementsChannel(analyticsEvent)(createAnalyticsEvent);
125
+ }
126
+ };
127
+
128
+ return jsx("div", {
129
+ css: emojiUploadWidget,
130
+ ref: onUploaderRef
131
+ }, jsx("div", {
132
+ css: emojiUploadFooter
133
+ }, jsx(EmojiUploadPickerWithIntl, {
134
+ onFileChooserClicked: onFileChooserClicked,
135
+ onUploadCancelled: onUploadCancelled,
136
+ onUploadEmoji: onUploadEmoji,
137
+ errorMessage: uploadErrorMessage ? jsx(FormattedMessage, uploadErrorMessage) : null
138
+ })));
139
+ };
140
+
141
+ export default /*#__PURE__*/memo(EmojiUploadComponent);
@@ -0,0 +1,5 @@
1
+ import { useContext } from 'react';
2
+ import { EmojiContext } from '../context/EmojiContext';
3
+ export var useEmojiContext = function useEmojiContext() {
4
+ return useContext(EmojiContext);
5
+ };
@@ -0,0 +1,8 @@
1
+ import { useEffect, useRef } from 'react';
2
+ export function usePrevious(value) {
3
+ var ref = useRef();
4
+ useEffect(function () {
5
+ ref.current = value;
6
+ }, [value]);
7
+ return ref.current;
8
+ }
package/dist/esm/index.js CHANGED
@@ -17,8 +17,11 @@ import { toEmojiId, toOptionalEmojiId } from './util/type-helpers';
17
17
  import { recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, withSampling } from './util/analytics';
18
18
  import { customCategory, defaultEmojiHeight, emojiPickerWidth, emojiPickerHeight } from './util/constants';
19
19
  import { UsageFrequencyTracker } from './api/internal/UsageFrequencyTracker';
20
+ import { useEmojiContext } from './hooks/useEmojiContext';
21
+ import { EmojiContextProvider } from './context/EmojiContextProvider';
20
22
  export { // Classes
21
- AbstractResource, Emoji, EmojiPlaceholder, EmojiLoader, EmojiPicker, EmojiUploader, EmojiResource, EmojiRepository, EmojiTypeAhead, EmojiImage, ResourcedEmoji, // functions
23
+ AbstractResource, Emoji, EmojiPlaceholder, EmojiLoader, EmojiPicker, EmojiUploader, EmojiResource, EmojiRepository, EmojiTypeAhead, EmojiImage, ResourcedEmoji, EmojiContextProvider, // hooks,
24
+ useEmojiContext, // functions
22
25
  denormaliseEmojiServiceResponse, toEmojiId, toOptionalEmojiId, recordSelectionFailedSli, recordSelectionSucceededSli, ufoExperiences, withSampling, // Constants
23
26
  emojiPickerWidth, emojiPickerHeight, defaultEmojiHeight, customCategory, UsageFrequencyTracker, EmojiTypeAheadItem };
24
27
  export { // Enums
@@ -14,6 +14,7 @@ export var MAX_ORDINAL = 100000;
14
14
  export var defaultEmojiHeight = 20;
15
15
  export var emojiPickerWidth = 350;
16
16
  export var emojiPickerHeight = 295;
17
+ export var emojiPickerHeightWithPreview = 348;
17
18
  export var localStoragePrefix = 'fabric.emoji';
18
19
  export var selectedToneStorageKey = "".concat(localStoragePrefix, ".selectedTone");
19
20
  export var defaultCategories = ['PEOPLE', 'NATURE', 'FOODS', 'ACTIVITY', 'PLACES', 'OBJECTS', 'SYMBOLS', 'FLAGS'];
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "65.0.0",
3
+ "version": "65.2.0",
4
4
  "sideEffects": false
5
5
  }
@@ -36,9 +36,8 @@ export interface EmojiResourceConfig {
36
36
  */
37
37
  singleEmojiApi?: SingleEmojiApiLoaderConfig;
38
38
  /**
39
- * Used for fetching emoji asset and render this asset before provider has been
40
- * downloaded to reduce the time the user is presented with a placeholder
41
- * while downloading the emoji meta data
39
+ * Renders an image while the provider is being downloaded to reduce the time
40
+ * the user is being presented with a placeholder
42
41
  */
43
42
  optimisticImageApi?: OptimisticImageApiLoaderConfig;
44
43
  }
@@ -1,8 +1,6 @@
1
- import React, { ContextType } from 'react';
2
- import { PureComponent } from 'react';
1
+ import { FC } from 'react';
3
2
  import { EmojiDescription } from '../../types';
4
3
  import { Props as EmojiProps } from './Emoji';
5
- import { EmojiContext, EmojiContextType } from '../../context/EmojiContext';
6
4
  export interface State {
7
5
  cachedEmoji?: EmojiDescription;
8
6
  invalidImage?: boolean;
@@ -13,18 +11,10 @@ export interface CachingEmojiProps extends EmojiProps {
13
11
  /**
14
12
  * Renders an emoji from a cached image, if required.
15
13
  */
16
- export declare const CachingEmoji: (props: CachingEmojiProps) => JSX.Element;
14
+ export declare const CachingEmoji: FC<CachingEmojiProps>;
17
15
  /**
18
16
  * Rendering a media emoji image from a cache for media emoji, with different
19
17
  * rendering paths depending on caching strategy.
20
18
  */
21
- export declare class CachingMediaEmoji extends PureComponent<CachingEmojiProps, State> {
22
- static contextType: React.Context<EmojiContextType>;
23
- context: ContextType<typeof EmojiContext>;
24
- constructor(props: EmojiProps, context: ContextType<typeof EmojiContext>);
25
- componentDidUpdate(): void;
26
- private loadEmoji;
27
- private handleLoadError;
28
- render(): JSX.Element;
29
- }
19
+ export declare const CachingMediaEmoji: FC<CachingEmojiProps>;
30
20
  export default CachingEmoji;
@@ -11,7 +11,6 @@ export interface Props {
11
11
  selected?: boolean;
12
12
  /**
13
13
  * Automatically show the emoji as selected based on mouse hover.
14
- *
15
14
  * CSS, fast, does not require a re-render, but selected state not
16
15
  * externally controlled via props.
17
16
  */
@@ -21,7 +20,7 @@ export interface Props {
21
20
  */
22
21
  onSelected?: OnEmojiEvent;
23
22
  /**
24
- * Called when the mouse moved over the emoji.
23
+ * Called when the mouse moves over the emoji.
25
24
  */
26
25
  onMouseMove?: OnEmojiEvent;
27
26
  /**
@@ -1,4 +1,4 @@
1
- import { PureComponent } from 'react';
1
+ import { FC } from 'react';
2
2
  import { WrappedComponentProps } from 'react-intl-next';
3
3
  import { EmojiDescription, EmojiDescriptionWithVariations, Message, OnToneSelected, OnToneSelectorCancelled, ToneSelection } from '../../types';
4
4
  import { OnDeleteEmoji } from '../common/EmojiDeletePreview';
@@ -22,21 +22,10 @@ export interface Props {
22
22
  query?: string;
23
23
  onChange: any;
24
24
  }
25
- interface State {
26
- selectingTone: boolean;
27
- }
28
- export declare class EmojiActions extends PureComponent<Props & WrappedComponentProps, State> {
29
- state: {
30
- selectingTone: boolean;
31
- };
32
- onToneButtonClick: () => void;
33
- onToneSelected: (toneValue: number) => void;
34
- onMouseLeave: () => void;
35
- renderTones(): JSX.Element | null;
36
- renderAddOwnEmoji(): JSX.Element | null;
37
- render(): JSX.Element;
38
- }
39
- declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<Props & WrappedComponentProps<"intl">>> & {
40
- WrappedComponent: import("react").ComponentType<Props & WrappedComponentProps<"intl">>;
25
+ declare type PropsWithWrappedComponentPropsType = Props & WrappedComponentProps;
26
+ declare type EmojiActionsProps = PropsWithWrappedComponentPropsType;
27
+ export declare const EmojiActions: FC<EmojiActionsProps>;
28
+ declare const _default: FC<import("react-intl-next").WithIntlProps<PropsWithWrappedComponentPropsType>> & {
29
+ WrappedComponent: import("react").ComponentType<PropsWithWrappedComponentPropsType>;
41
30
  };
42
31
  export default _default;
@@ -1,4 +1,4 @@
1
- import { PureComponent } from 'react';
1
+ import { FC } from 'react';
2
2
  import { Message } from '../../types';
3
3
  import { SerializedStyles } from '@emotion/core';
4
4
  export interface Props {
@@ -6,8 +6,5 @@ export interface Props {
6
6
  tooltip?: boolean;
7
7
  messageStyles: SerializedStyles;
8
8
  }
9
- export default class EmojiErrorMessage extends PureComponent<Props> {
10
- renderWithTooltip(): JSX.Element;
11
- renderInline(): JSX.Element;
12
- render(): JSX.Element;
13
- }
9
+ declare const EmojiErrorMessage: FC<Props>;
10
+ export default EmojiErrorMessage;
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
2
1
  import { EmojiDescription } from '../../types';
2
+ import { FC } from 'react';
3
3
  declare type Props = {
4
4
  emoji: EmojiDescription;
5
5
  };
6
- export declare const EmojiPreviewComponent: ({ emoji }: Props) => JSX.Element;
6
+ export declare const EmojiPreviewComponent: FC<Props>;
7
7
  export {};