@atlaskit/emoji 70.10.10 → 70.10.12

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 (31) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/api/EmojiResource.js +75 -74
  3. package/dist/cjs/api/media/SiteEmojiResource.js +12 -12
  4. package/dist/cjs/components/common/EmojiRadioButton.js +11 -0
  5. package/dist/cjs/components/common/EmojiUploadPicker.js +11 -10
  6. package/dist/cjs/components/common/ResourcedEmojiComponent.js +2 -2
  7. package/dist/cjs/components/common/ToneSelector.js +29 -5
  8. package/dist/cjs/components/picker/EmojiPickerComponent.js +7 -7
  9. package/dist/cjs/components/uploader/EmojiUploadComponent.js +14 -14
  10. package/dist/cjs/context/EmojiContextProvider.js +12 -11
  11. package/dist/cjs/hooks/useEmoji.js +9 -9
  12. package/dist/cjs/util/analytics/analytics.js +1 -1
  13. package/dist/cjs/util/analytics/samplingUfo.js +18 -18
  14. package/dist/es2019/components/common/EmojiRadioButton.js +9 -0
  15. package/dist/es2019/components/common/ToneSelector.js +26 -4
  16. package/dist/es2019/util/analytics/analytics.js +1 -1
  17. package/dist/esm/api/EmojiResource.js +75 -74
  18. package/dist/esm/api/media/SiteEmojiResource.js +12 -12
  19. package/dist/esm/components/common/EmojiRadioButton.js +11 -0
  20. package/dist/esm/components/common/EmojiUploadPicker.js +10 -9
  21. package/dist/esm/components/common/ResourcedEmojiComponent.js +2 -2
  22. package/dist/esm/components/common/ToneSelector.js +28 -4
  23. package/dist/esm/components/picker/EmojiPickerComponent.js +7 -7
  24. package/dist/esm/components/uploader/EmojiUploadComponent.js +13 -13
  25. package/dist/esm/context/EmojiContextProvider.js +11 -10
  26. package/dist/esm/hooks/useEmoji.js +9 -9
  27. package/dist/esm/util/analytics/analytics.js +1 -1
  28. package/dist/esm/util/analytics/samplingUfo.js +18 -18
  29. package/dist/types/components/common/EmojiRadioButton.d.ts +1 -0
  30. package/dist/types-ts4.5/components/common/EmojiRadioButton.d.ts +1 -0
  31. package/package.json +2 -3
@@ -21,7 +21,7 @@ var _UploadEmoji = require("../common/UploadEmoji");
21
21
  var _analytics = require("../../util/analytics");
22
22
  var _ufoExperiences = require("../../util/analytics/ufoExperiences");
23
23
  var _i18n = require("../i18n");
24
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
24
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
25
25
  var emojiPickerWidth = 350;
26
26
  var emojiUploadWidget = null;
27
27
  var emojiUploadFooter = null;
@@ -51,8 +51,8 @@ var EmojiUploadComponent = function EmojiUploadComponent(props) {
51
51
  }, []);
