@atlaskit/emoji 64.2.0 → 64.4.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 +27 -0
- package/dist/cjs/api/EmojiResource.js +36 -1
- package/dist/cjs/api/media/SiteEmojiResource.js +10 -2
- package/dist/cjs/components/common/CachingEmoji.js +38 -12
- package/dist/cjs/components/common/DeleteButton.js +9 -13
- package/dist/cjs/components/common/Emoji.js +25 -36
- package/dist/cjs/components/common/EmojiActions.js +26 -31
- package/dist/cjs/components/common/EmojiButton.js +7 -7
- package/dist/cjs/components/common/EmojiDeletePreview.js +20 -26
- package/dist/cjs/components/common/EmojiErrorMessage.js +10 -14
- package/dist/cjs/components/common/EmojiPlaceholder.js +5 -12
- package/dist/cjs/components/common/EmojiPreview.js +20 -40
- package/dist/cjs/components/common/EmojiPreviewComponent.js +34 -0
- package/dist/cjs/components/common/EmojiUploadPicker.js +26 -24
- package/dist/cjs/components/common/EmojiUploadPreview.js +22 -28
- package/dist/cjs/components/common/RecordSelectionDefault.js +8 -2
- package/dist/cjs/components/common/ResourcedEmoji.js +25 -9
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +33 -11
- package/dist/cjs/components/common/RetryableButton.js +12 -18
- package/dist/cjs/components/common/Scrollable.js +5 -10
- package/dist/cjs/components/common/UfoErrorBoundary.js +52 -0
- package/dist/cjs/components/common/UploadEmoji.js +8 -0
- package/dist/cjs/components/common/styles.js +210 -266
- package/dist/cjs/components/picker/CategorySelector.js +13 -12
- package/dist/cjs/components/picker/EmojiPicker.js +17 -6
- package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +8 -14
- package/dist/cjs/components/picker/EmojiPickerComponent.js +51 -30
- package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +8 -12
- package/dist/cjs/components/picker/EmojiPickerFooter.js +8 -14
- package/dist/cjs/components/picker/EmojiPickerList.js +28 -9
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +10 -8
- package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +9 -15
- package/dist/cjs/components/picker/styles.js +113 -161
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +40 -24
- package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +10 -13
- package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +17 -22
- package/dist/cjs/components/typeahead/styles.js +17 -19
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +22 -15
- package/dist/cjs/components/uploader/styles.js +4 -4
- package/dist/cjs/index.js +9 -3
- package/dist/cjs/types.js +12 -2
- package/dist/cjs/util/{analytics.js → analytics/analytics.js} +12 -10
- package/dist/cjs/util/analytics/index.js +205 -0
- package/dist/cjs/util/analytics/samplingUfo.js +278 -0
- package/dist/cjs/util/analytics/ufoExperiences.js +46 -0
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +49 -0
- package/dist/cjs/util/constants.js +10 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +28 -1
- package/dist/es2019/api/media/SiteEmojiResource.js +10 -2
- package/dist/es2019/components/common/CachingEmoji.js +34 -12
- package/dist/es2019/components/common/DeleteButton.js +8 -6
- package/dist/es2019/components/common/Emoji.js +27 -36
- package/dist/es2019/components/common/EmojiActions.js +26 -24
- package/dist/es2019/components/common/EmojiButton.js +6 -6
- package/dist/es2019/components/common/EmojiDeletePreview.js +20 -20
- package/dist/es2019/components/common/EmojiErrorMessage.js +9 -8
- package/dist/es2019/components/common/EmojiPlaceholder.js +5 -8
- package/dist/es2019/components/common/EmojiPreview.js +19 -35
- package/dist/es2019/components/common/EmojiPreviewComponent.js +21 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +25 -22
- package/dist/es2019/components/common/EmojiUploadPreview.js +22 -22
- package/dist/es2019/components/common/RecordSelectionDefault.js +9 -2
- package/dist/es2019/components/common/ResourcedEmoji.js +22 -5
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +32 -11
- package/dist/es2019/components/common/RetryableButton.js +10 -11
- package/dist/es2019/components/common/Scrollable.js +6 -10
- package/dist/es2019/components/common/UfoErrorBoundary.js +11 -0
- package/dist/es2019/components/common/UploadEmoji.js +4 -0
- package/dist/es2019/components/common/styles.js +195 -262
- package/dist/es2019/components/picker/CategorySelector.js +15 -12
- package/dist/es2019/components/picker/EmojiPicker.js +15 -6
- package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +8 -8
- package/dist/es2019/components/picker/EmojiPickerComponent.js +46 -22
- package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +8 -7
- package/dist/es2019/components/picker/EmojiPickerFooter.js +8 -8
- package/dist/es2019/components/picker/EmojiPickerList.js +28 -8
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +11 -8
- package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +10 -8
- package/dist/es2019/components/picker/styles.js +112 -160
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +35 -17
- package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +12 -13
- package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +18 -19
- package/dist/es2019/components/typeahead/styles.js +14 -15
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +19 -9
- package/dist/es2019/components/uploader/styles.js +4 -4
- package/dist/es2019/index.js +4 -3
- package/dist/es2019/types.js +10 -1
- package/dist/es2019/util/{analytics.js → analytics/analytics.js} +17 -11
- package/dist/es2019/util/analytics/index.js +4 -0
- package/dist/es2019/util/analytics/samplingUfo.js +147 -0
- package/dist/es2019/util/analytics/ufoExperiences.js +34 -0
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +39 -0
- package/dist/es2019/util/constants.js +5 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +32 -1
- package/dist/esm/api/media/SiteEmojiResource.js +10 -2
- package/dist/esm/components/common/CachingEmoji.js +36 -12
- package/dist/esm/components/common/DeleteButton.js +8 -6
- package/dist/esm/components/common/Emoji.js +26 -29
- package/dist/esm/components/common/EmojiActions.js +26 -25
- package/dist/esm/components/common/EmojiButton.js +6 -6
- package/dist/esm/components/common/EmojiDeletePreview.js +19 -20
- package/dist/esm/components/common/EmojiErrorMessage.js +9 -8
- package/dist/esm/components/common/EmojiPlaceholder.js +5 -8
- package/dist/esm/components/common/EmojiPreview.js +19 -33
- package/dist/esm/components/common/EmojiPreviewComponent.js +20 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +27 -25
- package/dist/esm/components/common/EmojiUploadPreview.js +21 -22
- package/dist/esm/components/common/RecordSelectionDefault.js +6 -3
- package/dist/esm/components/common/ResourcedEmoji.js +22 -9
- package/dist/esm/components/common/ResourcedEmojiComponent.js +32 -10
- package/dist/esm/components/common/RetryableButton.js +11 -12
- package/dist/esm/components/common/Scrollable.js +6 -10
- package/dist/esm/components/common/UfoErrorBoundary.js +38 -0
- package/dist/esm/components/common/UploadEmoji.js +4 -0
- package/dist/esm/components/common/styles.js +192 -242
- package/dist/esm/components/picker/CategorySelector.js +14 -12
- package/dist/esm/components/picker/EmojiPicker.js +13 -6
- package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +8 -8
- package/dist/esm/components/picker/EmojiPickerComponent.js +47 -22
- package/dist/esm/components/picker/EmojiPickerEmojiRow.js +8 -7
- package/dist/esm/components/picker/EmojiPickerFooter.js +8 -8
- package/dist/esm/components/picker/EmojiPickerList.js +29 -8
- package/dist/esm/components/picker/EmojiPickerListSearch.js +10 -8
- package/dist/esm/components/picker/EmojiPickerVirtualItems.js +9 -8
- package/dist/esm/components/picker/styles.js +108 -149
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +35 -17
- package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +11 -13
- package/dist/esm/components/typeahead/EmojiTypeAheadList.js +17 -19
- package/dist/esm/components/typeahead/styles.js +14 -14
- package/dist/esm/components/uploader/EmojiUploadComponent.js +19 -9
- package/dist/esm/components/uploader/styles.js +4 -4
- package/dist/esm/index.js +4 -3
- package/dist/esm/types.js +10 -1
- package/dist/esm/util/{analytics.js → analytics/analytics.js} +9 -7
- package/dist/esm/util/analytics/index.js +4 -0
- package/dist/esm/util/analytics/samplingUfo.js +259 -0
- package/dist/esm/util/analytics/ufoExperiences.js +34 -0
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +39 -0
- package/dist/esm/util/constants.js +5 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/api/EmojiResource.d.ts +1 -0
- package/dist/types/components/common/CachingEmoji.d.ts +8 -6
- package/dist/types/components/common/EmojiActions.d.ts +2 -3
- package/dist/types/components/common/EmojiDeletePreview.d.ts +3 -3
- package/dist/types/components/common/EmojiErrorMessage.d.ts +2 -1
- package/dist/types/components/common/EmojiPreview.d.ts +2 -3
- package/dist/types/components/common/EmojiPreviewComponent.d.ts +7 -0
- package/dist/types/components/common/EmojiUploadPreview.d.ts +3 -3
- package/dist/types/components/common/ResourcedEmoji.d.ts +2 -0
- package/dist/types/components/common/ResourcedEmojiComponent.d.ts +6 -0
- package/dist/types/components/common/RetryableButton.d.ts +0 -2
- package/dist/types/components/common/UfoErrorBoundary.d.ts +8 -0
- package/dist/types/components/common/styles.d.ts +44 -44
- package/dist/types/components/picker/EmojiPicker.d.ts +2 -3
- package/dist/types/components/picker/EmojiPickerComponent.d.ts +6 -0
- package/dist/types/components/picker/EmojiPickerList.d.ts +10 -0
- package/dist/types/components/picker/styles.d.ts +17 -18
- package/dist/types/components/typeahead/EmojiTypeAheadComponent.d.ts +6 -0
- package/dist/types/components/typeahead/styles.d.ts +8 -7
- package/dist/types/components/uploader/EmojiUploadComponent.d.ts +1 -0
- package/dist/types/components/uploader/styles.d.ts +2 -2
- package/dist/types/index.d.ts +3 -3
- package/dist/types/types.d.ts +6 -0
- package/dist/types/util/{analytics.d.ts → analytics/analytics.d.ts} +7 -7
- package/dist/types/util/analytics/index.d.ts +6 -0
- package/dist/types/util/analytics/samplingUfo.d.ts +31 -0
- package/dist/types/util/analytics/ufoExperiences.d.ts +12 -0
- package/dist/types/util/analytics/useSampledUFOComponentExperience.d.ts +8 -0
- package/dist/types/util/constants.d.ts +2 -0
- package/package.json +10 -9
- package/dist/cjs/components/picker/EmojiPickerPreview.js +0 -87
- package/dist/cjs/context/EmojiContext.js +0 -11
- package/dist/cjs/context/EmojiContextProvider.js +0 -22
- package/dist/es2019/components/picker/EmojiPickerPreview.js +0 -43
- package/dist/es2019/context/EmojiContext.js +0 -2
- package/dist/es2019/context/EmojiContextProvider.js +0 -10
- package/dist/esm/components/picker/EmojiPickerPreview.js +0 -67
- package/dist/esm/context/EmojiContext.js +0 -2
- package/dist/esm/context/EmojiContextProvider.js +0 -9
- package/dist/types/components/picker/EmojiPickerPreview.d.ts +0 -9
- package/dist/types/context/EmojiContext.d.ts +0 -4
- package/dist/types/context/EmojiContextProvider.d.ts +0 -7
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
/** @jsx jsx */
|
|
4
|
+
import { jsx } from '@emotion/core';
|
|
3
5
|
import React from 'react';
|
|
4
6
|
import { shouldUseAltRepresentation } from '../../api/EmojiUtils';
|
|
5
7
|
import { deleteEmojiLabel } from '../../util/constants';
|
|
6
8
|
import { isImageRepresentation, isMediaRepresentation, isSpriteRepresentation, toEmojiId } from '../../util/type-helpers';
|
|
7
9
|
import { leftClick } from '../../util/mouse';
|
|
8
|
-
import * as styles from './styles';
|
|
9
10
|
import DeleteButton from './DeleteButton';
|
|
11
|
+
import { emojiContainer, emojiNodeStyles, commonSelectedStyles, selectOnHoverStyles, emojiSprite, emojiMainStyle, emojiStyles, emojiImage } from './styles';
|
|
12
|
+
import { sampledUfoRenderedEmoji } from '../../util/analytics';
|
|
10
13
|
|
|
11
14
|
const handleMouseDown = (props, event) => {
|
|
12
15
|
// Clicked emoji delete button
|
|
@@ -94,23 +97,15 @@ const renderAsSprite = props => {
|
|
|
94
97
|
} = props;
|
|
95
98
|
const representation = emoji.representation;
|
|
96
99
|
const sprite = representation.sprite;
|
|
97
|
-
const classes = {
|
|
98
|
-
[styles.emojiContainer]: true,
|
|
99
|
-
[styles.emojiNode]: true,
|
|
100
|
-
[styles.selected]: selected,
|
|
101
|
-
[styles.selectOnHover]: selectOnHover
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
if (className) {
|
|
105
|
-
classes[className] = true;
|
|
106
|
-
}
|
|
107
|
-
|
|
100
|
+
const classes = `${emojiNodeStyles} ${selected ? commonSelectedStyles : ''} ${selectOnHover ? selectOnHoverStyles : ''} ${className ? className : ''}`;
|
|
108
101
|
let sizing = {};
|
|
109
102
|
|
|
110
103
|
if (fitToHeight) {
|
|
111
104
|
sizing = {
|
|
112
105
|
width: `${fitToHeight}px`,
|
|
113
|
-
height: `${fitToHeight}px
|
|
106
|
+
height: `${fitToHeight}px`,
|
|
107
|
+
minHeight: `${fitToHeight}px`,
|
|
108
|
+
minWidth: `${fitToHeight}px`
|
|
114
109
|
};
|
|
115
110
|
}
|
|
116
111
|
|
|
@@ -122,14 +117,15 @@ const renderAsSprite = props => {
|
|
|
122
117
|
backgroundSize: `${sprite.column * 100}% ${sprite.row * 100}%`,
|
|
123
118
|
...sizing
|
|
124
119
|
};
|
|
125
|
-
const emojiNode =
|
|
126
|
-
className:
|
|
120
|
+
const emojiNode = jsx("span", {
|
|
121
|
+
className: emojiSprite,
|
|
127
122
|
style: style
|
|
128
123
|
}, "\xA0");
|
|
129
|
-
return
|
|
124
|
+
return jsx("span", {
|
|
130
125
|
tabIndex: shouldBeInteractive ? 0 : undefined,
|
|
131
126
|
role: shouldBeInteractive ? 'button' : undefined,
|
|
132
|
-
|
|
127
|
+
css: emojiContainer,
|
|
128
|
+
className: classes,
|
|
133
129
|
onKeyPress: event => handleKeyPress(props, event),
|
|
134
130
|
onMouseDown: event => {
|
|
135
131
|
handleMouseDown(props, event);
|
|
@@ -154,18 +150,7 @@ const renderAsImage = props => {
|
|
|
154
150
|
showDelete,
|
|
155
151
|
shouldBeInteractive
|
|
156
152
|
} = props;
|
|
157
|
-
const classes = {
|
|
158
|
-
[styles.emoji]: true,
|
|
159
|
-
[styles.emojiNode]: true,
|
|
160
|
-
[styles.selected]: selected,
|
|
161
|
-
[styles.selectOnHover]: selectOnHover,
|
|
162
|
-
[styles.emojiImage]: true
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
if (className) {
|
|
166
|
-
classes[className] = true;
|
|
167
|
-
}
|
|
168
|
-
|
|
153
|
+
const classes = `${emojiMainStyle} ${emojiNodeStyles} ${selected ? commonSelectedStyles : ''} ${selectOnHover ? selectOnHoverStyles : ''} ${emojiImage} ${className ? className : ''}`;
|
|
169
154
|
let width;
|
|
170
155
|
let height;
|
|
171
156
|
let src;
|
|
@@ -184,7 +169,7 @@ const renderAsImage = props => {
|
|
|
184
169
|
let deleteButton;
|
|
185
170
|
|
|
186
171
|
if (showDelete) {
|
|
187
|
-
deleteButton =
|
|
172
|
+
deleteButton = jsx(DeleteButton, {
|
|
188
173
|
onClick: event => handleDelete(props, event)
|
|
189
174
|
});
|
|
190
175
|
}
|
|
@@ -201,6 +186,10 @@ const renderAsImage = props => {
|
|
|
201
186
|
|
|
202
187
|
const onError = event => {
|
|
203
188
|
handleImageError(props, event);
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const onLoad = () => {
|
|
192
|
+
sampledUfoRenderedEmoji(emoji).success();
|
|
204
193
|
}; // Pass src attribute as key to force React to rerender img node since browser does not
|
|
205
194
|
// change preview image until loaded
|
|
206
195
|
// We currently have the following error: property 'loading' does not exist on type 'DetailedHTMLProps<ImgHTMLAttributes, HTMLImageElement>'
|
|
@@ -208,7 +197,7 @@ const renderAsImage = props => {
|
|
|
208
197
|
// TODO: remove @ts-ignore for the <img> below when the @types/react will be bumped from v16.8.0 to v16.9.20 or higher.
|
|
209
198
|
|
|
210
199
|
|
|
211
|
-
const emojiNode =
|
|
200
|
+
const emojiNode = jsx("img", _extends({
|
|
212
201
|
// @ts-ignore
|
|
213
202
|
loading: "lazy",
|
|
214
203
|
src: src,
|
|
@@ -221,12 +210,14 @@ const renderAsImage = props => {
|
|
|
221
210
|
style: {
|
|
222
211
|
visibility: 'visible'
|
|
223
212
|
},
|
|
224
|
-
onError: onError
|
|
213
|
+
onError: onError,
|
|
214
|
+
onLoad: onLoad
|
|
225
215
|
}, sizing));
|
|
226
|
-
return
|
|
216
|
+
return jsx("span", {
|
|
217
|
+
css: emojiStyles,
|
|
227
218
|
tabIndex: shouldBeInteractive ? 0 : undefined,
|
|
228
219
|
role: shouldBeInteractive ? 'button' : undefined,
|
|
229
|
-
className:
|
|
220
|
+
className: classes,
|
|
230
221
|
onKeyPress: event => handleKeyPress(props, event),
|
|
231
222
|
onMouseDown: event => {
|
|
232
223
|
handleMouseDown(props, event);
|
|
@@ -242,7 +233,7 @@ const renderAsImage = props => {
|
|
|
242
233
|
export const Emoji = props => {
|
|
243
234
|
const {
|
|
244
235
|
emoji
|
|
245
|
-
} = props;
|
|
236
|
+
} = props; // TODO: We always prefer render as image as having accessibility issues with sprite representation
|
|
246
237
|
|
|
247
238
|
if (isSpriteRepresentation(emoji.representation)) {
|
|
248
239
|
return renderAsSprite(props);
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
/** @jsx jsx */
|
|
4
|
+
import { jsx } from '@emotion/core';
|
|
4
5
|
import { PureComponent } from 'react';
|
|
5
6
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
6
7
|
import EmojiDeletePreview from '../common/EmojiDeletePreview';
|
|
7
8
|
import EmojiUploadPicker from '../common/EmojiUploadPicker';
|
|
8
|
-
import * as styles from './styles';
|
|
9
|
-
import * as footerStyles from '../picker/styles';
|
|
10
9
|
import EmojiPickerListSearch from '../picker/EmojiPickerListSearch';
|
|
11
10
|
import ToneSelector from './ToneSelector';
|
|
12
11
|
import EmojiButton from './EmojiButton';
|
|
@@ -14,6 +13,8 @@ import { messages } from '../i18n';
|
|
|
14
13
|
import AkButton from '@atlaskit/button/standard-button';
|
|
15
14
|
import AddIcon from '@atlaskit/icon/glyph/add';
|
|
16
15
|
import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
|
|
16
|
+
import { addCustomEmoji, addCustomEmojiButton, emojiPickerAddEmoji, emojiToneSelectorContainer } from './styles';
|
|
17
|
+
import { emojiActionsContainerWithBottomShadow, emojiPickerFooter } from '../picker/styles';
|
|
17
18
|
export class EmojiActions extends PureComponent {
|
|
18
19
|
constructor(...args) {
|
|
19
20
|
super(...args);
|
|
@@ -76,13 +77,13 @@ export class EmojiActions extends PureComponent {
|
|
|
76
77
|
previewEmoji = previewEmoji.skinVariations[(selectedTone || 1) - 1];
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
}, this.state.selectingTone &&
|
|
80
|
+
return jsx("div", {
|
|
81
|
+
css: emojiToneSelectorContainer
|
|
82
|
+
}, this.state.selectingTone && jsx(ToneSelector, {
|
|
82
83
|
emoji: toneEmoji,
|
|
83
84
|
onToneSelected: this.onToneSelected,
|
|
84
85
|
previewEmojiId: previewEmoji.id
|
|
85
|
-
}),
|
|
86
|
+
}), jsx(EmojiButton, {
|
|
86
87
|
ariaExpanded: this.state.selectingTone,
|
|
87
88
|
emoji: previewEmoji,
|
|
88
89
|
selectOnHover: true,
|
|
@@ -108,16 +109,17 @@ export class EmojiActions extends PureComponent {
|
|
|
108
109
|
return null;
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
return
|
|
112
|
-
|
|
113
|
-
},
|
|
112
|
+
return jsx("div", {
|
|
113
|
+
css: addCustomEmoji
|
|
114
|
+
}, jsx(FormattedMessage, messages.addCustomEmojiLabel, label => jsx(AkButton, {
|
|
114
115
|
onClick: onOpenUpload,
|
|
115
|
-
iconBefore:
|
|
116
|
+
iconBefore: jsx(AddIcon, {
|
|
116
117
|
label: formatMessage(messages.addCustomEmojiLabel),
|
|
117
118
|
size: "small"
|
|
118
119
|
}),
|
|
119
120
|
appearance: "subtle",
|
|
120
|
-
|
|
121
|
+
css: addCustomEmojiButton,
|
|
122
|
+
className: emojiPickerAddEmoji
|
|
121
123
|
}, label)));
|
|
122
124
|
}
|
|
123
125
|
|
|
@@ -135,12 +137,12 @@ export class EmojiActions extends PureComponent {
|
|
|
135
137
|
onChange,
|
|
136
138
|
query
|
|
137
139
|
} = this.props;
|
|
138
|
-
const previewFooterClassnames =
|
|
140
|
+
const previewFooterClassnames = [emojiPickerFooter, emojiActionsContainerWithBottomShadow];
|
|
139
141
|
|
|
140
142
|
if (uploading) {
|
|
141
|
-
return
|
|
142
|
-
|
|
143
|
-
},
|
|
143
|
+
return jsx("div", {
|
|
144
|
+
css: previewFooterClassnames
|
|
145
|
+
}, jsx(EmojiUploadPicker, {
|
|
144
146
|
onUploadCancelled: onUploadCancelled,
|
|
145
147
|
onUploadEmoji: onUploadEmoji,
|
|
146
148
|
onFileChooserClicked: onFileChooserClicked,
|
|
@@ -150,25 +152,25 @@ export class EmojiActions extends PureComponent {
|
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
if (emojiToDelete) {
|
|
153
|
-
return
|
|
154
|
-
|
|
155
|
-
},
|
|
155
|
+
return jsx("div", {
|
|
156
|
+
css: previewFooterClassnames
|
|
157
|
+
}, jsx(EmojiDeletePreview, {
|
|
156
158
|
emoji: emojiToDelete,
|
|
157
159
|
onDeleteEmoji: onDeleteEmoji,
|
|
158
160
|
onCloseDelete: onCloseDelete
|
|
159
161
|
}));
|
|
160
162
|
}
|
|
161
163
|
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
+
return jsx("div", {
|
|
165
|
+
css: previewFooterClassnames,
|
|
164
166
|
onMouseLeave: this.onMouseLeave
|
|
165
|
-
},
|
|
167
|
+
}, jsx("div", {
|
|
166
168
|
style: {
|
|
167
169
|
display: 'flex',
|
|
168
170
|
justifyContent: 'flex-end',
|
|
169
171
|
alignItems: 'center'
|
|
170
172
|
}
|
|
171
|
-
}, !this.state.selectingTone &&
|
|
173
|
+
}, !this.state.selectingTone && jsx(EmojiPickerListSearch, {
|
|
172
174
|
onChange: onChange,
|
|
173
175
|
query: query
|
|
174
176
|
}), this.renderTones()), this.renderAddOwnEmoji());
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { jsx } from '@emotion/core';
|
|
2
3
|
import React, { forwardRef } from 'react';
|
|
3
|
-
import * as styles from './styles';
|
|
4
4
|
import Emoji from './Emoji';
|
|
5
5
|
import { leftClick } from '../../util/mouse';
|
|
6
|
+
import { emojiButton, hiddenToneButton } from './styles';
|
|
6
7
|
|
|
7
8
|
const handleMouseDown = (props, event) => {
|
|
8
9
|
const {
|
|
@@ -34,11 +35,10 @@ export const EmojiButton = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
34
35
|
ariaExpanded,
|
|
35
36
|
shouldHideButton
|
|
36
37
|
} = props;
|
|
37
|
-
|
|
38
|
-
return /*#__PURE__*/React.createElement("button", {
|
|
38
|
+
return jsx("button", {
|
|
39
39
|
ref: ref,
|
|
40
40
|
"aria-expanded": ariaExpanded,
|
|
41
|
-
|
|
41
|
+
css: shouldHideButton ? hiddenToneButton : emojiButton,
|
|
42
42
|
onMouseDown: event => {
|
|
43
43
|
handleMouseDown(props, event);
|
|
44
44
|
},
|
|
@@ -46,7 +46,7 @@ export const EmojiButton = /*#__PURE__*/forwardRef((props, ref) => {
|
|
|
46
46
|
handleKeyPress(props, event);
|
|
47
47
|
},
|
|
48
48
|
"aria-label": ariaLabelText
|
|
49
|
-
},
|
|
49
|
+
}, jsx(Emoji, {
|
|
50
50
|
emoji: emoji,
|
|
51
51
|
selectOnHover: selectOnHover
|
|
52
52
|
}));
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
|
|
4
|
+
/** @jsx jsx */
|
|
5
|
+
import { jsx } from '@emotion/core';
|
|
3
6
|
import AkButton from '@atlaskit/button/custom-theme-button';
|
|
4
|
-
import React from 'react';
|
|
5
7
|
import { Component } from 'react';
|
|
6
8
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
7
9
|
import { messages } from '../i18n';
|
|
8
10
|
import CachingEmoji from './CachingEmoji';
|
|
9
11
|
import EmojiErrorMessage from './EmojiErrorMessage';
|
|
10
12
|
import RetryableButton from './RetryableButton';
|
|
11
|
-
import
|
|
13
|
+
import { cancelButton, deleteFooter, deletePreview, deleteText, emojiDeleteErrorMessage, previewButtonGroup } from './styles';
|
|
12
14
|
|
|
13
15
|
class EmojiDeletePreview extends Component {
|
|
14
16
|
constructor(props) {
|
|
@@ -69,37 +71,35 @@ class EmojiDeletePreview extends Component {
|
|
|
69
71
|
const {
|
|
70
72
|
formatMessage
|
|
71
73
|
} = intl;
|
|
72
|
-
return
|
|
73
|
-
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
},
|
|
74
|
+
return jsx("div", {
|
|
75
|
+
css: deletePreview
|
|
76
|
+
}, jsx("div", {
|
|
77
|
+
css: deleteText
|
|
78
|
+
}, jsx("h5", null, jsx(FormattedMessage, messages.deleteEmojiTitle)), jsx(FormattedMessage, _extends({}, messages.deleteEmojiDescription, {
|
|
77
79
|
values: {
|
|
78
80
|
emojiShortName: emoji.shortName
|
|
79
81
|
}
|
|
80
|
-
}))),
|
|
81
|
-
|
|
82
|
-
},
|
|
82
|
+
}))), jsx("div", {
|
|
83
|
+
css: deleteFooter
|
|
84
|
+
}, jsx(CachingEmoji, {
|
|
83
85
|
emoji: emoji
|
|
84
|
-
}),
|
|
85
|
-
|
|
86
|
-
}, error ? !loading ?
|
|
86
|
+
}), jsx("div", {
|
|
87
|
+
css: previewButtonGroup
|
|
88
|
+
}, error ? !loading ? jsx(EmojiErrorMessage, {
|
|
87
89
|
message: formatMessage(messages.deleteEmojiFailed),
|
|
88
|
-
|
|
90
|
+
messageStyles: emojiDeleteErrorMessage,
|
|
89
91
|
tooltip: true
|
|
90
|
-
}) : null : null,
|
|
91
|
-
className: styles.uploadEmojiButton,
|
|
92
|
-
retryClassName: styles.uploadRetryButton,
|
|
92
|
+
}) : null : null, jsx(RetryableButton, {
|
|
93
93
|
label: formatMessage(messages.deleteEmojiLabel),
|
|
94
94
|
onSubmit: this.onSubmit,
|
|
95
95
|
appearance: "danger",
|
|
96
96
|
loading: loading,
|
|
97
97
|
error: error
|
|
98
|
-
}),
|
|
98
|
+
}), jsx(AkButton, {
|
|
99
99
|
appearance: "subtle",
|
|
100
100
|
onClick: this.onCancel,
|
|
101
|
-
|
|
102
|
-
},
|
|
101
|
+
css: cancelButton
|
|
102
|
+
}, jsx(FormattedMessage, messages.cancelLabel)))));
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { jsx } from '@emotion/core';
|
|
1
3
|
import ErrorIcon from '@atlaskit/icon/glyph/error';
|
|
2
|
-
import React from 'react';
|
|
3
4
|
import { PureComponent } from 'react';
|
|
4
5
|
import Tooltip from '@atlaskit/tooltip';
|
|
5
6
|
export default class EmojiErrorMessage extends PureComponent {
|
|
6
7
|
renderWithTooltip() {
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
},
|
|
8
|
+
return jsx("div", {
|
|
9
|
+
css: this.props.messageStyles
|
|
10
|
+
}, jsx(Tooltip, {
|
|
10
11
|
content: this.props.message,
|
|
11
12
|
position: "top"
|
|
12
|
-
},
|
|
13
|
+
}, jsx(ErrorIcon, {
|
|
13
14
|
label: "Error",
|
|
14
15
|
size: "medium"
|
|
15
16
|
})));
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
renderInline() {
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
},
|
|
20
|
+
return jsx("div", {
|
|
21
|
+
css: this.props.messageStyles
|
|
22
|
+
}, jsx(ErrorIcon, {
|
|
22
23
|
label: "Error",
|
|
23
24
|
size: "small"
|
|
24
25
|
}), " ", this.props.message);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { jsx } from '@emotion/core';
|
|
3
3
|
import { placeholder, placeholderContainer } from './styles';
|
|
4
4
|
import { defaultEmojiHeight } from '../../util/constants';
|
|
5
5
|
import { isImageRepresentation, isMediaRepresentation } from '../../util/type-helpers';
|
|
@@ -31,13 +31,10 @@ const EmojiPlaceholder = props => {
|
|
|
31
31
|
width: `${width}px`,
|
|
32
32
|
height: `${height}px`
|
|
33
33
|
};
|
|
34
|
-
|
|
35
|
-
[placeholder]: true,
|
|
36
|
-
[placeholderContainer]: true
|
|
37
|
-
};
|
|
38
|
-
return /*#__PURE__*/React.createElement("span", {
|
|
34
|
+
return jsx("span", {
|
|
39
35
|
"aria-label": shortName,
|
|
40
|
-
className:
|
|
36
|
+
className: placeholder,
|
|
37
|
+
css: placeholderContainer,
|
|
41
38
|
style: style,
|
|
42
39
|
title: showTooltip ? shortName : ''
|
|
43
40
|
});
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
|
|
3
|
+
/** @jsx jsx */
|
|
4
|
+
import { jsx } from '@emotion/core';
|
|
2
5
|
import AkButton from '@atlaskit/button/standard-button';
|
|
3
6
|
import AddIcon from '@atlaskit/icon/glyph/add';
|
|
4
|
-
import classNames from 'classnames';
|
|
5
|
-
import React from 'react';
|
|
6
7
|
import { PureComponent } from 'react';
|
|
7
8
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
8
|
-
import CachingEmoji from '../../components/common/CachingEmoji';
|
|
9
9
|
import EmojiButton from '../../components/common/EmojiButton';
|
|
10
10
|
import { messages } from '../i18n';
|
|
11
|
-
import * as styles from './styles';
|
|
12
11
|
import ToneSelector from './ToneSelector';
|
|
13
12
|
import { setSkinToneAriaLabelText } from './setSkinToneAriaLabelText';
|
|
13
|
+
import { addCustomEmoji, addCustomEmojiButton, emojiPickerAddEmoji, emojiPreview, toneSelectorContainer } from './styles';
|
|
14
|
+
import { EmojiPreviewComponent } from './EmojiPreviewComponent';
|
|
14
15
|
export class EmojiPreview extends PureComponent {
|
|
15
16
|
constructor(...args) {
|
|
16
17
|
super(...args);
|
|
@@ -73,13 +74,13 @@ export class EmojiPreview extends PureComponent {
|
|
|
73
74
|
previewEmoji = previewEmoji.skinVariations[(selectedTone || 1) - 1];
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
return
|
|
77
|
-
className:
|
|
78
|
-
}, this.state.selectingTone &&
|
|
77
|
+
return jsx("div", {
|
|
78
|
+
className: toneSelectorContainer
|
|
79
|
+
}, this.state.selectingTone && jsx(ToneSelector, {
|
|
79
80
|
emoji: toneEmoji,
|
|
80
81
|
onToneSelected: this.onToneSelected,
|
|
81
82
|
previewEmojiId: previewEmoji.id
|
|
82
|
-
}),
|
|
83
|
+
}), jsx(EmojiButton, {
|
|
83
84
|
ariaExpanded: this.state.selectingTone,
|
|
84
85
|
emoji: previewEmoji,
|
|
85
86
|
selectOnHover: true,
|
|
@@ -103,26 +104,9 @@ export class EmojiPreview extends PureComponent {
|
|
|
103
104
|
return null;
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
[styles.preview]: true
|
|
108
|
-
});
|
|
109
|
-
const previewTextClasses = classNames({
|
|
110
|
-
[styles.previewText]: true,
|
|
111
|
-
[styles.previewSingleLine]: !emoji.name
|
|
112
|
-
});
|
|
113
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
114
|
-
className: previewClasses
|
|
115
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
116
|
-
className: styles.previewImg
|
|
117
|
-
}, /*#__PURE__*/React.createElement(CachingEmoji, {
|
|
107
|
+
return jsx(EmojiPreviewComponent, {
|
|
118
108
|
emoji: emoji
|
|
119
|
-
})
|
|
120
|
-
className: previewTextClasses
|
|
121
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
122
|
-
className: styles.name
|
|
123
|
-
}, emoji.name), /*#__PURE__*/React.createElement("span", {
|
|
124
|
-
className: styles.shortName
|
|
125
|
-
}, emoji.shortName)));
|
|
109
|
+
});
|
|
126
110
|
} // note: emoji-picker-add-emoji className is used by pollinator synthetic checks
|
|
127
111
|
|
|
128
112
|
|
|
@@ -143,23 +127,23 @@ export class EmojiPreview extends PureComponent {
|
|
|
143
127
|
return null;
|
|
144
128
|
}
|
|
145
129
|
|
|
146
|
-
return
|
|
147
|
-
|
|
148
|
-
},
|
|
130
|
+
return jsx("div", {
|
|
131
|
+
css: addCustomEmoji
|
|
132
|
+
}, jsx(FormattedMessage, messages.addCustomEmojiLabel, label => jsx(AkButton, {
|
|
149
133
|
onClick: onOpenUpload,
|
|
150
|
-
iconBefore:
|
|
134
|
+
iconBefore: jsx(AddIcon, {
|
|
151
135
|
label: formatMessage(messages.addCustomEmojiLabel),
|
|
152
136
|
size: "small"
|
|
153
137
|
}),
|
|
154
138
|
appearance: "subtle",
|
|
155
|
-
|
|
139
|
+
css: addCustomEmojiButton,
|
|
140
|
+
className: emojiPickerAddEmoji
|
|
156
141
|
}, label)));
|
|
157
142
|
}
|
|
158
143
|
|
|
159
144
|
render() {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
className: sectionClasses,
|
|
145
|
+
return jsx("div", {
|
|
146
|
+
css: emojiPreview,
|
|
163
147
|
onMouseLeave: this.onMouseLeave
|
|
164
148
|
}, this.renderAddOwnEmoji(), this.renderEmojiPreview(), this.renderTones());
|
|
165
149
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { jsx } from '@emotion/core';
|
|
3
|
+
import CachingEmoji from './CachingEmoji';
|
|
4
|
+
import { emojiName, emojiShortName, preview, previewImg, previewText } from './styles';
|
|
5
|
+
export const EmojiPreviewComponent = ({
|
|
6
|
+
emoji
|
|
7
|
+
}) => {
|
|
8
|
+
return jsx("div", {
|
|
9
|
+
css: preview
|
|
10
|
+
}, jsx("span", {
|
|
11
|
+
css: previewImg
|
|
12
|
+
}, jsx(CachingEmoji, {
|
|
13
|
+
emoji: emoji
|
|
14
|
+
})), jsx("div", {
|
|
15
|
+
css: previewText
|
|
16
|
+
}, emoji.name && jsx("div", {
|
|
17
|
+
css: emojiName
|
|
18
|
+
}, emoji.name), jsx("div", {
|
|
19
|
+
css: emojiShortName
|
|
20
|
+
}, emoji.shortName)));
|
|
21
|
+
};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
/** @jsx jsx */
|
|
4
|
+
import { jsx } from '@emotion/core';
|
|
5
|
+
import React, { Fragment } from 'react';
|
|
3
6
|
import { PureComponent } from 'react';
|
|
4
7
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
5
8
|
import TextField from '@atlaskit/textfield';
|
|
@@ -10,7 +13,7 @@ import EmojiErrorMessage from './EmojiErrorMessage';
|
|
|
10
13
|
import EmojiUploadPreview from './EmojiUploadPreview';
|
|
11
14
|
import FileChooser from './FileChooser';
|
|
12
15
|
import { UploadStatus } from './internal-types';
|
|
13
|
-
import
|
|
16
|
+
import { emojiChooseFileErrorMessage, emojiUpload, emojiUploadBottom, uploadChooseFileBrowse, uploadChooseFileEmojiName, uploadChooseFileMessage, uploadChooseFileRow } from './styles';
|
|
14
17
|
const disallowedReplacementsMap = new Map([[':', ''], ['!', ''], ['@', ''], ['#', ''], ['%', ''], ['^', ''], ['&', ''], ['*', ''], ['(', ''], [')', ''], [' ', '_']]);
|
|
15
18
|
|
|
16
19
|
const sanitizeName = name => {
|
|
@@ -54,15 +57,15 @@ class ChooseEmojiFile extends PureComponent {
|
|
|
54
57
|
const disableChooser = !name;
|
|
55
58
|
const fileChooserButtonDescriptionId = 'choose.emoji.file.button.screen.reader.description.id'; // Note: FileChooser.accept does not work in Electron due to a bug: https://product-fabric.atlassian.net/browse/FS-1626
|
|
56
59
|
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
},
|
|
60
|
-
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
},
|
|
60
|
+
return jsx("div", {
|
|
61
|
+
css: emojiUpload
|
|
62
|
+
}, jsx("div", {
|
|
63
|
+
css: uploadChooseFileMessage
|
|
64
|
+
}, jsx(FormattedMessage, messages.addCustomEmojiLabel, message => jsx("h5", null, message))), jsx("div", {
|
|
65
|
+
css: uploadChooseFileRow
|
|
66
|
+
}, jsx("span", {
|
|
67
|
+
css: uploadChooseFileEmojiName
|
|
68
|
+
}, jsx(TextField, {
|
|
66
69
|
placeholder: formatMessage(messages.emojiPlaceholder),
|
|
67
70
|
"aria-label": formatMessage(messages.emojiNameAriaLabel),
|
|
68
71
|
maxLength: maxNameLength,
|
|
@@ -71,22 +74,22 @@ class ChooseEmojiFile extends PureComponent {
|
|
|
71
74
|
value: name,
|
|
72
75
|
isCompact: true,
|
|
73
76
|
autoFocus: true
|
|
74
|
-
})),
|
|
75
|
-
|
|
76
|
-
},
|
|
77
|
+
})), jsx("span", {
|
|
78
|
+
css: uploadChooseFileBrowse
|
|
79
|
+
}, jsx(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, screenReaderDescription => jsx(Fragment, null, jsx("span", {
|
|
77
80
|
hidden: true,
|
|
78
81
|
id: fileChooserButtonDescriptionId
|
|
79
|
-
}, screenReaderDescription),
|
|
82
|
+
}, screenReaderDescription), jsx(FileChooser, {
|
|
80
83
|
label: formatMessage(messages.emojiChooseFileTitle),
|
|
81
84
|
onChange: onChooseFile,
|
|
82
85
|
onClick: onClick,
|
|
83
86
|
accept: "image/png,image/jpeg,image/gif",
|
|
84
87
|
ariaDescribedBy: fileChooserButtonDescriptionId,
|
|
85
88
|
isDisabled: disableChooser
|
|
86
|
-
}))))),
|
|
87
|
-
|
|
88
|
-
}, !errorMessage ?
|
|
89
|
-
|
|
89
|
+
}))))), jsx("div", {
|
|
90
|
+
css: emojiUploadBottom
|
|
91
|
+
}, !errorMessage ? jsx("p", null, jsx(FormattedMessage, messages.emojiImageRequirements)) : jsx(EmojiErrorMessage, {
|
|
92
|
+
messageStyles: emojiChooseFileErrorMessage,
|
|
90
93
|
message: errorMessage
|
|
91
94
|
})));
|
|
92
95
|
}
|
|
@@ -269,7 +272,7 @@ export class EmojiUploadPicker extends PureComponent {
|
|
|
269
272
|
};
|
|
270
273
|
|
|
271
274
|
if (name && previewImage) {
|
|
272
|
-
return
|
|
275
|
+
return jsx(EmojiUploadPreview, {
|
|
273
276
|
errorMessage: errorMessage,
|
|
274
277
|
name: name,
|
|
275
278
|
onAddEmoji: this.onAddEmoji,
|
|
@@ -279,13 +282,13 @@ export class EmojiUploadPicker extends PureComponent {
|
|
|
279
282
|
});
|
|
280
283
|
}
|
|
281
284
|
|
|
282
|
-
return
|
|
285
|
+
return jsx(ChooseEmojiFile, {
|
|
283
286
|
name: name,
|
|
284
287
|
onChooseFile: this.onChooseFile,
|
|
285
288
|
onClick: this.props.onFileChooserClicked,
|
|
286
289
|
onNameChange: this.onNameChange,
|
|
287
290
|
onUploadCancelled: cancelUpload,
|
|
288
|
-
errorMessage: chooseEmojiErrorMessage ?
|
|
291
|
+
errorMessage: chooseEmojiErrorMessage ? jsx(FormattedMessage, chooseEmojiErrorMessage) : undefined,
|
|
289
292
|
intl: intl
|
|
290
293
|
});
|
|
291
294
|
}
|