@atlaskit/emoji 67.2.0 → 67.3.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.
- package/CHANGELOG.md +20 -0
- package/dist/cjs/api/EmojiResource.js +6 -0
- package/dist/cjs/components/common/DeletableEmojiTooltipContent.js +34 -0
- package/dist/cjs/components/common/DeleteButton.js +2 -1
- package/dist/cjs/components/common/Emoji.js +94 -81
- package/dist/cjs/components/common/EmojiActions.js +8 -6
- package/dist/cjs/components/common/EmojiDeletePreview.js +19 -6
- package/dist/cjs/components/common/EmojiErrorMessage.js +13 -5
- package/dist/cjs/components/common/EmojiRadioButton.js +1 -0
- package/dist/cjs/components/common/EmojiUploadPicker.js +30 -29
- package/dist/cjs/components/common/EmojiUploadPreview.js +12 -5
- package/dist/cjs/components/common/FileChooser.js +7 -1
- package/dist/cjs/components/common/ResourcedEmoji.js +5 -3
- package/dist/cjs/components/common/RetryableButton.js +9 -3
- package/dist/cjs/components/common/ToolTipContentWithKeymap.js +25 -0
- package/dist/cjs/components/common/styles.js +45 -19
- package/dist/cjs/components/i18n.js +17 -2
- package/dist/cjs/components/picker/CategorySelector.js +2 -1
- package/dist/cjs/components/picker/CategoryTracker.js +5 -0
- package/dist/cjs/components/picker/EmojiPickerComponent.js +12 -6
- package/dist/cjs/components/picker/EmojiPickerList.js +49 -8
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +4 -1
- package/dist/cjs/components/picker/VirtualList.js +8 -3
- package/dist/cjs/{util → hooks}/useInView.js +3 -2
- package/dist/cjs/util/browser-support.js +11 -3
- package/dist/cjs/util/constants.js +4 -1
- package/dist/cjs/util/keymaps.js +55 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +6 -0
- package/dist/es2019/components/common/DeletableEmojiTooltipContent.js +27 -0
- package/dist/es2019/components/common/DeleteButton.js +2 -1
- package/dist/es2019/components/common/Emoji.js +90 -72
- package/dist/es2019/components/common/EmojiActions.js +9 -7
- package/dist/es2019/components/common/EmojiDeletePreview.js +17 -7
- package/dist/es2019/components/common/EmojiErrorMessage.js +10 -4
- package/dist/es2019/components/common/EmojiRadioButton.js +1 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +32 -27
- package/dist/es2019/components/common/EmojiUploadPreview.js +9 -5
- package/dist/es2019/components/common/FileChooser.js +7 -1
- package/dist/es2019/components/common/ResourcedEmoji.js +5 -3
- package/dist/es2019/components/common/RetryableButton.js +9 -3
- package/dist/es2019/components/common/ToolTipContentWithKeymap.js +15 -0
- package/dist/es2019/components/common/styles.js +39 -15
- package/dist/es2019/components/i18n.js +17 -2
- package/dist/es2019/components/picker/CategorySelector.js +2 -1
- package/dist/es2019/components/picker/CategoryTracker.js +3 -0
- package/dist/es2019/components/picker/EmojiPickerComponent.js +12 -6
- package/dist/es2019/components/picker/EmojiPickerList.js +48 -8
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +3 -1
- package/dist/es2019/components/picker/VirtualList.js +7 -3
- package/dist/es2019/{util → hooks}/useInView.js +2 -2
- package/dist/es2019/util/browser-support.js +9 -1
- package/dist/es2019/util/constants.js +2 -0
- package/dist/es2019/util/keymaps.js +43 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +6 -0
- package/dist/esm/components/common/DeletableEmojiTooltipContent.js +25 -0
- package/dist/esm/components/common/DeleteButton.js +2 -1
- package/dist/esm/components/common/Emoji.js +94 -82
- package/dist/esm/components/common/EmojiActions.js +9 -7
- package/dist/esm/components/common/EmojiDeletePreview.js +17 -7
- package/dist/esm/components/common/EmojiErrorMessage.js +11 -4
- package/dist/esm/components/common/EmojiRadioButton.js +1 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +32 -31
- package/dist/esm/components/common/EmojiUploadPreview.js +9 -5
- package/dist/esm/components/common/FileChooser.js +7 -1
- package/dist/esm/components/common/ResourcedEmoji.js +5 -3
- package/dist/esm/components/common/RetryableButton.js +9 -3
- package/dist/esm/components/common/ToolTipContentWithKeymap.js +14 -0
- package/dist/esm/components/common/styles.js +38 -16
- package/dist/esm/components/i18n.js +17 -2
- package/dist/esm/components/picker/CategorySelector.js +2 -1
- package/dist/esm/components/picker/CategoryTracker.js +5 -0
- package/dist/esm/components/picker/EmojiPickerComponent.js +12 -6
- package/dist/esm/components/picker/EmojiPickerList.js +49 -8
- package/dist/esm/components/picker/EmojiPickerListSearch.js +4 -1
- package/dist/esm/components/picker/VirtualList.js +8 -3
- package/dist/esm/{util → hooks}/useInView.js +2 -2
- package/dist/esm/util/browser-support.js +9 -1
- package/dist/esm/util/constants.js +2 -0
- package/dist/esm/util/keymaps.js +43 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/DeletableEmojiTooltipContent.d.ts +6 -0
- package/dist/types/components/common/Emoji.d.ts +6 -0
- package/dist/types/components/common/EmojiErrorMessage.d.ts +1 -0
- package/dist/types/components/common/FileChooser.d.ts +1 -0
- package/dist/types/components/common/RetryableButton.d.ts +2 -1
- package/dist/types/components/common/ToolTipContentWithKeymap.d.ts +9 -0
- package/dist/types/components/common/styles.d.ts +6 -2
- package/dist/types/components/i18n.d.ts +15 -0
- package/dist/types/components/picker/CategoryTracker.d.ts +1 -0
- package/dist/types/components/picker/EmojiPickerList.d.ts +8 -1
- package/dist/types/components/picker/EmojiPickerListSearch.d.ts +1 -0
- package/dist/types/components/picker/VirtualList.d.ts +21 -1
- package/dist/types/types.d.ts +1 -1
- package/dist/types/util/browser-support.d.ts +6 -1
- package/dist/types/util/constants.d.ts +3 -1
- package/dist/types/util/keymaps.d.ts +14 -0
- package/dist/types/util/type-helpers.d.ts +1 -1
- package/package.json +2 -2
- package/report.api.md +16 -1
- /package/dist/types/{util → hooks}/useInView.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 67.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`f31280da145`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f31280da145) - fix category reset when tone changed, update error message translations, improve error message for screen reader, improve auto focus on choose file screen
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [`e8ff53a79be`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e8ff53a79be) - minor accessibility improvements in emoji picker
|
|
12
|
+
- [`53c4778831c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/53c4778831c) - [ux] add keyboard support for delete emoji
|
|
13
|
+
- [`3256c34030f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3256c34030f) - Fix picker so that it always highlights the first category when first opened
|
|
14
|
+
- [`788a4d63c82`](https://bitbucket.org/atlassian/atlassian-frontend/commits/788a4d63c82) - fix focus issue with tone selector
|
|
15
|
+
- [`10ae56adac7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/10ae56adac7) - fix: emoji is shown as grey box after successfully uploading
|
|
16
|
+
|
|
17
|
+
## 67.2.1
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- [`a73ef9ebecb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a73ef9ebecb) - Add ssr rendering metadata to resourced emoji loaded experience
|
|
22
|
+
|
|
3
23
|
## 67.2.0
|
|
4
24
|
|
|
5
25
|
### Minor Changes
|
|
@@ -742,6 +742,12 @@ var UploadingEmojiResource = /*#__PURE__*/function (_EmojiResource) {
|
|
|
742
742
|
return Promise.reject('No media api support is configured');
|
|
743
743
|
}
|
|
744
744
|
return _this14.siteEmojiResource.uploadEmoji(upload, retry).then(function (emoji) {
|
|
745
|
+
// Use file preview blob URL to temporarily fix the graybox issue after uploading,
|
|
746
|
+
// Because the media service takes time to process the image.
|
|
747
|
+
// Ideally should improve CachingMediaImage by using mediaClient or mediaImage,
|
|
748
|
+
// But that requires more efforts in FE & BE.
|
|
749
|
+
// TODO: revist this when pick up COLLAB-2294
|
|
750
|
+
emoji.representation.imagePath = upload.dataURL;
|
|
745
751
|
_this14.addUnknownEmoji(emoji);
|
|
746
752
|
_this14.refreshLastFilter();
|
|
747
753
|
return emoji;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.DeletableEmojiTooltipContentForScreenReader = exports.DeletableEmojiTooltipContent = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _reactIntlNext = require("react-intl-next");
|
|
11
|
+
var _i18n = require("../i18n");
|
|
12
|
+
var _ToolTipContentWithKeymap = require("./ToolTipContentWithKeymap");
|
|
13
|
+
var _keymaps = require("../../util/keymaps");
|
|
14
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
15
|
+
var DeletableEmojiTooltipContent = function DeletableEmojiTooltipContent() {
|
|
16
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
17
|
+
formatMessage = _useIntl.formatMessage;
|
|
18
|
+
return /*#__PURE__*/_react.default.createElement(_ToolTipContentWithKeymap.ToolTipContentWithKeymap, {
|
|
19
|
+
description: formatMessage(_i18n.messages.deleteEmojiTooltip),
|
|
20
|
+
keymap: _keymaps.backspace
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
exports.DeletableEmojiTooltipContent = DeletableEmojiTooltipContent;
|
|
24
|
+
var DeletableEmojiTooltipContentForScreenReader = function DeletableEmojiTooltipContentForScreenReader(_ref) {
|
|
25
|
+
var emoji = _ref.emoji;
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(_visuallyHidden.default, {
|
|
27
|
+
id: "screenreader-emoji-".concat(emoji.id)
|
|
28
|
+
}, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _i18n.messages.deleteEmojiTooltipForScreenreader, {
|
|
29
|
+
values: {
|
|
30
|
+
shortName: emoji.shortName
|
|
31
|
+
}
|
|
32
|
+
})));
|
|
33
|
+
};
|
|
34
|
+
exports.DeletableEmojiTooltipContentForScreenReader = DeletableEmojiTooltipContentForScreenReader;
|
|
@@ -5,13 +5,14 @@ var _typeof = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.default = exports.SpriteEmoji = exports.ImageEmoji = exports.Emoji = void 0;
|
|
8
|
+
exports.default = exports.SpriteEmoji = exports.ImageEmoji = exports.EmojiNodeWrapper = exports.Emoji = void 0;
|
|
9
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
9
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
11
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
14
14
|
var _react2 = require("@emotion/react");
|
|
15
|
+
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
15
16
|
var _EmojiUtils = require("../../api/EmojiUtils");
|
|
16
17
|
var _constants = require("../../util/constants");
|
|
17
18
|
var _typeHelpers = require("../../util/type-helpers");
|
|
@@ -20,11 +21,11 @@ var _mouse = require("../../util/mouse");
|
|
|
20
21
|
var _DeleteButton = _interopRequireDefault(require("./DeleteButton"));
|
|
21
22
|
var _styles = require("./styles");
|
|
22
23
|
var _analytics = require("../../util/analytics");
|
|
23
|
-
var _browserSupport = require("../../util/browser-support");
|
|
24
|
-
var _useInView3 = require("../../
|
|
24
|
+
var _browserSupport = _interopRequireDefault(require("../../util/browser-support"));
|
|
25
|
+
var _useInView3 = require("../../hooks/useInView");
|
|
25
26
|
var _ufoExperiences = require("../../util/analytics/ufoExperiences");
|
|
26
|
-
var
|
|
27
|
-
|
|
27
|
+
var _DeletableEmojiTooltipContent = require("./DeletableEmojiTooltipContent");
|
|
28
|
+
var _excluded = ["emoji", "fitToHeight", "selected", "selectOnHover", "className", "showTooltip", "showDelete", "shouldBeInteractive", "tabIndex", "onSelected", "onMouseMove", "onFocus", "onDelete", "onLoadError", "onLoadSuccess", "disableLazyLoad", "autoWidth", "children", "type"];
|
|
28
29
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
30
31
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -41,17 +42,21 @@ var handleMouseDown = function handleMouseDown(props, event) {
|
|
|
41
42
|
onSelected((0, _typeHelpers.toEmojiId)(emoji), emoji, event);
|
|
42
43
|
}
|
|
43
44
|
};
|
|
44
|
-
var
|
|
45
|
-
|
|
46
|
-
if (event.target instanceof Element && event.target.getAttribute('aria-label') === _constants.deleteEmojiLabel) {
|
|
45
|
+
var handleKeyDown = function handleKeyDown(props, event) {
|
|
46
|
+
if (!_constants.EMOJI_KEYBOARD_KEYS_SUPPORTED.includes(event.key)) {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
var emoji = props.emoji,
|
|
50
|
-
onSelected = props.onSelected;
|
|
51
49
|
event.preventDefault();
|
|
52
|
-
|
|
50
|
+
event.stopPropagation();
|
|
51
|
+
var emoji = props.emoji,
|
|
52
|
+
onSelected = props.onSelected,
|
|
53
|
+
showDelete = props.showDelete;
|
|
54
|
+
if (onSelected && (event.key === _constants.KeyboardKeys.Enter || event.key === _constants.KeyboardKeys.Space)) {
|
|
53
55
|
onSelected((0, _typeHelpers.toEmojiId)(emoji), emoji, event);
|
|
54
56
|
}
|
|
57
|
+
if (showDelete && event.key === _constants.KeyboardKeys.Backspace) {
|
|
58
|
+
handleDelete(props, event);
|
|
59
|
+
}
|
|
55
60
|
};
|
|
56
61
|
var handleMouseMove = function handleMouseMove(props, event) {
|
|
57
62
|
var emoji = props.emoji,
|
|
@@ -96,21 +101,7 @@ var SpriteEmoji = function SpriteEmoji(props) {
|
|
|
96
101
|
fitToHeight = props.fitToHeight,
|
|
97
102
|
selected = props.selected,
|
|
98
103
|
selectOnHover = props.selectOnHover,
|
|
99
|
-
className = props.className
|
|
100
|
-
showTooltip = props.showTooltip,
|
|
101
|
-
_props$shouldBeIntera = props.shouldBeInteractive,
|
|
102
|
-
shouldBeInteractive = _props$shouldBeIntera === void 0 ? false : _props$shouldBeIntera,
|
|
103
|
-
tabIndex = props.tabIndex,
|
|
104
|
-
onSelected = props.onSelected,
|
|
105
|
-
onMouseMove = props.onMouseMove,
|
|
106
|
-
onFocus = props.onFocus,
|
|
107
|
-
onDelete = props.onDelete,
|
|
108
|
-
onLoadError = props.onLoadError,
|
|
109
|
-
onLoadSuccess = props.onLoadSuccess,
|
|
110
|
-
showDelete = props.showDelete,
|
|
111
|
-
disableLazyLoad = props.disableLazyLoad,
|
|
112
|
-
autoWidth = props.autoWidth,
|
|
113
|
-
other = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
104
|
+
className = props.className;
|
|
114
105
|
var representation = emoji.representation;
|
|
115
106
|
var sprite = representation.sprite;
|
|
116
107
|
var classes = "".concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(className ? className : '');
|
|
@@ -130,28 +121,10 @@ var SpriteEmoji = function SpriteEmoji(props) {
|
|
|
130
121
|
backgroundPosition: "".concat(xPositionInPercent, "% ").concat(yPositionInPercent, "%"),
|
|
131
122
|
backgroundSize: "".concat(sprite.column * 100, "% ").concat(sprite.row * 100, "%")
|
|
132
123
|
}, sizing);
|
|
133
|
-
return (0, _react2.jsx)(
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
role: shouldBeInteractive ? 'button' : 'img',
|
|
138
|
-
css: _styles.emojiContainer,
|
|
139
|
-
className: classes,
|
|
140
|
-
onKeyPress: function onKeyPress(event) {
|
|
141
|
-
return handleKeyPress(props, event);
|
|
142
|
-
},
|
|
143
|
-
onMouseDown: function onMouseDown(event) {
|
|
144
|
-
handleMouseDown(props, event);
|
|
145
|
-
},
|
|
146
|
-
onMouseEnter: function onMouseEnter(event) {
|
|
147
|
-
handleMouseMove(props, event);
|
|
148
|
-
},
|
|
149
|
-
onFocus: function onFocus(event) {
|
|
150
|
-
handleFocus(props, event);
|
|
151
|
-
},
|
|
152
|
-
"aria-label": emoji.shortName,
|
|
153
|
-
title: showTooltip ? emoji.shortName : ''
|
|
154
|
-
}, other), (0, _react2.jsx)("span", {
|
|
124
|
+
return (0, _react2.jsx)(EmojiNodeWrapper, (0, _extends2.default)({}, props, {
|
|
125
|
+
type: "sprite",
|
|
126
|
+
className: classes
|
|
127
|
+
}), (0, _react2.jsx)("span", {
|
|
155
128
|
className: _styles.emojiSprite,
|
|
156
129
|
style: style
|
|
157
130
|
}, "\xA0"));
|
|
@@ -165,20 +138,10 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
165
138
|
selected = props.selected,
|
|
166
139
|
selectOnHover = props.selectOnHover,
|
|
167
140
|
className = props.className,
|
|
168
|
-
showTooltip = props.showTooltip,
|
|
169
141
|
showDelete = props.showDelete,
|
|
170
|
-
_props$shouldBeIntera2 = props.shouldBeInteractive,
|
|
171
|
-
shouldBeInteractive = _props$shouldBeIntera2 === void 0 ? false : _props$shouldBeIntera2,
|
|
172
|
-
tabIndex = props.tabIndex,
|
|
173
|
-
onSelected = props.onSelected,
|
|
174
|
-
onMouseMove = props.onMouseMove,
|
|
175
|
-
onFocus = props.onFocus,
|
|
176
|
-
onDelete = props.onDelete,
|
|
177
|
-
onLoadError = props.onLoadError,
|
|
178
142
|
onLoadSuccess = props.onLoadSuccess,
|
|
179
143
|
disableLazyLoad = props.disableLazyLoad,
|
|
180
|
-
autoWidth = props.autoWidth
|
|
181
|
-
other = (0, _objectWithoutProperties2.default)(props, _excluded2);
|
|
144
|
+
autoWidth = props.autoWidth;
|
|
182
145
|
var _useInView = (0, _useInView3.useInView)({
|
|
183
146
|
triggerOnce: true
|
|
184
147
|
}),
|
|
@@ -186,7 +149,7 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
186
149
|
ref = _useInView2[0],
|
|
187
150
|
inView = _useInView2[1];
|
|
188
151
|
var ufoExp = (0, _analytics.sampledUfoRenderedEmoji)(emoji);
|
|
189
|
-
var classes = "".concat(_styles.emojiMainStyle, " ").concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(_styles.emojiImage, " ").concat(className ? className : '');
|
|
152
|
+
var classes = "".concat(_styles.emojiMainStyle, " ").concat(_styles.emojiNodeStyles, " ").concat(selected ? _styles.commonSelectedStyles : '', " ").concat(selectOnHover ? _styles.selectOnHoverStyles : '', " ").concat(_styles.emojiImage, " ").concat(className ? className : '', " ").concat(showDelete ? _styles.deletableEmoji : '');
|
|
190
153
|
var width;
|
|
191
154
|
var height;
|
|
192
155
|
var src;
|
|
@@ -200,14 +163,6 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
200
163
|
width = representation.width;
|
|
201
164
|
height = representation.height;
|
|
202
165
|
}
|
|
203
|
-
var deleteButton;
|
|
204
|
-
if (showDelete) {
|
|
205
|
-
deleteButton = (0, _react2.jsx)(_DeleteButton.default, {
|
|
206
|
-
onClick: function onClick(event) {
|
|
207
|
-
return handleDelete(props, event);
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
166
|
var sizing = {};
|
|
212
167
|
if (fitToHeight && width && height) {
|
|
213
168
|
// Presize image, to prevent reflow due to size changes after loading
|
|
@@ -241,7 +196,7 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
241
196
|
}
|
|
242
197
|
ufoExp.success({
|
|
243
198
|
metadata: {
|
|
244
|
-
IBSupported: _browserSupport.
|
|
199
|
+
IBSupported: _browserSupport.default.supportsIntersectionObserver
|
|
245
200
|
}
|
|
246
201
|
});
|
|
247
202
|
if (onLoadSuccess) {
|
|
@@ -276,15 +231,74 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
276
231
|
onError: onError,
|
|
277
232
|
onLoad: onLoad
|
|
278
233
|
}, sizing));
|
|
234
|
+
|
|
235
|
+
// show a tooltip for deletable emoji only on focus
|
|
236
|
+
if (showDelete) {
|
|
237
|
+
return (0, _react2.jsx)(_tooltip.default, {
|
|
238
|
+
content: (0, _react2.jsx)(_DeletableEmojiTooltipContent.DeletableEmojiTooltipContent, null),
|
|
239
|
+
position: "right-start",
|
|
240
|
+
tag: "span"
|
|
241
|
+
}, (0, _react2.jsx)(EmojiNodeWrapper, (0, _extends2.default)({}, props, {
|
|
242
|
+
"aria-labelledby": "screenreader-emoji-".concat(emoji.id),
|
|
243
|
+
type: "image",
|
|
244
|
+
className: classes,
|
|
245
|
+
ref: ref,
|
|
246
|
+
showTooltip: false // avoid showing both tooltip and title
|
|
247
|
+
,
|
|
248
|
+
onMouseOver: function onMouseOver(e) {
|
|
249
|
+
var _document$activeEleme;
|
|
250
|
+
// only disable tooltip when not on focus
|
|
251
|
+
if (!((_document$activeEleme = document.activeElement) !== null && _document$activeEleme !== void 0 && _document$activeEleme.contains(e.target))) {
|
|
252
|
+
e.stopPropagation();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}), emojiNode, (0, _react2.jsx)(_DeleteButton.default, {
|
|
256
|
+
onClick: function onClick(event) {
|
|
257
|
+
return handleDelete(props, event);
|
|
258
|
+
}
|
|
259
|
+
}), (0, _react2.jsx)(_DeletableEmojiTooltipContent.DeletableEmojiTooltipContentForScreenReader, {
|
|
260
|
+
emoji: emoji
|
|
261
|
+
})));
|
|
262
|
+
}
|
|
263
|
+
return (0, _react2.jsx)(EmojiNodeWrapper, (0, _extends2.default)({}, props, {
|
|
264
|
+
type: "image",
|
|
265
|
+
className: classes,
|
|
266
|
+
ref: ref
|
|
267
|
+
}), emojiNode);
|
|
268
|
+
};
|
|
269
|
+
exports.ImageEmoji = ImageEmoji;
|
|
270
|
+
var EmojiNodeWrapper = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
271
|
+
var emoji = props.emoji,
|
|
272
|
+
fitToHeight = props.fitToHeight,
|
|
273
|
+
selected = props.selected,
|
|
274
|
+
selectOnHover = props.selectOnHover,
|
|
275
|
+
className = props.className,
|
|
276
|
+
showTooltip = props.showTooltip,
|
|
277
|
+
showDelete = props.showDelete,
|
|
278
|
+
_props$shouldBeIntera = props.shouldBeInteractive,
|
|
279
|
+
shouldBeInteractive = _props$shouldBeIntera === void 0 ? false : _props$shouldBeIntera,
|
|
280
|
+
tabIndex = props.tabIndex,
|
|
281
|
+
onSelected = props.onSelected,
|
|
282
|
+
onMouseMove = props.onMouseMove,
|
|
283
|
+
onFocus = props.onFocus,
|
|
284
|
+
onDelete = props.onDelete,
|
|
285
|
+
onLoadError = props.onLoadError,
|
|
286
|
+
onLoadSuccess = props.onLoadSuccess,
|
|
287
|
+
disableLazyLoad = props.disableLazyLoad,
|
|
288
|
+
autoWidth = props.autoWidth,
|
|
289
|
+
children = props.children,
|
|
290
|
+
type = props.type,
|
|
291
|
+
other = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
279
292
|
return (0, _react2.jsx)("span", (0, _extends2.default)({
|
|
280
|
-
|
|
281
|
-
"data-
|
|
282
|
-
|
|
293
|
+
ref: ref,
|
|
294
|
+
"data-testid": "".concat(type, "-emoji-").concat(emoji.shortName),
|
|
295
|
+
"data-emoji-type": type,
|
|
283
296
|
tabIndex: shouldBeInteractive ? tabIndex || 0 : undefined,
|
|
284
297
|
role: shouldBeInteractive ? 'button' : 'img',
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
298
|
+
css: type === 'sprite' ? _styles.emojiSpriteContainer : _styles.emojiImageContainer,
|
|
299
|
+
className: className,
|
|
300
|
+
onKeyDown: function onKeyDown(event) {
|
|
301
|
+
return handleKeyDown(props, event);
|
|
288
302
|
},
|
|
289
303
|
onMouseDown: function onMouseDown(event) {
|
|
290
304
|
handleMouseDown(props, event);
|
|
@@ -296,11 +310,10 @@ var ImageEmoji = function ImageEmoji(props) {
|
|
|
296
310
|
handleFocus(props, event);
|
|
297
311
|
},
|
|
298
312
|
"aria-label": emoji.shortName,
|
|
299
|
-
title: showTooltip ? emoji.shortName :
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
exports.ImageEmoji = ImageEmoji;
|
|
313
|
+
title: showTooltip ? emoji.shortName : undefined // TODO: COLLAB-2351 - use @atlaskit/Tooltip in future for non-deletable emoji if enabled showTooltip
|
|
314
|
+
}, other), children);
|
|
315
|
+
});
|
|
316
|
+
exports.EmojiNodeWrapper = EmojiNodeWrapper;
|
|
304
317
|
var Emoji = function Emoji(props) {
|
|
305
318
|
var emoji = props.emoji;
|
|
306
319
|
// start emoji rendered experience, it may have already started earlier in ResourcedEmoji or CachingEmoji
|
|
@@ -64,14 +64,15 @@ var TonesWrapper = function TonesWrapper(props) {
|
|
|
64
64
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
65
65
|
focusTonePreviewButton = _useState2[0],
|
|
66
66
|
setFocusTonePreviewButton = _useState2[1];
|
|
67
|
-
(0, _react.
|
|
68
|
-
if (focusTonePreviewButton &&
|
|
69
|
-
|
|
67
|
+
(0, _react.useLayoutEffect)(function () {
|
|
68
|
+
if (focusTonePreviewButton && !showToneSelector) {
|
|
69
|
+
var _tonePreviewButtonRef;
|
|
70
|
+
(_tonePreviewButtonRef = tonePreviewButtonRef.current) === null || _tonePreviewButtonRef === void 0 ? void 0 : _tonePreviewButtonRef.focus();
|
|
70
71
|
}
|
|
71
72
|
return function () {
|
|
72
73
|
setFocusTonePreviewButton(false);
|
|
73
74
|
};
|
|
74
|
-
});
|
|
75
|
+
}, [focusTonePreviewButton, showToneSelector]);
|
|
75
76
|
var onToneCloseHandler = function onToneCloseHandler() {
|
|
76
77
|
var onToneClose = props.onToneClose;
|
|
77
78
|
onToneClose();
|
|
@@ -174,10 +175,11 @@ var EmojiActions = function EmojiActions(props) {
|
|
|
174
175
|
onMouseLeave: onMouseLeaveHandler
|
|
175
176
|
}, (0, _react2.jsx)("div", {
|
|
176
177
|
css: _styles.emojiActionsWrapper
|
|
177
|
-
},
|
|
178
|
+
}, (0, _react2.jsx)(_EmojiPickerListSearch.EmojiPickerListSearch, {
|
|
178
179
|
onChange: onChange,
|
|
179
180
|
query: query,
|
|
180
|
-
resultsCount: resultsCount
|
|
181
|
+
resultsCount: resultsCount,
|
|
182
|
+
isVisible: !showToneSelector
|
|
181
183
|
}), (0, _react2.jsx)(TonesWrapper, (0, _extends2.default)({}, props, {
|
|
182
184
|
onToneOpen: onToneOpenHandler,
|
|
183
185
|
onToneClose: onToneCloseHandler,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
@@ -17,15 +18,20 @@ var _react = require("react");
|
|
|
17
18
|
var _react2 = require("@emotion/react");
|
|
18
19
|
var _reactIntlNext = require("react-intl-next");
|
|
19
20
|
var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
|
|
21
|
+
var _reactFocusLock = _interopRequireDefault(require("react-focus-lock"));
|
|
20
22
|
var _i18n = require("../i18n");
|
|
21
23
|
var _CachingEmoji = _interopRequireDefault(require("./CachingEmoji"));
|
|
22
|
-
var _EmojiErrorMessage =
|
|
24
|
+
var _EmojiErrorMessage = _interopRequireWildcard(require("./EmojiErrorMessage"));
|
|
23
25
|
var _RetryableButton = _interopRequireDefault(require("./RetryableButton"));
|
|
24
26
|
var _styles = require("./styles");
|
|
27
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
30
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
26
31
|
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; } }
|
|
27
32
|
var emojiDeletePreviewTestId = 'emoji-delete-preview';
|
|
28
33
|
exports.emojiDeletePreviewTestId = emojiDeletePreviewTestId;
|
|
34
|
+
var deleteEmojiLabelId = 'fabric.emoji.delete.label.id';
|
|
29
35
|
var EmojiDeletePreview = /*#__PURE__*/function (_Component) {
|
|
30
36
|
(0, _inherits2.default)(EmojiDeletePreview, _Component);
|
|
31
37
|
var _super = _createSuper(EmojiDeletePreview);
|
|
@@ -82,12 +88,16 @@ var EmojiDeletePreview = /*#__PURE__*/function (_Component) {
|
|
|
82
88
|
loading = _this$state.loading,
|
|
83
89
|
error = _this$state.error;
|
|
84
90
|
var formatMessage = intl.formatMessage;
|
|
85
|
-
return (0, _react2.jsx)(
|
|
91
|
+
return (0, _react2.jsx)(_reactFocusLock.default, {
|
|
92
|
+
noFocusGuards: true
|
|
93
|
+
}, (0, _react2.jsx)("div", {
|
|
86
94
|
css: _styles.deletePreview,
|
|
87
95
|
"data-testid": emojiDeletePreviewTestId
|
|
88
96
|
}, (0, _react2.jsx)("div", {
|
|
89
97
|
css: _styles.deleteText
|
|
90
|
-
}, (0, _react2.jsx)("
|
|
98
|
+
}, (0, _react2.jsx)("h2", {
|
|
99
|
+
css: _styles.headingH5
|
|
100
|
+
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.deleteEmojiTitle)), (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _i18n.messages.deleteEmojiDescription, {
|
|
91
101
|
values: {
|
|
92
102
|
emojiShortName: emoji.shortName
|
|
93
103
|
}
|
|
@@ -101,17 +111,20 @@ var EmojiDeletePreview = /*#__PURE__*/function (_Component) {
|
|
|
101
111
|
message: formatMessage(_i18n.messages.deleteEmojiFailed),
|
|
102
112
|
messageStyles: _styles.emojiDeleteErrorMessage,
|
|
103
113
|
tooltip: true
|
|
104
|
-
}) : null : null, (0, _react2.jsx)(
|
|
114
|
+
}) : null : null, (0, _react2.jsx)(_visuallyHidden.default, {
|
|
115
|
+
id: deleteEmojiLabelId
|
|
116
|
+
}, formatMessage(_i18n.messages.deleteEmojiLabel)), (0, _react2.jsx)(_RetryableButton.default, {
|
|
105
117
|
label: formatMessage(_i18n.messages.deleteEmojiLabel),
|
|
106
118
|
onSubmit: this.onSubmit,
|
|
107
119
|
appearance: "danger",
|
|
108
120
|
loading: loading,
|
|
109
|
-
error: error
|
|
121
|
+
error: error,
|
|
122
|
+
ariaLabelledBy: "".concat(_EmojiErrorMessage.emojiErrorScreenreaderTestId, " ").concat(deleteEmojiLabelId)
|
|
110
123
|
}), (0, _react2.jsx)(_customThemeButton.default, {
|
|
111
124
|
appearance: "subtle",
|
|
112
125
|
onClick: this.onCancel,
|
|
113
126
|
css: _styles.cancelButton
|
|
114
|
-
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.cancelLabel)))));
|
|
127
|
+
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.cancelLabel))))));
|
|
115
128
|
}
|
|
116
129
|
}]);
|
|
117
130
|
return EmojiDeletePreview;
|
|
@@ -4,14 +4,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.emojiErrorMessageTooltipTestId = exports.emojiErrorMessageTestId = exports.emojiErrorIconTestId = exports.default = void 0;
|
|
7
|
+
exports.emojiErrorScreenreaderTestId = exports.emojiErrorMessageTooltipTestId = exports.emojiErrorMessageTestId = exports.emojiErrorIconTestId = exports.default = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _react2 = require("@emotion/react");
|
|
10
10
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
11
11
|
var _error = _interopRequireDefault(require("@atlaskit/icon/glyph/error"));
|
|
12
12
|
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
13
|
+
var _reactIntlNext = require("react-intl-next");
|
|
14
|
+
var _i18n = require("../i18n");
|
|
13
15
|
/** @jsx jsx */
|
|
14
16
|
|
|
17
|
+
var emojiErrorScreenreaderTestId = 'emoji-error-screenreader-message';
|
|
18
|
+
exports.emojiErrorScreenreaderTestId = emojiErrorScreenreaderTestId;
|
|
15
19
|
var emojiErrorMessageTestId = 'emoji-error-message';
|
|
16
20
|
exports.emojiErrorMessageTestId = emojiErrorMessageTestId;
|
|
17
21
|
var emojiErrorMessageTooltipTestId = 'emoji-error-message-tooltip';
|
|
@@ -22,6 +26,8 @@ var EmojiErrorMessage = function EmojiErrorMessage(props) {
|
|
|
22
26
|
var messageStyles = props.messageStyles,
|
|
23
27
|
message = props.message,
|
|
24
28
|
tooltip = props.tooltip;
|
|
29
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
30
|
+
formatMessage = _useIntl.formatMessage;
|
|
25
31
|
var visualContent = tooltip ? (0, _react2.jsx)("div", {
|
|
26
32
|
css: messageStyles,
|
|
27
33
|
"data-testid": emojiErrorMessageTestId
|
|
@@ -30,19 +36,21 @@ var EmojiErrorMessage = function EmojiErrorMessage(props) {
|
|
|
30
36
|
position: "top",
|
|
31
37
|
testId: emojiErrorMessageTooltipTestId
|
|
32
38
|
}, (0, _react2.jsx)(_error.default, {
|
|
33
|
-
label:
|
|
39
|
+
label: formatMessage(_i18n.messages.error),
|
|
34
40
|
size: "medium",
|
|
35
41
|
testId: emojiErrorIconTestId
|
|
36
42
|
}))) : (0, _react2.jsx)("div", {
|
|
37
43
|
css: messageStyles,
|
|
38
44
|
"data-testid": emojiErrorMessageTestId
|
|
39
45
|
}, (0, _react2.jsx)(_error.default, {
|
|
40
|
-
label:
|
|
46
|
+
label: formatMessage(_i18n.messages.error),
|
|
41
47
|
size: "small"
|
|
42
48
|
}), message);
|
|
43
49
|
return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_visuallyHidden.default, {
|
|
44
|
-
|
|
45
|
-
},
|
|
50
|
+
id: emojiErrorScreenreaderTestId
|
|
51
|
+
}, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _i18n.messages.error, function (errMsg) {
|
|
52
|
+
return (0, _react2.jsx)("span", null, errMsg, " ", message, ".");
|
|
53
|
+
})), visualContent);
|
|
46
54
|
};
|
|
47
55
|
var _default = EmojiErrorMessage;
|
|
48
56
|
exports.default = _default;
|
|
@@ -28,6 +28,7 @@ var handleKeyPress = function handleKeyPress(props, event) {
|
|
|
28
28
|
if (_constants.TONESELECTOR_KEYBOARD_KEYS_SUPPORTED.includes(event.key)) {
|
|
29
29
|
var onSelected = props.onSelected;
|
|
30
30
|
event.preventDefault();
|
|
31
|
+
event.stopPropagation();
|
|
31
32
|
if (onSelected) {
|
|
32
33
|
onSelected();
|
|
33
34
|
}
|