52
52
  var onUploadEmoji = /*#__PURE__*/function () {
53
53
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(upload, retry, onSuccessHandler) {
54
- var errorSetter, message;
55
- return _regenerator.default.wrap(function _callee$(_context) {
54
+ var errorSetter, message, _t;
55
+ return _regenerator.default.wrap(function (_context) {
56
56
  while (1) switch (_context.prev = _context.next) {
57
57
  case 0:
58
58
  _ufoExperiences.ufoExperiences['emoji-uploaded'].start();
@@ -60,27 +60,27 @@ var EmojiUploadComponent = function EmojiUploadComponent(props) {
60
60
  retry: retry
61
61
  });
62
62
  if (!(0, _EmojiResource.supportsUploadFeature)(emojiProvider)) {
63
- _context.next = 16;
63
+ _context.next = 4;
64
64
  break;
65
65
  }
66
66
  fireAnalytics((0, _analytics.uploadConfirmButton)({
67
67
  retry: retry
68
68
  }));
69
- _context.prev = 4;
70
- _context.next = 7;
69
+ _context.prev = 1;
70
+ _context.next = 2;
71
71
  return emojiProvider.prepareForUpload();
72
- case 7:
72
+ case 2:
73
73
  errorSetter = function errorSetter(message) {
74
74
  setUploadErrorMessage(message);
75
75
  }; // internally handled error from upload callback
76
76
  (0, _UploadEmoji.uploadEmoji)(upload, emojiProvider, errorSetter, onUploaded(onSuccessHandler), fireAnalytics, retry);
77
- _context.next = 16;
77
+ _context.next = 4;
78
78
  break;
79
- case 11:
80
- _context.prev = 11;
81
- _context.t0 = _context["catch"](4);
79
+ case 3:
80
+ _context.prev = 3;
81
+ _t = _context["catch"](1);
82
82
  // error from upload token generation
83
- message = _context.t0 instanceof Error ? _context.t0.message : 'Issue with generating upload token';
83
+ message = _t instanceof Error ? _t.message : 'Issue with generating upload token';
84
84
  _ufoExperiences.ufoExperiences['emoji-uploaded'].failure({
85
85
  metadata: {
86
86
  source: 'EmojiUploadComponent',
@@ -88,11 +88,11 @@ var EmojiUploadComponent = function EmojiUploadComponent(props) {
88
88
  }
89
89
  });
90
90
  setUploadErrorMessage(_i18n.messages.emojiUploadFailed);
91
- case 16:
91
+ case 4:
92
92
  case "end":
93
93
  return _context.stop();
94
94
  }
95
- }, _callee, null, [[4, 11]]);
95
+ }, _callee, null, [[1, 3]]);
96
96
  }));
97
97
  return function onUploadEmoji(_x, _x2, _x3) {
98
98
  return _ref.apply(this, arguments);
@@ -11,7 +11,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _EmojiContext = require("./EmojiContext");
13
13
  var _logger = _interopRequireDefault(require("../util/logger"));
14
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
15
15
  var EmojiContextProvider = exports.EmojiContextProvider = function EmojiContextProvider(_ref) {
16
16
  var children = _ref.children,
17
17
  emojiContextValue = _ref.emojiContextValue;
@@ -25,24 +25,25 @@ var EmojiContextProvider = exports.EmojiContextProvider = function EmojiContextP
25
25
  }
26
26
  function _fetchEmojiProvider() {
27
27
  _fetchEmojiProvider = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
28
- return _regenerator.default.wrap(function _callee$(_context) {
28
+ var _t;
29
+ return _regenerator.default.wrap(function (_context) {
29
30
  while (1) switch (_context.prev = _context.next) {
30
31
  case 0:
31
32
  _context.prev = 0;
32
- _context.next = 3;
33
+ _context.next = 1;
33
34
  return memoizedEmojiContextValue === null || memoizedEmojiContextValue === void 0 ? void 0 : memoizedEmojiContextValue.emoji.emojiProvider.fetchEmojiProvider();
34
- case 3:
35
- _context.next = 8;
35
+ case 1:
36
+ _context.next = 3;
36
37
  break;
37
- case 5:
38
- _context.prev = 5;
39
- _context.t0 = _context["catch"](0);
40
- (0, _logger.default)('fetchEmojiProvider error catched from outside', _context.t0);
41
- case 8:
38
+ case 2:
39
+ _context.prev = 2;
40
+ _t = _context["catch"](0);
41
+ (0, _logger.default)('fetchEmojiProvider error catched from outside', _t);
42
+ case 3:
42
43
  case "end":
43
44
  return _context.stop();
44
45
  }
45
- }, _callee, null, [[0, 5]]);
46
+ }, _callee, null, [[0, 2]]);
46
47
  }));
47
48
  return _fetchEmojiProvider.apply(this, arguments);
48
49
  }
