@atlaskit/emoji 71.0.0 → 71.0.1

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 (55) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-products/tsconfig.json +3 -0
  4. package/dist/cjs/components/common/Emoji.js +2 -1
  5. package/dist/cjs/components/common/EmojiActions.compiled.css +8 -0
  6. package/dist/cjs/components/common/EmojiActions.js +69 -3
  7. package/dist/cjs/components/common/Popup.js +20 -5
  8. package/dist/cjs/components/common/ProductivityColorSelector.compiled.css +59 -0
  9. package/dist/cjs/components/common/ProductivityColorSelector.js +112 -0
  10. package/dist/cjs/components/common/TonePreviewButton.js +4 -2
  11. package/dist/cjs/components/i18n.js +10 -0
  12. package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -36
  13. package/dist/cjs/components/picker/EmojiPickerList.js +36 -14
  14. package/dist/cjs/components/picker/VirtualList.js +4 -5
  15. package/dist/cjs/util/analytics/analytics.js +1 -1
  16. package/dist/cjs/util/hidden-emojis.js +33 -0
  17. package/dist/cjs/util/productivity-colors.js +51 -0
  18. package/dist/es2019/components/common/Emoji.js +2 -1
  19. package/dist/es2019/components/common/EmojiActions.compiled.css +8 -0
  20. package/dist/es2019/components/common/EmojiActions.js +67 -3
  21. package/dist/es2019/components/common/Popup.js +19 -5
  22. package/dist/es2019/components/common/ProductivityColorSelector.compiled.css +59 -0
  23. package/dist/es2019/components/common/ProductivityColorSelector.js +98 -0
  24. package/dist/es2019/components/common/TonePreviewButton.js +3 -2
  25. package/dist/es2019/components/i18n.js +10 -0
  26. package/dist/es2019/components/picker/EmojiPickerComponent.js +26 -14
  27. package/dist/es2019/components/picker/EmojiPickerList.js +32 -14
  28. package/dist/es2019/components/picker/VirtualList.js +4 -5
  29. package/dist/es2019/util/analytics/analytics.js +1 -1
  30. package/dist/es2019/util/hidden-emojis.js +25 -0
  31. package/dist/es2019/util/productivity-colors.js +37 -0
  32. package/dist/esm/components/common/Emoji.js +2 -1
  33. package/dist/esm/components/common/EmojiActions.compiled.css +8 -0
  34. package/dist/esm/components/common/EmojiActions.js +70 -4
  35. package/dist/esm/components/common/Popup.js +20 -5
  36. package/dist/esm/components/common/ProductivityColorSelector.compiled.css +59 -0
  37. package/dist/esm/components/common/ProductivityColorSelector.js +103 -0
  38. package/dist/esm/components/common/TonePreviewButton.js +4 -2
  39. package/dist/esm/components/i18n.js +10 -0
  40. package/dist/esm/components/picker/EmojiPickerComponent.js +51 -36
  41. package/dist/esm/components/picker/EmojiPickerList.js +36 -14
  42. package/dist/esm/components/picker/VirtualList.js +4 -5
  43. package/dist/esm/util/analytics/analytics.js +1 -1
  44. package/dist/esm/util/hidden-emojis.js +27 -0
  45. package/dist/esm/util/productivity-colors.js +45 -0
  46. package/dist/types/components/common/EmojiActions.d.ts +6 -0
  47. package/dist/types/components/common/Popup.d.ts +1 -0
  48. package/dist/types/components/common/ProductivityColorSelector.d.ts +17 -0
  49. package/dist/types/components/common/TonePreviewButton.d.ts +1 -0
  50. package/dist/types/components/i18n.d.ts +10 -0
  51. package/dist/types/components/picker/EmojiPickerList.d.ts +3 -0
  52. package/dist/types/types.d.ts +7 -0
  53. package/dist/types/util/hidden-emojis.d.ts +3 -0
  54. package/dist/types/util/productivity-colors.d.ts +8 -0
  55. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 71.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`371b9fd7ee6fb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/371b9fd7ee6fb) -
8
+ Colour instead of skin tone picker when it is Atlassian emojis
9
+ - Updated dependencies
10
+
3
11
  ## 71.0.0
4
12
 
5
13
  ### Major Changes
@@ -67,6 +67,9 @@
67
67
  {
68
68
  "path": "../../../design-system/primitives/afm-cc/tsconfig.json"
69
69
  },
70
+ {
71
+ "path": "../../../design-system/radio/afm-cc/tsconfig.json"
72
+ },
70
73
  {
71
74
  "path": "../../../design-system/spinner/afm-cc/tsconfig.json"
72
75
  },
@@ -67,6 +67,9 @@
67
67
  {
68
68
  "path": "../../../design-system/primitives/afm-products/tsconfig.json"
69
69
  },
70
+ {
71
+ "path": "../../../design-system/radio/afm-products/tsconfig.json"
72
+ },
70
73
  {
71
74
  "path": "../../../design-system/spinner/afm-products/tsconfig.json"
72
75
  },
@@ -341,6 +341,7 @@ var ImageEmoji = exports.ImageEmoji = function ImageEmoji(props) {
341
341
  );
342
342
  };
343
343
  var EmojiNodeWrapper = exports.EmojiNodeWrapper = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
344
+ var _emoji$name;
344
345
  var emoji = props.emoji,
345
346
  fitToHeight = props.fitToHeight,
346
347
  selected = props.selected,
@@ -365,7 +366,7 @@ var EmojiNodeWrapper = exports.EmojiNodeWrapper = /*#__PURE__*/(0, _react.forwar
365
366
  other = (0, _objectWithoutProperties2.default)(props, _excluded);
366
367
  var intl = (0, _react.useContext)(_reactIntl.IntlContext);
367
368
  var ariaLabel = intl && (0, _platformFeatureFlags.fg)('platform_change_emoji_button_label') ? intl.formatMessage(_i18n.messages.changeEmojiShortnameButtonLabel, {
368
- shortName: emoji.shortName
369
+ shortName: (_emoji$name = emoji.name) !== null && _emoji$name !== void 0 ? _emoji$name : emoji.shortName
369
370
  }) : editorEmoji ? undefined : emoji.shortName;
370
371
  return /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({
371
372
  role: editorEmoji ? undefined : shouldBeInteractive ? 'button' : ariaLabel ? 'img' : 'presentation',
@@ -1,9 +1,13 @@
1
1
 
2
+ ._19itia51{border:var(--ds-border-width,1px) solid var(--ds-border,#0b120e24)}
3
+ ._2rkofajl{border-radius:var(--ds-radius-small,3px)}
2
4
  ._n7zl1uh4{border-bottom:var(--ds-border-width-selected,2px) solid var(--ds-border,#0b120e24)}._16jlidpf{flex-grow:0}
3
5
  ._16jlkb7n{flex-grow:1}
6
+ ._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
4
7
  ._16qsjgpa{box-shadow:0 1px 1px 0 var(--ds-border,#0b120e24)}
5
8
  ._18u019bv{margin-left:10px}
6
9
  ._18u0r5cr{margin-left:var(--ds-space-negative-050,-4px)}
10
+ ._19bv12x7{padding-left:var(--ds-space-075,6px)}
7
11
  ._19bvidpf{padding-left:0}
8
12
  ._1bahesu3{justify-content:flex-end}
9
13
  ._1e0c1txw{display:flex}
@@ -12,10 +16,14 @@
12
16
  ._1wpz1h6o{align-self:center}
13
17
  ._2hwx1i6y{margin-right:var(--ds-space-negative-025,-2px)}
14
18
  ._4cvr1h6o{align-items:center}
19
+ ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
20
+ ._ca0q12x7{padding-top:var(--ds-space-075,6px)}
15
21
  ._ca0q1skh{padding-top:11px}
16
22
  ._i0dl1wug{flex-basis:auto}
17
23
  ._i0dlf1ug{flex-basis:0%}
24
+ ._n3td12x7{padding-bottom:var(--ds-space-075,6px)}
18
25
  ._n3td1crf{padding-bottom:9pt}
19
26
  ._otyr19bv{margin-bottom:10px}
20
27
  ._p12f3sup{max-width:285px}
28
+ ._u5f312x7{padding-right:var(--ds-space-075,6px)}
21
29
  ._u5f319bv{padding-right:10px}
@@ -19,6 +19,8 @@ var _EmojiDeletePreview = _interopRequireDefault(require("./EmojiDeletePreview")
19
19
  var _EmojiUploadPicker = _interopRequireDefault(require("./EmojiUploadPicker"));
20
20
  var _TonePreviewButton = _interopRequireDefault(require("./TonePreviewButton"));
21
21
  var _ToneSelector = _interopRequireDefault(require("./ToneSelector"));
22
+ var _ProductivityColorSelector = _interopRequireWildcard(require("./ProductivityColorSelector"));
23
+ var _Popup = _interopRequireDefault(require("./Popup"));
22
24
  var _EmojiPickerListSearch = require("../picker/EmojiPickerListSearch");
23
25
  var _i18n = require("../i18n");
24
26
  var _standardButton = _interopRequireDefault(require("@atlaskit/button/standard-button"));
@@ -36,6 +38,7 @@ var addCustomEmoji = null;
36
38
  var addCustomEmojiButton = null;
37
39
  var emojiActionsWrapper = null;
38
40
  var emojiToneSelectorContainer = null;
41
+ var productivityColorPopup = null;
39
42
  var previewFooter = null;
40
43
  var previewFooterNew = null;
41
44
  var emojiActionsTestId = exports.emojiActionsTestId = 'emoji-actions';
@@ -77,11 +80,17 @@ var AddOwnEmoji = exports.AddOwnEmoji = function AddOwnEmoji(props) {
77
80
  })));
78
81
  };
79
82
  var TonesWrapper = function TonesWrapper(props) {
80
- var toneEmoji = props.toneEmoji,
83
+ var activeCategoryId = props.activeCategoryId,
84
+ onProductivityColorSelected = props.onProductivityColorSelected,
85
+ productivityColorPreviewEmojis = props.productivityColorPreviewEmojis,
86
+ selectedProductivityColor = props.selectedProductivityColor,
87
+ toneEmoji = props.toneEmoji,
81
88
  _props$selectedTone = props.selectedTone,
82
89
  selectedTone = _props$selectedTone === void 0 ? _constants.DEFAULT_TONE : _props$selectedTone,
83
90
  intl = props.intl,
91
+ onToneClose = props.onToneClose,
84
92
  onToneOpen = props.onToneOpen,
93
+ onToneToggle = props.onToneToggle,
85
94
  showToneSelector = props.showToneSelector;
86
95
  var formatMessage = intl.formatMessage;
87
96
  var tonePreviewButtonRef = (0, _react.useRef)(null);
@@ -108,6 +117,41 @@ var TonesWrapper = function TonesWrapper(props) {
108
117
  onToneSelected(toneValue);
109
118
  setFocusTonePreviewButton(true);
110
119
  }, [props]);
120
+ var onProductivityColorSelectedHandler = (0, _react.useCallback)(function (color) {
121
+ onProductivityColorSelected === null || onProductivityColorSelected === void 0 || onProductivityColorSelected(color);
122
+ onToneClose();
123
+ setFocusTonePreviewButton(true);
124
+ }, [onProductivityColorSelected, onToneClose]);
125
+ var shouldShowProductivityColorSelector = !!(activeCategoryId === 'ATLASSIAN' && productivityColorPreviewEmojis && selectedProductivityColor && onProductivityColorSelected && _featureGateJsClient.default.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false));
126
+ if (shouldShowProductivityColorSelector) {
127
+ var previewEmoji = (productivityColorPreviewEmojis === null || productivityColorPreviewEmojis === void 0 ? void 0 : productivityColorPreviewEmojis[selectedProductivityColor]) || Object.values(productivityColorPreviewEmojis || {})[0];
128
+ if (!previewEmoji) {
129
+ return null;
130
+ }
131
+ return /*#__PURE__*/React.createElement("div", {
132
+ className: (0, _runtime.ax)(["_16jlkb7n _1o9zkb7n _i0dlf1ug _ca0q1skh _u5f319bv _n3td1crf _19bvidpf _1e0c1txw _1bahesu3"])
133
+ }, showToneSelector && tonePreviewButtonRef.current && /*#__PURE__*/React.createElement(_Popup.default, {
134
+ target: tonePreviewButtonRef.current,
135
+ relativePosition: "below",
136
+ horizontalAlign: "end-to-start",
137
+ offsetY: 4,
138
+ zIndex: 510
139
+ }, /*#__PURE__*/React.createElement("div", {
140
+ className: (0, _runtime.ax)(["_19itia51 _2rkofajl _bfhk1bhr _16qs130s _ca0q12x7 _u5f312x7 _n3td12x7 _19bv12x7"])
141
+ }, /*#__PURE__*/React.createElement(_ProductivityColorSelector.default, {
142
+ colorPreviewEmojis: productivityColorPreviewEmojis,
143
+ selectedColor: selectedProductivityColor,
144
+ onColorSelected: onProductivityColorSelectedHandler
145
+ }))), /*#__PURE__*/React.createElement(_TonePreviewButton.default, {
146
+ ref: tonePreviewButtonRef,
147
+ ariaControls: _ProductivityColorSelector.productivityColorSelectorId,
148
+ ariaExpanded: showToneSelector,
149
+ emoji: previewEmoji,
150
+ selectOnHover: true,
151
+ onSelected: onToneToggle,
152
+ ariaLabelText: formatMessage(_i18n.messages.emojiSelectColorButtonAriaLabelText)
153
+ }));
154
+ }
111
155
  if (!toneEmoji) {
112
156
  return null;
113
157
  }
@@ -156,12 +200,19 @@ var EmojiActions = exports.EmojiActions = function EmojiActions(props) {
156
200
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
157
201
  showToneSelector = _useState4[0],
158
202
  setShowToneSelector = _useState4[1];
203
+ var wasProductivityColorSelectorOpen = (0, _react.useRef)(false);
204
+ var shouldUseProductivityColorControl = !!(props.activeCategoryId === 'ATLASSIAN' && props.productivityColorPreviewEmojis && props.selectedProductivityColor && props.onProductivityColorSelected && _featureGateJsClient.default.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false));
159
205
  var onToneOpenHandler = (0, _react.useCallback)(function () {
160
206
  return setShowToneSelector(true);
161
207
  }, []);
162
208
  var onToneCloseHandler = (0, _react.useCallback)(function () {
163
209
  return setShowToneSelector(false);
164
210
  }, []);
211
+ var onToneToggleHandler = (0, _react.useCallback)(function () {
212
+ setShowToneSelector(function (isOpen) {
213
+ return !isOpen;
214
+ });
215
+ }, []);
165
216
  var onToneSelectedHandler = (0, _react.useCallback)(function (toneValue) {
166
217
  setShowToneSelector(false);
167
218
  if (onToneSelected) {
@@ -169,11 +220,24 @@ var EmojiActions = exports.EmojiActions = function EmojiActions(props) {
169
220
  }
170
221
  }, [onToneSelected]);
171
222
  var onMouseLeaveHandler = (0, _react.useCallback)(function () {
223
+ if (shouldUseProductivityColorControl) {
224
+ return;
225
+ }
172
226
  if (showToneSelector && onToneSelectorCancelled) {
173
227
  onToneSelectorCancelled();
174
228
  }
175
229
  setShowToneSelector(false);
176
- }, [showToneSelector, onToneSelectorCancelled]);
230
+ }, [shouldUseProductivityColorControl, showToneSelector, onToneSelectorCancelled]);
231
+ (0, _react.useEffect)(function () {
232
+ if (shouldUseProductivityColorControl && showToneSelector) {
233
+ wasProductivityColorSelectorOpen.current = true;
234
+ return;
235
+ }
236
+ if (!shouldUseProductivityColorControl && wasProductivityColorSelectorOpen.current) {
237
+ setShowToneSelector(false);
238
+ wasProductivityColorSelectorOpen.current = false;
239
+ }
240
+ }, [shouldUseProductivityColorControl, showToneSelector]);
177
241
  if (uploading) {
178
242
  return _featureGateJsClient.default.getExperimentValue('platform_teamoji_26_refresh_emoji_picker', 'isEnabled', false) ? /*#__PURE__*/React.createElement("div", {
179
243
  className: (0, _runtime.ax)(["_16jlidpf _1o9zidpf _i0dl1wug"])
@@ -219,11 +283,12 @@ var EmojiActions = exports.EmojiActions = function EmojiActions(props) {
219
283
  onChange: onChange,
220
284
  query: query,
221
285
  resultsCount: resultsCount,
222
- isVisible: !showToneSelector
286
+ isVisible: !showToneSelector || shouldUseProductivityColorControl
223
287
  }), /*#__PURE__*/React.createElement(TonesWrapper, (0, _extends2.default)({}, props, {
224
288
  onToneOpen: onToneOpenHandler,
225
289
  onToneClose: onToneCloseHandler,
226
290
  onToneSelected: onToneSelectedHandler,
291
+ onToneToggle: onToneToggleHandler,
227
292
  showToneSelector: showToneSelector
228
293
  })))) : /*#__PURE__*/React.createElement("div", {
229
294
  "data-testid": emojiActionsTestId,
@@ -241,6 +306,7 @@ var EmojiActions = exports.EmojiActions = function EmojiActions(props) {
241
306
  onToneOpen: onToneOpenHandler,
242
307
  onToneClose: onToneCloseHandler,
243
308
  onToneSelected: onToneSelectedHandler,
309
+ onToneToggle: onToneToggleHandler,
244
310
  showToneSelector: showToneSelector
245
311
  }))), /*#__PURE__*/React.createElement(AddOwnEmoji, props));
246
312
  };
@@ -20,6 +20,8 @@ var getTargetNode = function getTargetNode(target) {
20
20
  var Popup = function Popup(props) {
21
21
  var _props$relativePositi = props.relativePosition,
22
22
  relativePosition = _props$relativePositi === void 0 ? 'auto' : _props$relativePositi,
23
+ _props$horizontalAlig = props.horizontalAlign,
24
+ horizontalAlign = _props$horizontalAlig === void 0 ? 'start' : _props$horizontalAlig,
23
25
  _props$offsetX = props.offsetX,
24
26
  offsetX = _props$offsetX === void 0 ? 0 : _props$offsetX,
25
27
  _props$offsetY = props.offsetY,
@@ -33,17 +35,27 @@ var Popup = function Popup(props) {
33
35
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
34
36
  debounced = _useState2[0],
35
37
  setDebounced = _useState2[1];
38
+ var getLeftPosition = (0, _react.useCallback)(function (box) {
39
+ if (horizontalAlign === 'end-to-start') {
40
+ return box.left - 152;
41
+ }
42
+ if (horizontalAlign === 'end') {
43
+ var _popup$current;
44
+ return box.right - (((_popup$current = popup.current) === null || _popup$current === void 0 ? void 0 : _popup$current.offsetWidth) || 0) + (offsetX || 0);
45
+ }
46
+ return box.left + (offsetX || 0);
47
+ }, [horizontalAlign, offsetX]);
36
48
  var applyBelowPosition = (0, _react.useCallback)(function () {
37
49
  var targetNode = getTargetNode(target);
38
50
  if (targetNode && popup.current) {
39
51
  var box = targetNode.getBoundingClientRect();
40
52
  var top = box.bottom + (offsetY || 0);
41
- var left = box.left + (offsetX || 0);
53
+ var left = getLeftPosition(box);
42
54
  popup.current.style.top = "".concat(top, "px");
43
55
  popup.current.style.bottom = '';
44
56
  popup.current.style.left = "".concat(left, "px");
45
57
  }
46
- }, [offsetX, offsetY, target]);
58
+ }, [getLeftPosition, offsetY, target]);
47
59
  var applyAbovePosition = (0, _react.useCallback)(function () {
48
60
  if (typeof window === 'undefined') {
49
61
  return;
@@ -52,12 +64,12 @@ var Popup = function Popup(props) {
52
64
  if (targetNode && popup.current) {
53
65
  var box = targetNode.getBoundingClientRect();
54
66
  var bottom = window.innerHeight - box.top + (offsetY || 0);
55
- var left = box.left + (offsetX || 0);
67
+ var left = getLeftPosition(box);
56
68
  popup.current.style.top = '';
57
69
  popup.current.style.bottom = "".concat(bottom, "px");
58
70
  popup.current.style.left = "".concat(left, "px");
59
71
  }
60
- }, [offsetX, offsetY, target]);
72
+ }, [getLeftPosition, offsetY, target]);
61
73
  var applyAbsolutePosition = (0, _react.useCallback)(function () {
62
74
  if (typeof window === 'undefined') {
63
75
  return;
@@ -112,6 +124,9 @@ var Popup = function Popup(props) {
112
124
  }
113
125
  applyAbsolutePosition();
114
126
  renderPopup();
127
+ if (horizontalAlign !== 'start') {
128
+ applyAbsolutePosition();
129
+ }
115
130
  return function () {
116
131
  if (typeof window === 'undefined') {
117
132
  return;
@@ -122,7 +137,7 @@ var Popup = function Popup(props) {
122
137
  document.body.removeChild(popup.current);
123
138
  }
124
139
  };
125
- }, [applyAbsolutePosition, handleResize, renderPopup]);
140
+ }, [applyAbsolutePosition, handleResize, horizontalAlign, renderPopup]);
126
141
  return /*#__PURE__*/_react.default.createElement("div", null);
127
142
  };
128
143
  var _default = exports.default = Popup;
@@ -0,0 +1,59 @@
1
+
2
+ ._1355fajl input+span{border-radius:var(--ds-radius-small,3px)}
3
+ ._19itidpf{border:0}
4
+ ._zulp1b66{gap:var(--ds-space-050,4px)}._1030zwfg input+span{height:2pc}
5
+ ._12hvze3t input{margin-right:var(--ds-space-0,0)}
6
+ ._12ultlke input{cursor:pointer}
7
+ ._13yj1o36 input:focus+span{outline-width:medium}
8
+ ._17muzwfg label{height:2pc}
9
+ ._18m915vq{overflow-y:hidden}
10
+ ._18u0ze3t{margin-left:var(--ds-space-0,0)}
11
+ ._19bvidpf{padding-left:0}
12
+ ._19pkze3t{margin-top:var(--ds-space-0,0)}
13
+ ._1bah1h6o{justify-content:center}
14
+ ._1bsbt94y{width:1px}
15
+ ._1bsbzwfg{width:2pc}
16
+ ._1e0c11p5{display:grid}
17
+ ._1e0c1txw{display:flex}
18
+ ._1e7sidpf input{opacity:0}
19
+ ._1eq11h6o label{align-items:center}
20
+ ._1nn0kb7n input{z-index:1}
21
+ ._1p1fzwfg label{width:2pc}
22
+ ._1pi91y54 input:focus+span{box-shadow:0 0 0 2px var(--ds-border-focused,#4688ec)}
23
+ ._1reo15vq{overflow-x:hidden}
24
+ ._1rgfze3t input{margin-left:var(--ds-space-0,0)}
25
+ ._1rgq13zc input:focus+span{transition-duration:0s,.2s}
26
+ ._1ul9idpf{min-width:0}
27
+ ._1vzltlke label{cursor:pointer}
28
+ ._1wqq1h6o label{justify-content:center}
29
+ ._2hwxze3t{margin-right:var(--ds-space-0,0)}
30
+ ._2x4gze3t input{margin-top:var(--ds-space-0,0)}
31
+ ._2z051y6t{grid-template-rows:repeat(2,2pc)}
32
+ ._4cvr1h6o{align-items:center}
33
+ ._4t3it94y{height:1px}
34
+ ._4t3izwfg{height:2pc}
35
+ ._5hv9zwfg input{width:2pc}
36
+ ._6rawzwfg input+span{width:2pc}
37
+ ._6vsr1h6o input+span{justify-content:center}
38
+ ._7kzvidpf input+span{padding-inline-end:0}
39
+ ._8qdiidpf input+span{padding-block-start:0}
40
+ ._ca0qidpf{padding-top:0}
41
+ ._ecyuidpf input+span{padding-block-end:0}
42
+ ._ev8ridpf input+span{padding-inline-start:0}
43
+ ._hxs6glyw input:focus+span{outline-style:none}
44
+ ._khufstnw input{position:absolute}
45
+ ._kqswh2mm{position:relative}
46
+ ._kqswstnw{position:absolute}
47
+ ._n3tdidpf{padding-bottom:0}
48
+ ._ngzz1txw input+span{display:flex}
49
+ ._o5721q9c{white-space:nowrap}
50
+ ._ogtohxbz{clip:rect(0 0 0 0)}
51
+ ._otyrze3t{margin-bottom:var(--ds-space-0,0)}
52
+ ._pytkzwfg input{height:2pc}
53
+ ._smb7plhp input:hover+span{background-color:var(--ds-background-neutral-hovered,#0b120e24)}
54
+ ._soq51h6o input+span{align-items:center}
55
+ ._szw2w5lj input:checked+span{box-shadow:0 0 0 2px var(--ds-border-selected,#1868db)}
56
+ ._tnsm1r31 input:focus+span{outline-color:currentColor}
57
+ ._u5f3idpf{padding-right:0}
58
+ ._x5bdze3t input{margin-bottom:var(--ds-space-0,0)}
59
+ ._yv0e1bbt{grid-template-columns:repeat(5,2pc)}
@@ -0,0 +1,112 @@
1
+ /* ProductivityColorSelector.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.productivityColorSelectorTestId = exports.productivityColorSelectorId = exports.default = exports.ProductivityColorSelector = void 0;
10
+ require("./ProductivityColorSelector.compiled.css");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var React = _react;
13
+ var _runtime = require("@compiled/react/runtime");
14
+ var _reactIntl = require("react-intl");
15
+ var _radio = require("@atlaskit/radio");
16
+ var _productivityColors = require("../../util/productivity-colors");
17
+ var _i18n = require("../i18n");
18
+ var _Emoji = _interopRequireDefault(require("./Emoji"));
19
+ 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); }
20
+ var productivityColorSelectorTestId = exports.productivityColorSelectorTestId = 'productivity-color-selector';
21
+ var productivityColorSelectorId = exports.productivityColorSelectorId = 'emoji-picker-productivity-color-selector';
22
+ var selectorGrid = null;
23
+ var visuallyHiddenLegend = null;
24
+ var colorOption = null;
25
+ var colorOptionEmoji = null;
26
+ var getColorLabel = function getColorLabel(color) {
27
+ return "".concat(color.charAt(0).toUpperCase()).concat(color.slice(1), " productivity emoji colour");
28
+ };
29
+ var ProductivityColorSelector = exports.ProductivityColorSelector = function ProductivityColorSelector(_ref) {
30
+ var colorPreviewEmojis = _ref.colorPreviewEmojis,
31
+ onColorSelected = _ref.onColorSelected,
32
+ selectedColor = _ref.selectedColor;
33
+ var intl = (0, _react.useContext)(_reactIntl.IntlContext);
34
+ var radioRefs = (0, _react.useRef)([]);
35
+ var hasFocusedSelectedColor = (0, _react.useRef)(false);
36
+ var availableColors = _productivityColors.productivityColors.filter(function (color) {
37
+ return colorPreviewEmojis[color];
38
+ });
39
+ var colorSelectorAriaLabel = intl ? intl.formatMessage(_i18n.messages.emojiSelectColorListAriaLabelText) : _i18n.messages.emojiSelectColorListAriaLabelText.defaultMessage;
40
+ if (!availableColors.length) {
41
+ return null;
42
+ }
43
+ var onArrowKey = function onArrowKey(currentIndex, direction) {
44
+ var _radioRefs$current$ne;
45
+ var nextIndex = (currentIndex + direction + availableColors.length) % availableColors.length;
46
+ (_radioRefs$current$ne = radioRefs.current[nextIndex]) === null || _radioRefs$current$ne === void 0 || _radioRefs$current$ne.focus();
47
+ };
48
+ var stopPickerDismissal = function stopPickerDismissal(event) {
49
+ event.stopPropagation();
50
+ };
51
+ return /*#__PURE__*/React.createElement("fieldset", {
52
+ id: productivityColorSelectorId,
53
+ "data-testid": productivityColorSelectorTestId,
54
+ className: (0, _runtime.ax)(["_19itidpf _zulp1b66 _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _1e0c11p5 _yv0e1bbt _2z051y6t _19pkze3t _2hwxze3t _otyrze3t _18u0ze3t _1ul9idpf"])
55
+ }, /*#__PURE__*/React.createElement("legend", {
56
+ className: (0, _runtime.ax)(["_19itidpf _1reo15vq _18m915vq _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _ogtohxbz _4t3it94y _kqswstnw _o5721q9c _1bsbt94y"])
57
+ }, colorSelectorAriaLabel), availableColors.map(function (color, index) {
58
+ var emoji = colorPreviewEmojis[color];
59
+ if (!emoji) {
60
+ return null;
61
+ }
62
+ var handleKeyDown = function handleKeyDown(event) {
63
+ if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {
64
+ event.preventDefault();
65
+ onArrowKey(index, -1);
66
+ }
67
+ if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {
68
+ event.preventDefault();
69
+ onArrowKey(index, 1);
70
+ }
71
+ if (event.key === 'Enter') {
72
+ event.preventDefault();
73
+ onColorSelected(color);
74
+ }
75
+ };
76
+ return /*#__PURE__*/React.createElement("div", {
77
+ key: color,
78
+ className: (0, _runtime.ax)(["_4t3izwfg _kqswh2mm _1bsbzwfg _1355fajl _soq51h6o _ngzz1txw _1030zwfg _6vsr1h6o _ecyuidpf _8qdiidpf _7kzvidpf _ev8ridpf _6rawzwfg _tnsm1r31 _hxs6glyw _13yj1o36 _1pi91y54 _1rgq13zc _1eq11h6o _1vzltlke _17muzwfg _1wqq1h6o _1p1fzwfg _12ultlke _pytkzwfg _2x4gze3t _12hvze3t _x5bdze3t _1rgfze3t _1e7sidpf _khufstnw _5hv9zwfg _1nn0kb7n _smb7plhp _szw2w5lj"])
79
+ }, /*#__PURE__*/React.createElement(_radio.Radio, {
80
+ ref: function ref(el) {
81
+ radioRefs.current[index] = el;
82
+ if (selectedColor === color) {
83
+ if (el && !hasFocusedSelectedColor.current) {
84
+ el.focus();
85
+ hasFocusedSelectedColor.current = true;
86
+ }
87
+ }
88
+ },
89
+ ariaLabel: getColorLabel(color),
90
+ name: "productivity-emoji-colour",
91
+ isChecked: selectedColor === color,
92
+ onChange: function onChange() {
93
+ return onColorSelected(color);
94
+ },
95
+ onClick: stopPickerDismissal,
96
+ onKeyDown: handleKeyDown,
97
+ onMouseDown: stopPickerDismissal,
98
+ testId: "productivity-color-".concat(color),
99
+ value: color,
100
+ label: /*#__PURE__*/React.createElement("span", {
101
+ className: (0, _runtime.ax)(["_4cvr1h6o _1e0c1txw _4t3izwfg _1bah1h6o _1bsbzwfg"])
102
+ }, /*#__PURE__*/React.createElement(_Emoji.default, {
103
+ emoji: emoji,
104
+ shouldBeInteractive: false,
105
+ "aria-hidden": true,
106
+ fitToHeight: 24
107
+ }))
108
+ }));
109
+ }));
110
+ };
111
+ var _default_1 = /*#__PURE__*/(0, _react.memo)(ProductivityColorSelector);
112
+ var _default = exports.default = _default_1;
@@ -22,6 +22,8 @@ var emojiButtonOutline = null;
22
22
  var TonePreviewButton = exports.TonePreviewButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
23
23
  var emoji = props.emoji,
24
24
  selectOnHover = props.selectOnHover,
25
+ _props$ariaControls = props.ariaControls,
26
+ ariaControls = _props$ariaControls === void 0 ? 'emoji-picker-tone-selector' : _props$ariaControls,
25
27
  ariaLabelText = props.ariaLabelText,
26
28
  ariaExpanded = props.ariaExpanded,
27
29
  onSelected = props.onSelected,
@@ -33,7 +35,7 @@ var TonePreviewButton = exports.TonePreviewButton = /*#__PURE__*/(0, _react.forw
33
35
  onClick: onSelected,
34
36
  "aria-label": ariaLabelText,
35
37
  "aria-expanded": ariaExpanded,
36
- "aria-controls": "emoji-picker-tone-selector"
38
+ "aria-controls": ariaControls
37
39
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
38
40
  ,
39
41
  style: {
@@ -53,7 +55,7 @@ var TonePreviewButton = exports.TonePreviewButton = /*#__PURE__*/(0, _react.forw
53
55
  onClick: onSelected,
54
56
  "aria-label": ariaLabelText,
55
57
  "aria-expanded": ariaExpanded,
56
- "aria-controls": "emoji-picker-tone-selector"
58
+ "aria-controls": ariaControls
57
59
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
58
60
  ,
59
61
  style: {
@@ -71,6 +71,16 @@ var messages = exports.messages = (0, _reactIntl.defineMessages)({
71
71
  defaultMessage: 'Choose your skin tone, {selectedTone} selected',
72
72
  description: 'Message indicating the purpose of the skin tone selection button and the selected tone'
73
73
  },
74
+ emojiSelectColorButtonAriaLabelText: {
75
+ id: 'fabric.emoji.select.color.ariaLabel',
76
+ defaultMessage: 'Productivity emoji color selector',
77
+ description: 'Message indicating the purpose of the color selection button and the selected color'
78
+ },
79
+ emojiSelectColorListAriaLabelText: {
80
+ id: 'fabric.emoji.select.color.list.ariaLabel',
81
+ defaultMessage: 'Productivity emoji colour selector',
82
+ description: 'Message indicating the purpose of the productivity emoji color list selector'
83
+ },
74
84
  emojiSelectSkinToneListAriaLabelText: {
75
85
  id: 'fabric.emoji.select.skin.list.ariaLabel',
76
86
  defaultMessage: 'Skin tone selector',