@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 70.10.12
4
+
5
+ ### Patch Changes
6
+
7
+ - [`93fae868945b0`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/93fae868945b0) -
8
+ Fix accessibility - inaccessible skin tones from keyboard navigation
9
+ - Updated dependencies
10
+
11
+ ## 70.10.11
12
+
13
+ ### Patch Changes
14
+
15
+ - [`2a75c1be2244e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/2a75c1be2244e) -
16
+ Removed usage of @atlaskit/elements-test-helpers from tests
17
+ - Updated dependencies
18
+
3
19
  ## 70.10.10
4
20
 
5
21
  ### Patch Changes
@@ -45,7 +45,7 @@ var supportsUploadFeature = exports.supportsUploadFeature = function supportsUpl
45
45
  var emojiUploadProvider = emojiProvider;
46
46
  return !!emojiUploadProvider.isUploadSupported && !!emojiUploadProvider.uploadCustomEmoji && !!emojiUploadProvider.prepareForUpload;
47
47
  };
48
- var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
48
+ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_AbstractResource) {
49
49
  function EmojiResource(config) {
50
50
  var _this;
51
51
  (0, _classCallCheck2.default)(this, EmojiResource);
@@ -109,41 +109,42 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
109
109
  * Get the emoji provider from Emoji Resource
110
110
  * @returns Promise<EmojiProvider>
111
111
  */
112
- (0, _inherits2.default)(EmojiResource, _ref);
112
+ (0, _inherits2.default)(EmojiResource, _AbstractResource);
113
113
  return (0, _createClass2.default)(EmojiResource, [{
114
114
  key: "getEmojiProvider",
115
115
  value: (function () {
116
116
  var _getEmojiProvider = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
117
117
  var options,
118
- _args = arguments;
119
- return _regenerator.default.wrap(function _callee$(_context) {
118
+ _args = arguments,
119
+ _t;
120
+ return _regenerator.default.wrap(function (_context) {
120
121
  while (1) switch (_context.prev = _context.next) {
121
122
  case 0:
122
123
  options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {
123
124
  fetchAtStart: !this.fetchOnDemand
124
125
  };
125
126
  if (!options.fetchAtStart) {
126
- _context.next = 11;
127
+ _context.next = 4;
127
128
  break;
128
129
  }
129
- _context.prev = 2;
130
- _context.next = 5;
130
+ _context.prev = 1;
131
+ _context.next = 2;
131
132
  return this.fetchEmojiProvider();
132
- case 5:
133
- _context.next = 11;
133
+ case 2:
134
+ _context.next = 4;
134
135
  break;
135
- case 7:
136
- _context.prev = 7;
137
- _context.t0 = _context["catch"](2);
138
- (0, _logger.default)(_context.t0);
136
+ case 3:
137
+ _context.prev = 3;
138
+ _t = _context["catch"](1);
139
+ (0, _logger.default)(_t);
139
140
  return _context.abrupt("return", Promise.resolve(this));
140
- case 11:
141
+ case 4:
141
142
  return _context.abrupt("return", Promise.resolve(this));
142
- case 12:
143
+ case 5:
143
144
  case "end":
144
145
  return _context.stop();
145
146
  }
146
- }, _callee, this, [[2, 7]]);
147
+ }, _callee, this, [[1, 3]]);
147
148
  }));
148
149
  function getEmojiProvider() {
149
150
  return _getEmojiProvider.apply(this, arguments);
@@ -154,8 +155,8 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
154
155
  key: "fetchIndividualProvider",
155
156
  value: function () {
156
157
  var _fetchIndividualProvider = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(provider, index) {
157
- var providerType, loader, emojiResponse;
158
- return _regenerator.default.wrap(function _callee2$(_context2) {
158
+ var providerType, loader, emojiResponse, _t2;
159
+ return _regenerator.default.wrap(function (_context2) {
159
160
  while (1) switch (_context2.prev = _context2.next) {
160
161
  case 0:
161
162
  providerType = this.getProviderType(provider);
@@ -167,41 +168,41 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
167
168
  type: providerType
168
169
  });
169
170
  loader = new _EmojiLoader.default(provider); // fetch emoji from provider url and denormalise
170
- _context2.next = 7;
171
+ _context2.next = 2;
171
172
  return loader.loadEmoji();
172
- case 7:
173
+ case 2:
173
174
  emojiResponse = _context2.sent;
174
175
  (0, _ufoExperiences.sampledUfoEmojiResourceFetched)(providerType).success();
175
176
  // setup emoji repository
176
177
  this.emojiResponses[index] = emojiResponse;
177
178
  this.initEmojiRepository(this.emojiResponses);
178
- _context2.next = 13;
179
+ _context2.next = 3;
179
180
  return this.initSiteEmojiResource(emojiResponse, provider);
180
- case 13:
181
+ case 3:
181
182
  this.activeLoaders--;
182
183
  this.performRetries();
183
184
  this.refreshLastFilter();
184
- _context2.next = 25;
185
+ _context2.next = 5;
185
186
  break;
186
- case 18:
187
- _context2.prev = 18;
188
- _context2.t0 = _context2["catch"](1);
187
+ case 4:
188
+ _context2.prev = 4;
189
+ _t2 = _context2["catch"](1);
189
190
  this.activeLoaders--;
190
- this.notifyError(_context2.t0);
191
+ this.notifyError(_t2);
191
192
  (0, _ufoExperiences.sampledUfoEmojiResourceFetched)(providerType).failure({
192
193
  metadata: {
193
- reason: _context2.t0,
194
+ reason: _t2,
194
195
  source: 'EmojiProvider',
195
196
  providerUrl: provider.url
196
197
  }
197
198
  });
198
- (0, _logger.default)("failed to fetch emoji provider for ".concat(provider.url), _context2.t0);
199
+ (0, _logger.default)("failed to fetch emoji provider for ".concat(provider.url), _t2);
199
200
  throw new Error("failed to fetch emoji from ".concat(provider.url));
200
- case 25:
201
+ case 5:
201
202
  case "end":
202
203
  return _context2.stop();
203
204
  }
204
- }, _callee2, this, [[1, 18]]);
205
+ }, _callee2, this, [[1, 4]]);
205
206
  }));
206
207
  function fetchIndividualProvider(_x, _x2) {
207
208
  return _fetchIndividualProvider.apply(this, arguments);
@@ -215,24 +216,24 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
215
216
  var _this2 = this;
216
217
  var force,
217
218
  _args3 = arguments;
218
- return _regenerator.default.wrap(function _callee3$(_context3) {
219
+ return _regenerator.default.wrap(function (_context3) {
219
220
  while (1) switch (_context3.prev = _context3.next) {
220
221
  case 0:
221
222
  force = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : false;
222
223
  if (!(force || !this.isRepositoryAvailable(this.emojiRepository) && !this.isInitialised)) {
223
- _context3.next = 6;
224
+ _context3.next = 1;
224
225
  break;
225
226
  }
226
227
  this.isInitialised = true;
227
228
  this.emojiResponses = [];
228
229
  // fetch emoji providers
229
- _context3.next = 6;
230
+ _context3.next = 1;
230
231
  return Promise.all(this.emojiProviderConfig.providers.map(function (provider, index) {
231
232
  return _this2.fetchIndividualProvider(provider, index);
232
233
  }));
233
- case 6:
234
+ case 1:
234
235
  return _context3.abrupt("return", Promise.resolve(this.emojiRepository));
235
- case 7:
236
+ case 2:
236
237
  case "end":
237
238
  return _context3.stop();
238
239
  }
@@ -252,29 +253,29 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
252
253
  key: "fetchByEmojiId",
253
254
  value: function () {
254
255
  var _fetchByEmojiId = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(emojiId, optimistic) {
255
- var _emoji, provider, loader, loadEmoji, _emoji2, emoji;
256
- return _regenerator.default.wrap(function _callee4$(_context4) {
256
+ var _emoji, provider, loader, loadEmoji, _emoji2, emoji, _t3;
257
+ return _regenerator.default.wrap(function (_context4) {
257
258
  while (1) switch (_context4.prev = _context4.next) {
258
259
  case 0:
259
260
  if (!(this.isLoaded() && this.isRepositoryAvailable(this.emojiRepository))) {
260
- _context4.next = 8;
261
+ _context4.next = 3;
261
262
  break;
262
263
  }
263
- _context4.next = 3;
264
+ _context4.next = 1;
264
265
  return this.findByEmojiId(emojiId);
265
- case 3:
266
+ case 1:
266
267
  _emoji = _context4.sent;
267
268
  if (!_emoji) {
268
- _context4.next = 8;
269
+ _context4.next = 3;
269
270
  break;
270
271
  }
271
- _context4.next = 7;
272
+ _context4.next = 2;
272
273
  return this.getMediaEmojiDescriptionURLWithInlineToken(_emoji);
273
- case 7:
274
+ case 2:
274
275
  return _context4.abrupt("return", _context4.sent);
275
- case 8:
276
+ case 3:
276
277
  if (!(this.emojiProviderConfig.singleEmojiApi && optimistic)) {
277
- _context4.next = 31;
278
+ _context4.next = 11;
278
279
  break;
279
280
  }
280
281
  // if config has singleEmojiApi then fetch single emoji
@@ -283,56 +284,56 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
283
284
  securityProvider: this.emojiProviderConfig.singleEmojiApi.securityProvider
284
285
  };
285
286
  loader = new _EmojiLoader.default(provider);
286
- _context4.prev = 11;
287
- _context4.next = 14;
287
+ _context4.prev = 4;
288
+ _context4.next = 5;
288
289
  return loader.loadEmoji();
289
- case 14:
290
+ case 5:
290
291
  loadEmoji = _context4.sent;
291
292
  if (loadEmoji.emojis[0]) {
292
- _context4.next = 17;
293
+ _context4.next = 6;
293
294
  break;
294
295
  }
295
296
  return _context4.abrupt("return");
296
- case 17:
297
+ case 6:
297
298
  if (this.isRepositoryAvailable(this.siteEmojiResource)) {
298
- _context4.next = 20;
299
+ _context4.next = 7;
299
300
  break;
300
301
  }
301
- _context4.next = 20;
302
+ _context4.next = 7;
302
303
  return this.initSiteEmojiResource(loadEmoji, provider);
303
- case 20:
304
+ case 7:
304
305
  return _context4.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(loadEmoji.emojis[0]));
305
- case 23:
306
- _context4.prev = 23;
307
- _context4.t0 = _context4["catch"](11);
308
- _context4.next = 27;
306
+ case 8:
307
+ _context4.prev = 8;
308
+ _t3 = _context4["catch"](4);
309
+ _context4.next = 9;
309
310
  return this.findByEmojiId(emojiId);
310
- case 27:
311
+ case 9:
311
312
  _emoji2 = _context4.sent;
312
313
  if (_emoji2) {
313
- _context4.next = 30;
314
+ _context4.next = 10;
314
315
  break;
315
316
  }
316
317
  return _context4.abrupt("return");
317
- case 30:
318
+ case 10:
318
319
  return _context4.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(_emoji2));
319
- case 31:
320
- _context4.next = 33;
320
+ case 11:
321
+ _context4.next = 12;
321
322
  return this.findByEmojiId(emojiId);
322
- case 33:
323
+ case 12:
323
324
  emoji = _context4.sent;
324
325
  if (emoji) {
325
- _context4.next = 36;
326
+ _context4.next = 13;
326
327
  break;
327
328
  }
328
329
  return _context4.abrupt("return");
329
- case 36:
330
+ case 13:
330
331
  return _context4.abrupt("return", this.getMediaEmojiDescriptionURLWithInlineToken(emoji));
331
- case 37:
332
+ case 14:
332
333
  case "end":
333
334
  return _context4.stop();
334
335
  }
335
- }, _callee4, this, [[11, 23]]);
336
+ }, _callee4, this, [[4, 8]]);
336
337
  }));
337
338
  function fetchByEmojiId(_x3, _x4) {
338
339
  return _fetchByEmojiId.apply(this, arguments);
@@ -457,16 +458,16 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
457
458
  value: (function () {
458
459
  var _getMediaEmojiDescriptionURLWithInlineToken = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(emoji) {
459
460
  var _yield$this$siteEmoji, representation, altRepresentation;
460
- return _regenerator.default.wrap(function _callee5$(_context5) {
461
+ return _regenerator.default.wrap(function (_context5) {
461
462
  while (1) switch (_context5.prev = _context5.next) {
462
463
  case 0:
463
464
  if (!this.isRepositoryAvailable(this.siteEmojiResource)) {
464
- _context5.next = 7;
465
+ _context5.next = 2;
465
466
  break;
466
467
  }
467
- _context5.next = 3;
468
+ _context5.next = 1;
468
469
  return this.siteEmojiResource.generateTokenisedMediaURLS(emoji.representation, emoji.altRepresentation);
469
- case 3:
470
+ case 1:
470
471
  _yield$this$siteEmoji = _context5.sent;
471
472
  representation = _yield$this$siteEmoji.representation;
472
473
  altRepresentation = _yield$this$siteEmoji.altRepresentation;
@@ -474,9 +475,9 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
474
475
  representation: representation,
475
476
  altRepresentation: altRepresentation
476
477
  }));
477
- case 7:
478
+ case 2:
478
479
  return _context5.abrupt("return", emoji);
479
- case 8:
480
+ case 3:
480
481
  case "end":
481
482
  return _context5.stop();
482
483
  }
@@ -80,23 +80,23 @@ var SiteEmojiResource = exports.default = /*#__PURE__*/function () {
80
80
  key: "generateTokenisedMediaURLS",
81
81
  value: (function () {
82
82
  var _generateTokenisedMediaURLS = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(representation, altRepresentation) {
83
- var readToken;
84
- return _regenerator.default.wrap(function _callee$(_context) {
83
+ var readToken, _t;
84
+ return _regenerator.default.wrap(function (_context) {
85
85
  while (1) switch (_context.prev = _context.next) {
86
86
  case 0:
87
87
  if ((0, _typeHelpers.isMediaRepresentation)(representation)) {
88
- _context.next = 2;
88
+ _context.next = 1;
89
89
  break;
90
90
  }
91
91
  return _context.abrupt("return", {
92
92
  representation: representation,
93
93
  altRepresentation: altRepresentation
94
94
  });
95
- case 2:
96
- _context.prev = 2;
97
- _context.next = 5;
95
+ case 1:
96
+ _context.prev = 1;
97
+ _context.next = 2;
98
98
  return this.tokenManager.getToken('read');
99
- case 5:
99
+ case 2:
100
100
  readToken = _context.sent;
101
101
  return _context.abrupt("return", Object.entries({
102
102
  representation: representation,
@@ -123,18 +123,18 @@ var SiteEmojiResource = exports.default = /*#__PURE__*/function () {
123
123
  representation: representation,
124
124
  altRepresentation: altRepresentation
125
125
  }));
126
- case 9:
127
- _context.prev = 9;
128
- _context.t0 = _context["catch"](2);
126
+ case 3:
127
+ _context.prev = 3;
128
+ _t = _context["catch"](1);
129
129
  return _context.abrupt("return", {
130
130
  representation: representation,
131
131
  altRepresentation: altRepresentation
132
132
  });
133
- case 12:
133
+ case 4:
134
134
  case "end":
135
135
  return _context.stop();
136
136
  }
137
- }, _callee, this, [[2, 9]]);
137
+ }, _callee, this, [[1, 3]]);
138
138
  }));
139
139
  function generateTokenisedMediaURLS(_x, _x2) {
140
140
  return _generateTokenisedMediaURLS.apply(this, arguments);
@@ -10,6 +10,7 @@ exports.default = exports.EmojiRadioButton = void 0;
10
10
  require("./EmojiRadioButton.compiled.css");
11
11
  var _runtime = require("@compiled/react/runtime");
12
12
  var _react = _interopRequireWildcard(require("react"));
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
14
  var _Emoji = _interopRequireDefault(require("./Emoji"));
14
15
  var _constants = require("../../util/constants");
15
16
  var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
@@ -19,6 +20,13 @@ var emojiRadio = {
19
20
  default: "_tzy4idpf _kqswstnw _154i14id _1ltv14id _3y8mfajl _157z1r31 _1dzmglyw _1sqm1o36 _fh6w1y54 _1i1213zc"
20
21
  };
21
22
  var handleKeyDown = function handleKeyDown(props, event) {
23
+ if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh')) {
24
+ var _props$onArrowKey;
25
+ event.preventDefault();
26
+ event.stopPropagation();
27
+ (_props$onArrowKey = props.onArrowKey) === null || _props$onArrowKey === void 0 || _props$onArrowKey.call(props, event.key === 'ArrowRight' ? 1 : -1);
28
+ return;
29
+ }
22
30
  if (_constants.TONESELECTOR_KEYBOARD_KEYS_SUPPORTED.includes(event.key)) {
23
31
  var onSelected = props.onSelected;
24
32
  event.preventDefault();
@@ -48,6 +56,9 @@ var EmojiRadioButton = exports.EmojiRadioButton = /*#__PURE__*/(0, _react.forwar
48
56
  onKeyDown: function onKeyDown(event) {
49
57
  return handleKeyDown(props, event);
50
58
  },
59
+ onChange: (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh') ? function (e) {
60
+ return e.preventDefault();
61
+ } : undefined,
51
62
  className: (0, _runtime.ax)([emojiRadio.default])
52
63
  }), /*#__PURE__*/_react.default.createElement(_Emoji.default, {
53
64
  emoji: emoji,
@@ -30,7 +30,7 @@ var _internalTypes = require("./internal-types");
30
30
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
31
31
  var _new = _interopRequireDefault(require("@atlaskit/button/new"));
32
32
  var _browserApis = require("@atlaskit/browser-apis");
33
- 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); }
33
+ 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); }
34
34
  var closeEmojiUploadButton = null;
35
35
  var uploadAddRowNew = null;
36
36
  var emojiUpload = null;
@@ -308,28 +308,29 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
308
308
  var onFileLoad = (0, _react.useCallback)(function (file) {
309
309
  return /*#__PURE__*/function () {
310
310
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(f) {
311
- return _regenerator.default.wrap(function _callee$(_context) {
311
+ var _t;
312
+ return _regenerator.default.wrap(function (_context) {
312
313
  while (1) switch (_context.prev = _context.next) {
313
314
  case 0:
314
315
  _context.prev = 0;
315
316
  setFilename(file.name);
316
- _context.next = 4;
317
+ _context.next = 1;
317
318
  return ImageUtil.parseImage(f.target.result);
318
- case 4:
319
+ case 1:
319
320
  setPreviewImage(f.target.result);
320
321
  setChooseEmojiErrorMessage(undefined);
321
- _context.next = 12;
322
+ _context.next = 3;
322
323
  break;
323
- case 8:
324
- _context.prev = 8;
325
- _context.t0 = _context["catch"](0);
324
+ case 2:
325
+ _context.prev = 2;
326
+ _t = _context["catch"](0);
326
327
  setChooseEmojiErrorMessage( /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.emojiInvalidImage));
327
328
  cancelChooseFile();
328
- case 12:
329
+ case 3:
329
330
  case "end":
330
331
  return _context.stop();
331
332
  }
332
- }, _callee, null, [[0, 8]]);
333
+ }, _callee, null, [[0, 2]]);
333
334
  }));
334
335
  return function (_x) {
335
336
  return _ref.apply(this, arguments);
@@ -74,7 +74,7 @@ var ResourcedEmojiComponent = exports.ResourcedEmojiComponent = function Resourc
74
74
  reason,
75
75
  foundEmoji,
76
76
  _args = arguments;
77
- return _regenerator.default.wrap(function _callee$(_context) {
77
+ return _regenerator.default.wrap(function (_context) {
78
78
  while (1) switch (_context.prev = _context.next) {
79
79
  case 0:
80
80
  optimisticFetch = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
@@ -140,7 +140,7 @@ var ResourcedEmojiComponent = exports.ResourcedEmojiComponent = function Resourc
140
140
  setLoaded(true);
141
141
  (0, _analytics.sampledUfoRenderedEmoji)(emojiId).mark(_types.UfoEmojiTimings.METADATA_END);
142
142
  }
143
- case 5:
143
+ case 1:
144
144
  case "end":
145
145
  return _context.stop();
146
146
  }
@@ -8,11 +8,11 @@ Object.defineProperty(exports, "__esModule", {
8
8
  });
9
9
  exports.toneSelectorTestId = exports.default = exports.ToneSelectorInternal = void 0;
10
10
  require("./ToneSelector.compiled.css");
11
- var _react = _interopRequireWildcard(require("react"));
12
- var React = _react;
13
11
  var _runtime = require("@compiled/react/runtime");
14
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
13
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
16
  var _analyticsNext = require("@atlaskit/analytics-next");
17
17
  var _analytics = require("../../util/analytics");
18
18
  var _setSkinToneAriaLabelText = require("./setSkinToneAriaLabelText");
@@ -39,6 +39,8 @@ var ToneSelectorInternal = exports.ToneSelectorInternal = function ToneSelectorI
39
39
  isVisible = props.isVisible;
40
40
  var isMounted = (0, _react.useRef)(false);
41
41
  var selectedToneRadioRef = (0, _react.useRef)(null);
42
+ // Refs for all radio inputs — used for FG-gated arrow-key focus management
43
+ var radioRefs = (0, _react.useRef)([]);
42
44
  var _useIntl = (0, _reactIntl.useIntl)(),
43
45
  formatMessage = _useIntl.formatMessage;
44
46
  var emojiToneCollection = (0, _react.useMemo)(function () {
@@ -71,6 +73,12 @@ var ToneSelectorInternal = exports.ToneSelectorInternal = function ToneSelectorI
71
73
  (0, _analytics.createAndFireEventInElementsChannel)(event)(createAnalyticsEvent);
72
74
  }
73
75
  };
76
+ var _onArrowKey = (0, _react.useCallback)(function (currentIndex, direction) {
77
+ var _radioRefs$current$ne;
78
+ var len = radioRefs.current.length;
79
+ var nextIndex = (currentIndex + direction + len) % len;
80
+ (_radioRefs$current$ne = radioRefs.current[nextIndex]) === null || _radioRefs$current$ne === void 0 || _radioRefs$current$ne.focus();
81
+ }, []);
74
82
  var onToneSelectedHandler = function onToneSelectedHandler(toneValue) {
75
83
  return function () {
76
84
  if (selectedTone === toneValue && onToneClose) {
@@ -88,14 +96,30 @@ var ToneSelectorInternal = exports.ToneSelectorInternal = function ToneSelectorI
88
96
  fireAnalyticsEvent((0, _analytics.toneSelectorOpenedEvent)({}));
89
97
  }
90
98
  isMounted.current = true;
91
- return /*#__PURE__*/React.createElement("div", {
99
+ return /*#__PURE__*/_react.default.createElement("div", {
92
100
  role: "radiogroup",
93
101
  "data-testid": toneSelectorTestId,
94
102
  id: "emoji-picker-tone-selector",
95
103
  "aria-label": formatMessage(_i18n.messages.emojiSelectSkinToneListAriaLabelText),
96
104
  className: (0, _runtime.ax)([!isVisible && "_tzy4idpf _3um015vq _1e0cglyw"])
97
- }, emojiToneCollection.map(function (tone) {
98
- return /*#__PURE__*/React.createElement(_EmojiRadioButton.default, {
105
+ }, emojiToneCollection.map(function (tone, renderIndex) {
106
+ return (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh') ? /*#__PURE__*/_react.default.createElement(_EmojiRadioButton.default, {
107
+ ref: function ref(el) {
108
+ radioRefs.current[renderIndex] = el;
109
+ if (tone.isSelected && selectedToneRadioRef) {
110
+ selectedToneRadioRef.current = el;
111
+ }
112
+ },
113
+ defaultChecked: tone.isSelected,
114
+ ariaLabelText: tone.label,
115
+ key: "".concat(tone.id),
116
+ emoji: tone,
117
+ onArrowKey: function onArrowKey(direction) {
118
+ return _onArrowKey(renderIndex, direction);
119
+ },
120
+ onSelected: onToneSelectedHandler(tone.toneIndex),
121
+ selectOnHover: true
122
+ }) : /*#__PURE__*/_react.default.createElement(_EmojiRadioButton.default, {
99
123
  ref: tone.isSelected ? selectedToneRadioRef : null,
100
124
  defaultChecked: tone.isSelected,
101
125
  ariaLabelText: tone.label,
@@ -474,7 +474,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
474
474
  var onUploadEmoji = (0, _react.useCallback)( /*#__PURE__*/function () {
475
475
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(upload, retry) {
476
476
  var errorSetter, onSuccess, uploadShortName, existing;
477
- return _regenerator.default.wrap(function _callee$(_context) {
477
+ return _regenerator.default.wrap(function (_context) {
478
478
  while (1) switch (_context.prev = _context.next) {
479
479
  case 0:
480
480
  fireAnalytics((0, _analytics.uploadConfirmButton)({
@@ -492,23 +492,23 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
492
492
  scrollToUploadedEmoji(emojiDescription);
493
493
  };
494
494
  if (!(0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh')) {
495
- _context.next = 11;
495
+ _context.next = 2;
496
496
  break;
497
497
  }
498
498
  uploadShortName = ":".concat(upload.name.toLowerCase(), ":");
499
- _context.next = 7;
499
+ _context.next = 1;
500
500
  return emojiProvider.findByShortName(uploadShortName);
501
- case 7:
501
+ case 1:
502
502
  existing = _context.sent;
503
503
  if (!existing) {
504
- _context.next = 11;
504
+ _context.next = 2;
505
505
  break;
506
506
  }
507
507
  errorSetter(_i18n.messages.emojiDuplicateName);
508
508
  return _context.abrupt("return");
509
- case 11:
509
+ case 2:
510
510
  (0, _UploadEmoji.uploadEmoji)(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry);
511
- case 12:
511
+ case 3:
512
512
  case "end":
513
513
  return _context.stop();
514
514
  }