@@ -30,26 +30,26 @@ var useEmoji = exports.useEmoji = function useEmoji() {
30
30
  if (supportsUploadFeature(emojiProvider)) {
31
31
  var checkIfUploadIsSupported = /*#__PURE__*/function () {
32
32
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
33
- var supported;
34
- return _regenerator.default.wrap(function _callee$(_context) {
33
+ var supported, _t;
34
+ return _regenerator.default.wrap(function (_context) {
35
35
  while (1) switch (_context.prev = _context.next) {
36
36
  case 0:
37
37
  _context.prev = 0;
38
- _context.next = 3;
38
+ _context.next = 1;
39
39
  return emojiProvider.isUploadSupported();
40
- case 3:
40
+ case 1:
41
41
  supported = _context.sent;
42
42
  setIsUploadSupported(supported);
43
43
  return _context.abrupt("return", true);
44
- case 8:
45
- _context.prev = 8;
46
- _context.t0 = _context["catch"](0);
44
+ case 2:
45
+ _context.prev = 2;
46
+ _t = _context["catch"](0);
47
47
  return _context.abrupt("return", false);
48
- case 11:
48
+ case 3:
49
49
  case "end":
50
50
  return _context.stop();
51
51
  }
52
- }, _callee, null, [[0, 8]]);
52
+ }, _callee, null, [[0, 2]]);
53
53
  }));
54
54
  return function checkIfUploadIsSupported() {
55
55
  return _ref.apply(this, arguments);
@@ -20,7 +20,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
20
20
  actionSubjectId: actionSubjectId,
21
21
  attributes: _objectSpread({
22
22
  packageName: "@atlaskit/emoji",
23
- packageVersion: "70.10.9"
23
+ packageVersion: "70.10.11"
24
24
  }, attributes)
25
25
  };
26
26
  };
@@ -76,18 +76,18 @@ var withSampling = exports.withSampling = function withSampling(ufoExperience) {
76
76
  var start = /*#__PURE__*/function () {
77
77
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
78
78
  var isSampled;
79
- return _regenerator.default.wrap(function _callee$(_context) {
79
+ return _regenerator.default.wrap(function (_context) {
80
80
  while (1) switch (_context.prev = _context.next) {
81
81
  case 0:
82
82
  if (!hasSampledFromStart(ufoExperience)) {
83
- _context.next = 2;
83
+ _context.next = 1;
84
84
  break;
85
85
  }
86
86
  return _context.abrupt("return");
87
- case 2:
87
+ case 1:
88
88
  isSampled = options.samplingFunc || isExperienceSampled;
89
89
  if (isSampled(options.samplingRate)) {
90
- _context.next = 7;
90
+ _context.next = 2;
91
91
  break;
92
92
  }
93
93
  if (ufoExperience.instanceId) {
@@ -95,14 +95,14 @@ var withSampling = exports.withSampling = function withSampling(ufoExperience) {
95
95
  }
96
96
  ufoExperiencesSampled[ufoExperience.id].sampled = false;
97
97
  return _context.abrupt("return");
98
- case 7:
98
+ case 2:
99
99
  // update sampled records
100
100
  if (ufoExperience.instanceId) {
101
101
  ufoExperiencesSampled[ufoExperience.id].sampledInstance[ufoExperience.instanceId] = true;
102
102
  ufoExperiencesSampled[ufoExperience.id].sampled = true;
103
103
  }
104
104
  return _context.abrupt("return", ufoExperience.start(options.startTime));
105
- case 9:
105
+ case 3:
106
106
  case "end":
107
107
  return _context.stop();
108
108
  }
@@ -114,17 +114,17 @@ var withSampling = exports.withSampling = function withSampling(ufoExperience) {
114
114
  }();
115
115
  var success = /*#__PURE__*/function () {
116
116
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(config) {
117
- return _regenerator.default.wrap(function _callee2$(_context2) {
117
+ return _regenerator.default.wrap(function (_context2) {
118
118
  while (1) switch (_context2.prev = _context2.next) {
119
119
  case 0:
120
120
  if (hasSampledFromStart(ufoExperience)) {
121
- _context2.next = 2;
121
+ _context2.next = 1;
122
122
  break;
123
123
  }
124
124
  return _context2.abrupt("return", null);
125
- case 2:
125
+ case 1:
126
126
  return _context2.abrupt("return", ufoExperience.success(config));
127
- case 3:
127
+ case 2:
128
128
  case "end":
129
129
  return _context2.stop();
130
130
  }
@@ -136,17 +136,17 @@ var withSampling = exports.withSampling = function withSampling(ufoExperience) {
136
136
  }();
137
137
  var failure = /*#__PURE__*/function () {
138
138
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(config) {
139
- return _regenerator.default.wrap(function _callee3$(_context3) {
139
+ return _regenerator.default.wrap(function (_context3) {
140
140
  while (1) switch (_context3.prev = _context3.next) {
141
141
  case 0:
142
142
  if (hasSampledFromStart(ufoExperience)) {
143
- _context3.next = 2;
143
+ _context3.next = 1;
144
144
  break;
145
145
  }
146
146
  return _context3.abrupt("return", null);
147
- case 2:
147
+ case 1:
148
148
  return _context3.abrupt("return", ufoExperience.failure(config));
149
- case 3:
149
+ case 2:
150
150
  case "end":
151
151
  return _context3.stop();
152
152
  }
@@ -158,17 +158,17 @@ var withSampling = exports.withSampling = function withSampling(ufoExperience) {
158
158
  }();
159
159
  var abort = /*#__PURE__*/function () {
160
160
  var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(config) {
161
- return _regenerator.default.wrap(function _callee4$(_context4) {
161
+ return _regenerator.default.wrap(function (_context4) {
162
162
  while (1) switch (_context4.prev = _context4.next) {
163
163
  case 0:
164
164
  if (hasSampledFromStart(ufoExperience)) {
165
- _context4.next = 2;
165
+ _context4.next = 1;
166
166
  break;
167
167
  }
168
168
  return _context4.abrupt("return", null);
169
- case 2:
169
+ case 1:
170
170
  return _context4.abrupt("return", ufoExperience.abort(config));
171
- case 3:
171
+ case 2:
172
172
  case "end":
173
173
  return _context4.stop();
174
174
  }
@@ -2,6 +2,7 @@
2
2
  import "./EmojiRadioButton.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { memo, forwardRef } from 'react';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
5
6
  import Emoji from './Emoji';
6
7
  import { TONESELECTOR_KEYBOARD_KEYS_SUPPORTED } from '../../util/constants';
7
8
  import VisuallyHidden from '@atlaskit/visually-hidden';
@@ -10,6 +11,13 @@ const emojiRadio = {
10
11
  default: "_tzy4idpf _kqswstnw _154i14id _1ltv14id _3y8mfajl _157z1r31 _1dzmglyw _1sqm1o36 _fh6w1y54 _1i1213zc"
11
12
  };
12
13
  const handleKeyDown = (props, event) => {
14
+ if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && fg('platform_emoji_picker_refresh')) {
15
+ var _props$onArrowKey;
16
+ event.preventDefault();
17
+ event.stopPropagation();
18
+ (_props$onArrowKey = props.onArrowKey) === null || _props$onArrowKey === void 0 ? void 0 : _props$onArrowKey.call(props, event.key === 'ArrowRight' ? 1 : -1);
19
+ return;
20
+ }
13
21
  if (TONESELECTOR_KEYBOARD_KEYS_SUPPORTED.includes(event.key)) {
14
22
  const {
15
23
  onSelected
@@ -41,6 +49,7 @@ export const EmojiRadioButton = /*#__PURE__*/forwardRef((props, ref) => {
41
49
  return (_props$onSelected = props.onSelected) === null || _props$onSelected === void 0 ? void 0 : _props$onSelected.call(props);
42
50
  },
43
51
  onKeyDown: event => handleKeyDown(props, event),
52
+ onChange: fg('platform_emoji_picker_refresh') ? e => e.preventDefault() : undefined,
44
53
  className: ax([emojiRadio.default])
45
54
  }), /*#__PURE__*/React.createElement(Emoji, {
46
55
  emoji: emoji,
@@ -1,8 +1,8 @@
1
1
  /* ToneSelector.tsx generated by @compiled/babel-plugin v0.39.1 */
2
2
  import "./ToneSelector.compiled.css";
3
- import * as React from 'react';
4
3
  import { ax, ix } from "@compiled/react/runtime";
5
- import { memo, useEffect, useMemo, useRef } from 'react';
4
+ import React, { memo, useCallback, useEffect, useMemo, useRef } from 'react';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
6
6
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
7
7
  import { createAndFireEventInElementsChannel, toneSelectedEvent, toneSelectorOpenedEvent } from '../../util/analytics';
8
8
  import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
@@ -28,6 +28,8 @@ export const ToneSelectorInternal = props => {
28
28
  } = props;
29
29
  const isMounted = useRef(false);
30
30
  const selectedToneRadioRef = useRef(null);
31
+ // Refs for all radio inputs — used for FG-gated arrow-key focus management
32
+ const radioRefs = useRef([]);
31
33
  const {
32
34
  formatMessage
33
35
  } = useIntl();
@@ -62,6 +64,12 @@ export const ToneSelectorInternal = props => {
62
64
  createAndFireEventInElementsChannel(event)(createAnalyticsEvent);
63
65
  }
64
66
  };
67
+ const onArrowKey = useCallback((currentIndex, direction) => {
68
+ var _radioRefs$current$ne;
69
+ const len = radioRefs.current.length;
70
+ const nextIndex = (currentIndex + direction + len) % len;
71
+ (_radioRefs$current$ne = radioRefs.current[nextIndex]) === null || _radioRefs$current$ne === void 0 ? void 0 : _radioRefs$current$ne.focus();
72
+ }, []);
65
73
  const onToneSelectedHandler = toneValue => () => {
66
74
  if (selectedTone === toneValue && onToneClose) {
67
75
  onToneClose();
@@ -83,8 +91,22 @@ export const ToneSelectorInternal = props => {
83
91
  id: "emoji-picker-tone-selector",
84
92
  "aria-label": formatMessage(messages.emojiSelectSkinToneListAriaLabelText),
85
93
  className: ax([!isVisible && "_tzy4idpf _3um015vq _1e0cglyw"])
86
- }, emojiToneCollection.map(tone => {
87
- return /*#__PURE__*/React.createElement(EmojiRadioButton, {
94
+ }, emojiToneCollection.map((tone, renderIndex) => {
95
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement(EmojiRadioButton, {
96
+ ref: el => {
97
+ radioRefs.current[renderIndex] = el;
98
+ if (tone.isSelected && selectedToneRadioRef) {
99
+ selectedToneRadioRef.current = el;
100
+ }
101
+ },
102
+ defaultChecked: tone.isSelected,
103
+ ariaLabelText: tone.label,
104
+ key: `${tone.id}`,
105
+ emoji: tone,
106
+ onArrowKey: direction => onArrowKey(renderIndex, direction),
107
+ onSelected: onToneSelectedHandler(tone.toneIndex),
108
+ selectOnHover: true
109
+ }) : /*#__PURE__*/React.createElement(EmojiRadioButton, {
88
110
  ref: tone.isSelected ? selectedToneRadioRef : null,
89
111
  defaultChecked: tone.isSelected,
90
112
  ariaLabelText: tone.label,
@@ -9,7 +9,7 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
9
9
  actionSubjectId,
10
10
  attributes: {
11
11
  packageName: "@atlaskit/emoji",
12
- packageVersion: "70.10.9",
12
+ packageVersion: "70.10.11",
13
13
  ...attributes
14
14
  }
15
15
  });