@atlaskit/emoji 70.6.1 → 70.7.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 +19 -0
- package/afm-cc/tsconfig.json +6 -0
- package/afm-products/tsconfig.json +6 -0
- package/dist/cjs/api/EmojiResource.js +23 -1
- package/dist/cjs/components/common/EmojiErrorMessage.js +5 -1
- package/dist/cjs/components/common/EmojiUploadPicker.compiled.css +3 -1
- package/dist/cjs/components/common/EmojiUploadPicker.js +28 -18
- package/dist/cjs/components/common/FileChooser.compiled.css +3 -3
- package/dist/cjs/components/common/FileChooser.js +2 -2
- package/dist/cjs/components/i18n.js +5 -0
- package/dist/cjs/components/picker/EmojiPickerComponent.js +54 -15
- package/dist/cjs/util/analytics/analytics.js +1 -1
- package/dist/es2019/api/EmojiResource.js +19 -1
- package/dist/es2019/components/common/EmojiErrorMessage.js +5 -1
- package/dist/es2019/components/common/EmojiUploadPicker.compiled.css +3 -1
- package/dist/es2019/components/common/EmojiUploadPicker.js +23 -12
- package/dist/es2019/components/common/FileChooser.compiled.css +3 -3
- package/dist/es2019/components/common/FileChooser.js +2 -2
- package/dist/es2019/components/i18n.js +5 -0
- package/dist/es2019/components/picker/EmojiPickerComponent.js +16 -1
- package/dist/es2019/util/analytics/analytics.js +1 -1
- package/dist/esm/api/EmojiResource.js +24 -2
- package/dist/esm/components/common/EmojiErrorMessage.js +5 -1
- package/dist/esm/components/common/EmojiUploadPicker.compiled.css +3 -1
- package/dist/esm/components/common/EmojiUploadPicker.js +29 -18
- package/dist/esm/components/common/FileChooser.compiled.css +3 -3
- package/dist/esm/components/common/FileChooser.js +2 -2
- package/dist/esm/components/i18n.js +5 -0
- package/dist/esm/components/picker/EmojiPickerComponent.js +54 -15
- package/dist/esm/util/analytics/analytics.js +1 -1
- package/dist/types/components/i18n.d.ts +99 -94
- package/dist/types-ts4.5/components/i18n.d.ts +99 -94
- package/package.json +9 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @atlaskit/emoji
|
|
2
2
|
|
|
3
|
+
## 70.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`084c9f4eca75d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/084c9f4eca75d) -
|
|
8
|
+
Updated error states + new error state for adding duplicate emoji name
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- [`8d79e063b3073`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8d79e063b3073) -
|
|
13
|
+
update stargate routing for emoji routes
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
|
|
16
|
+
## 70.6.2
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies
|
|
21
|
+
|
|
3
22
|
## 70.6.1
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
|
@@ -25,12 +25,18 @@
|
|
|
25
25
|
{
|
|
26
26
|
"path": "../../../analytics/analytics-next/afm-cc/tsconfig.json"
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"path": "../../../helpers/browser-apis/afm-cc/tsconfig.json"
|
|
30
|
+
},
|
|
28
31
|
{
|
|
29
32
|
"path": "../../../design-system/button/afm-cc/tsconfig.json"
|
|
30
33
|
},
|
|
31
34
|
{
|
|
32
35
|
"path": "../../../design-system/css/afm-cc/tsconfig.json"
|
|
33
36
|
},
|
|
37
|
+
{
|
|
38
|
+
"path": "../../../design-system/form/afm-cc/tsconfig.json"
|
|
39
|
+
},
|
|
34
40
|
{
|
|
35
41
|
"path": "../../../design-system/heading/afm-cc/tsconfig.json"
|
|
36
42
|
},
|
|
@@ -25,12 +25,18 @@
|
|
|
25
25
|
{
|
|
26
26
|
"path": "../../../analytics/analytics-next/afm-products/tsconfig.json"
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"path": "../../../helpers/browser-apis/afm-products/tsconfig.json"
|
|
30
|
+
},
|
|
28
31
|
{
|
|
29
32
|
"path": "../../../design-system/button/afm-products/tsconfig.json"
|
|
30
33
|
},
|
|
31
34
|
{
|
|
32
35
|
"path": "../../../design-system/css/afm-products/tsconfig.json"
|
|
33
36
|
},
|
|
37
|
+
{
|
|
38
|
+
"path": "../../../design-system/form/afm-products/tsconfig.json"
|
|
39
|
+
},
|
|
34
40
|
{
|
|
35
41
|
"path": "../../../design-system/heading/afm-products/tsconfig.json"
|
|
36
42
|
},
|
|
@@ -67,7 +67,29 @@ var EmojiResource = exports.EmojiResource = /*#__PURE__*/function (_ref) {
|
|
|
67
67
|
(0, _defineProperty2.default)(_this, "isLoaded", function () {
|
|
68
68
|
return _this.initialLoaders !== 0 && _this.activeLoaders === 0;
|
|
69
69
|
});
|
|
70
|
-
|
|
70
|
+
var rewriteEmojiGatewayPath = function rewriteEmojiGatewayPath(url) {
|
|
71
|
+
return url.replace('/gateway/api/emoji', '/gateway/api/elements/emoji');
|
|
72
|
+
};
|
|
73
|
+
var stargateEmojiPathEnabled = (0, _platformFeatureFlags.fg)('use-elements-stargate-emoji-path');
|
|
74
|
+
var singleEmojiApi = config.singleEmojiApi;
|
|
75
|
+
var optimisticImageApi = config.optimisticImageApi;
|
|
76
|
+
_this.emojiProviderConfig = stargateEmojiPathEnabled ? _objectSpread(_objectSpread({}, config), {}, {
|
|
77
|
+
providers: config.providers.map(function (provider) {
|
|
78
|
+
return _objectSpread(_objectSpread({}, provider), {}, {
|
|
79
|
+
url: rewriteEmojiGatewayPath(provider.url)
|
|
80
|
+
});
|
|
81
|
+
}),
|
|
82
|
+
singleEmojiApi: singleEmojiApi ? _objectSpread(_objectSpread({}, singleEmojiApi), {}, {
|
|
83
|
+
getUrl: function getUrl(emojiId) {
|
|
84
|
+
return rewriteEmojiGatewayPath(singleEmojiApi.getUrl(emojiId));
|
|
85
|
+
}
|
|
86
|
+
}) : undefined,
|
|
87
|
+
optimisticImageApi: optimisticImageApi ? _objectSpread(_objectSpread({}, optimisticImageApi), {}, {
|
|
88
|
+
getUrl: function getUrl(emojiId) {
|
|
89
|
+
return rewriteEmojiGatewayPath(optimisticImageApi.getUrl(emojiId));
|
|
90
|
+
}
|
|
91
|
+
}) : undefined
|
|
92
|
+
}) : config;
|
|
71
93
|
_this.recordConfig = config.recordConfig;
|
|
72
94
|
_this.currentUser = config.currentUser;
|
|
73
95
|
if ((0, _storageAvailable.default)('localStorage')) {
|
|
@@ -10,8 +10,10 @@ exports.emojiErrorScreenreaderTestId = exports.emojiErrorMessageTooltipTestId =
|
|
|
10
10
|
require("./EmojiErrorMessage.compiled.css");
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _runtime = require("@compiled/react/runtime");
|
|
13
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
13
14
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
14
15
|
var _statusError = _interopRequireDefault(require("@atlaskit/icon/core/status-error"));
|
|
16
|
+
var _form = require("@atlaskit/form");
|
|
15
17
|
var _reactIntl = require("react-intl");
|
|
16
18
|
var _i18n = require("../i18n");
|
|
17
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); }
|
|
@@ -42,7 +44,9 @@ var EmojiErrorMessage = function EmojiErrorMessage(props) {
|
|
|
42
44
|
label: formatMessage(_i18n.messages.error),
|
|
43
45
|
spacing: "spacious",
|
|
44
46
|
testId: emojiErrorIconTestId
|
|
45
|
-
}))) : /*#__PURE__*/React.createElement("div", {
|
|
47
|
+
}))) : (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
|
|
48
|
+
"data-testid": emojiErrorMessageTestId
|
|
49
|
+
}, /*#__PURE__*/React.createElement(_form.ErrorMessage, null, message)) : /*#__PURE__*/React.createElement("div", {
|
|
46
50
|
"data-testid": emojiErrorMessageTestId,
|
|
47
51
|
className: (0, _runtime.ax)([errorMessageStyles[errorStyle]])
|
|
48
52
|
}, /*#__PURE__*/React.createElement(_statusError.default, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
._11c8wadc{font:var(--ds-font-body-small,normal 400 9pt/1pc "Atlassian Sans",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
|
|
2
2
|
._scffidpf input{border:0}
|
|
3
|
-
.
|
|
3
|
+
._zulp12x7{gap:var(--ds-space-075,6px)}
|
|
4
4
|
._zulpu2gc{gap:var(--ds-space-100,8px)}
|
|
5
5
|
._16jlkb7n{flex-grow:1}
|
|
6
6
|
._19bvpxbi{padding-left:var(--ds-space-200,1pc)}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
._1e0c1txw{display:flex}
|
|
12
12
|
._1o9zkb7n{flex-shrink:1}
|
|
13
13
|
._1rwq1j28 input{background-color:transparent}
|
|
14
|
+
._1tker0r7{min-height:250px}
|
|
14
15
|
._1w90azsu._1w90azsu{color:var(--ds-text-subtle,#505258)}
|
|
15
16
|
._2lx21bp4{flex-direction:column}
|
|
16
17
|
._34ir1o36 input{outline-width:medium}
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
._k48p1pd9{font-weight:var(--ds-font-weight-semibold,600)}
|
|
27
28
|
._n3td1ejb{padding-bottom:var(--ds-space-300,24px)}
|
|
28
29
|
._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
|
|
30
|
+
._n3tdv77o{padding-bottom:var(--ds-space-025,2px)}
|
|
29
31
|
._u5f3pxbi{padding-right:var(--ds-space-200,1pc)}
|
|
30
32
|
._u5f3u2gc{padding-right:var(--ds-space-100,8px)}
|
|
31
33
|
._xmji1r31 input{outline-color:currentColor}
|
|
@@ -29,12 +29,14 @@ var _FileChooser = _interopRequireDefault(require("./FileChooser"));
|
|
|
29
29
|
var _internalTypes = require("./internal-types");
|
|
30
30
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
31
31
|
var _new = _interopRequireDefault(require("@atlaskit/button/new"));
|
|
32
|
+
var _browserApis = require("@atlaskit/browser-apis");
|
|
32
33
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
33
34
|
var closeEmojiUploadButton = null;
|
|
34
35
|
var uploadAddRowNew = null;
|
|
35
36
|
var emojiUpload = null;
|
|
36
37
|
var emojiUploadNew = null;
|
|
37
38
|
var emojiUploadTop = null;
|
|
39
|
+
var emojiUploadTopNew = null;
|
|
38
40
|
var labelStyles = null;
|
|
39
41
|
var uploadChooseFileEmojiName = null;
|
|
40
42
|
var uploadChooseFileMessage = null;
|
|
@@ -65,6 +67,7 @@ var ChooseEmojiFile = /*#__PURE__*/(0, _react.memo)(function (props) {
|
|
|
65
67
|
onUploadCancelled = props.onUploadCancelled,
|
|
66
68
|
onAddEmoji = props.onAddEmoji,
|
|
67
69
|
errorMessage = props.errorMessage,
|
|
70
|
+
nameErrorMessage = props.nameErrorMessage,
|
|
68
71
|
previewImage = props.previewImage,
|
|
69
72
|
uploadStatus = props.uploadStatus,
|
|
70
73
|
intl = props.intl;
|
|
@@ -93,13 +96,13 @@ var ChooseEmojiFile = /*#__PURE__*/(0, _react.memo)(function (props) {
|
|
|
93
96
|
"data-testid": uploadEmojiComponentTestId,
|
|
94
97
|
className: (0, _runtime.ax)(["_ca0qu2gc _u5f3pxbi _n3tdu2gc _19bvpxbi _1e0c1txw _2lx21bp4 _1bah1b1v"])
|
|
95
98
|
}, /*#__PURE__*/React.createElement("div", {
|
|
96
|
-
className: (0, _runtime.ax)(["_11c8wadc
|
|
99
|
+
className: (0, _runtime.ax)(["_11c8wadc _n3tdv77o _1e0c1txw _1bah1yb4 _4cvresu3"])
|
|
97
100
|
}, /*#__PURE__*/React.createElement("label", {
|
|
98
101
|
htmlFor: "new-emoji-name-input",
|
|
99
102
|
className: (0, _runtime.ax)(["_1w90azsu", "_11c8wadc _k48p1pd9"])
|
|
100
103
|
}, previewImage ? /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.emojiPreviewTitle) : /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.addCustomEmojiLabel))), /*#__PURE__*/React.createElement("div", {
|
|
101
|
-
className: (0, _runtime.ax)(["
|
|
102
|
-
}, /*#__PURE__*/React.createElement(_compiled.
|
|
104
|
+
className: (0, _runtime.ax)(["_zulp12x7 _1e0c1txw _2lx21bp4 _1tker0r7"])
|
|
105
|
+
}, /*#__PURE__*/React.createElement(_compiled.Box, null, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.emojiChooseFileScreenReaderDescription, function () {
|
|
103
106
|
return /*#__PURE__*/React.createElement(_FileChooser.default, {
|
|
104
107
|
label: emojiChooseFileTitle,
|
|
105
108
|
onChange: onChooseFile,
|
|
@@ -109,7 +112,12 @@ var ChooseEmojiFile = /*#__PURE__*/(0, _react.memo)(function (props) {
|
|
|
109
112
|
previewImage: previewImage,
|
|
110
113
|
previewAlt: name
|
|
111
114
|
});
|
|
112
|
-
})
|
|
115
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
116
|
+
id: fileChooserButtonDescriptionId
|
|
117
|
+
}, errorMessage && /*#__PURE__*/React.createElement(_EmojiErrorMessage.default, {
|
|
118
|
+
errorStyle: "chooseFile",
|
|
119
|
+
message: errorMessage
|
|
120
|
+
}))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", {
|
|
113
121
|
htmlFor: "new-emoji-name-input",
|
|
114
122
|
className: (0, _runtime.ax)(["_1w90azsu", "_11c8wadc _k48p1pd9"])
|
|
115
123
|
}, /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.emojiNameLabel)), /*#__PURE__*/React.createElement(_textfield.default, {
|
|
@@ -121,16 +129,15 @@ var ChooseEmojiFile = /*#__PURE__*/(0, _react.memo)(function (props) {
|
|
|
121
129
|
value: name,
|
|
122
130
|
isCompact: true,
|
|
123
131
|
autoFocus: true,
|
|
132
|
+
isInvalid: !!nameErrorMessage,
|
|
124
133
|
testId: uploadEmojiNameInputTestId,
|
|
125
134
|
ref: inputRef,
|
|
126
135
|
id: "new-emoji-name-input",
|
|
127
136
|
"aria-required": true
|
|
128
|
-
})
|
|
129
|
-
id: fileChooserButtonDescriptionId
|
|
130
|
-
}, errorMessage && /*#__PURE__*/React.createElement(_EmojiErrorMessage.default, {
|
|
137
|
+
}), nameErrorMessage && /*#__PURE__*/React.createElement(_EmojiErrorMessage.default, {
|
|
131
138
|
errorStyle: "chooseFile",
|
|
132
|
-
message:
|
|
133
|
-
})), /*#__PURE__*/React.createElement("div", {
|
|
139
|
+
message: nameErrorMessage
|
|
140
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
134
141
|
className: (0, _runtime.ax)(["_zulpu2gc _1e0c1txw _1bahesu3 _4cvr1h6o _ca0qpxbi _n3td1ejb"])
|
|
135
142
|
}, /*#__PURE__*/React.createElement(_new.default, {
|
|
136
143
|
onClick: onUploadCancelled,
|
|
@@ -308,18 +315,19 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
|
|
|
308
315
|
return ImageUtil.parseImage(f.target.result);
|
|
309
316
|
case 4:
|
|
310
317
|
setPreviewImage(f.target.result);
|
|
311
|
-
|
|
318
|
+
setChooseEmojiErrorMessage(undefined);
|
|
319
|
+
_context.next = 12;
|
|
312
320
|
break;
|
|
313
|
-
case
|
|
314
|
-
_context.prev =
|
|
321
|
+
case 8:
|
|
322
|
+
_context.prev = 8;
|
|
315
323
|
_context.t0 = _context["catch"](0);
|
|
316
324
|
setChooseEmojiErrorMessage( /*#__PURE__*/React.createElement(_reactIntl.FormattedMessage, _i18n.messages.emojiInvalidImage));
|
|
317
325
|
cancelChooseFile();
|
|
318
|
-
case
|
|
326
|
+
case 12:
|
|
319
327
|
case "end":
|
|
320
328
|
return _context.stop();
|
|
321
329
|
}
|
|
322
|
-
}, _callee, null, [[0,
|
|
330
|
+
}, _callee, null, [[0, 8]]);
|
|
323
331
|
}));
|
|
324
332
|
return function (_x) {
|
|
325
333
|
return _ref.apply(this, arguments);
|
|
@@ -351,15 +359,16 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
|
|
|
351
359
|
// using setTimeout here to allow the UI to update before setting focus
|
|
352
360
|
setTimeout(function (lastFocus) {
|
|
353
361
|
if (lastFocus) {
|
|
354
|
-
var
|
|
355
|
-
(
|
|
362
|
+
var _getDocument;
|
|
363
|
+
(_getDocument = (0, _browserApis.getDocument)()) === null || _getDocument === void 0 || (_getDocument = _getDocument.getElementById(lastFocus)) === null || _getDocument === void 0 || _getDocument.focus();
|
|
356
364
|
}
|
|
357
365
|
}, 0, lastFocusedElementId.current);
|
|
358
366
|
}, [clearUploadPicker, onUploadCancelled]);
|
|
359
367
|
var onChooseFileClicked = function onChooseFileClicked() {
|
|
360
368
|
onFileChooserClicked && onFileChooserClicked();
|
|
361
369
|
};
|
|
362
|
-
var
|
|
370
|
+
var isDuplicateNameError = errorMessage !== null && errorMessage !== undefined && (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh');
|
|
371
|
+
var content = name && previewImage && !(0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement(_EmojiUploadPreview.default, {
|
|
363
372
|
errorMessage: errorMessage,
|
|
364
373
|
name: name,
|
|
365
374
|
onAddEmoji: onAddEmoji,
|
|
@@ -376,9 +385,10 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
|
|
|
376
385
|
previewImage: previewImage,
|
|
377
386
|
uploadStatus: uploadStatus,
|
|
378
387
|
errorMessage: chooseEmojiErrorMessage,
|
|
388
|
+
nameErrorMessage: isDuplicateNameError ? errorMessage : undefined,
|
|
379
389
|
intl: intl
|
|
380
390
|
});
|
|
381
|
-
return disableFocusLock ? content : /*#__PURE__*/React.createElement(_reactFocusLock.default, {
|
|
391
|
+
return disableFocusLock || (0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh') ? content : /*#__PURE__*/React.createElement(_reactFocusLock.default, {
|
|
382
392
|
noFocusGuards: true
|
|
383
393
|
}, content);
|
|
384
394
|
};
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
._19bvutpp{padding-left:var(--ds-space-150,9pt)}
|
|
8
8
|
._1bah1h6o{justify-content:center}
|
|
9
9
|
._1e0c1txw{display:flex}
|
|
10
|
-
.
|
|
10
|
+
._1oec1ign{transition-duration:var(--ds-duration-short,.15s)}
|
|
11
11
|
._2lx21bp4{flex-direction:column}
|
|
12
12
|
._4cvr1h6o{align-items:center}
|
|
13
13
|
._4t3i7l9q{height:170px}
|
|
14
14
|
._5ral1f51{object-fit:contain}
|
|
15
|
-
.
|
|
15
|
+
._6fl4574g{transition-timing-function:var(--ds-easing-out-practical,ease)}
|
|
16
16
|
._80omtlke{cursor:pointer}
|
|
17
17
|
._bfhkhfxm{background-color:var(--ds-surface-sunken,#f8f8f8)}
|
|
18
18
|
._bfhkufnl{background-color:var(--ds-background-selected-hovered,#cfe1fd)}
|
|
19
|
-
.
|
|
19
|
+
._c71l1j4a{max-height:130px}
|
|
20
20
|
._k8m01rje{transition-property:background-color,border-color}
|
|
21
21
|
._p12f1osq{max-width:100%}
|
|
22
22
|
._u5f3utpp{padding-right:var(--ds-space-150,9pt)}
|
|
@@ -114,11 +114,11 @@ var FileChooser = function FileChooser(props) {
|
|
|
114
114
|
"data-testid": dropzoneTestId,
|
|
115
115
|
role: "region",
|
|
116
116
|
"aria-label": label,
|
|
117
|
-
className: (0, _runtime.ax)(["_zulpu2gc _2rko1qi0 _189ee4h9 _1dqogq9o _1h6d1l7x _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o _4t3i7l9q _u5f3utpp _19bvutpp _bfhkhfxm _80omtlke _k8m01rje
|
|
117
|
+
className: (0, _runtime.ax)(["_zulpu2gc _2rko1qi0 _189ee4h9 _1dqogq9o _1h6d1l7x _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o _4t3i7l9q _u5f3utpp _19bvutpp _bfhkhfxm _80omtlke _k8m01rje _1oec1ign _6fl4574g", isDragging && "_1h6dq98m _bfhkufnl"])
|
|
118
118
|
}, previewImage ? /*#__PURE__*/_react.default.createElement("img", {
|
|
119
119
|
src: previewImage,
|
|
120
120
|
alt: previewAlt,
|
|
121
|
-
className: (0, _runtime.ax)(["
|
|
121
|
+
className: (0, _runtime.ax)(["_c71l1j4a _p12f1osq _5ral1f51"])
|
|
122
122
|
}) : /*#__PURE__*/_react.default.createElement(_new.default, {
|
|
123
123
|
onClick: handleOnChooseFile,
|
|
124
124
|
isDisabled: isDisabled,
|
|
@@ -216,6 +216,11 @@ var messages = exports.messages = (0, _reactIntl.defineMessages)({
|
|
|
216
216
|
defaultMessage: 'Selected image is more than 1 MB',
|
|
217
217
|
description: 'Error message for image too big, beyond the size limit'
|
|
218
218
|
},
|
|
219
|
+
emojiDuplicateName: {
|
|
220
|
+
id: 'fabric.emoji.error.duplicate.name',
|
|
221
|
+
defaultMessage: 'An emoji with this name exists already',
|
|
222
|
+
description: 'Error message shown when the user tries to upload an emoji with a name that already exists in the custom emoji set'
|
|
223
|
+
},
|
|
219
224
|
emojiPickerTitle: {
|
|
220
225
|
id: 'fabric.emoji.picker',
|
|
221
226
|
defaultMessage: 'Emoji picker',
|
|
@@ -11,10 +11,13 @@ require("./EmojiPickerComponent.compiled.css");
|
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var React = _react;
|
|
13
13
|
var _runtime = require("@compiled/react/runtime");
|
|
14
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
15
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
17
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
16
18
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
19
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
20
|
+
var _browserApis = require("@atlaskit/browser-apis");
|
|
18
21
|
var _reactDom = require("react-dom");
|
|
19
22
|
var _reactIntl = require("react-intl");
|
|
20
23
|
var _EmojiRepository = require("../../api/EmojiRepository");
|
|
@@ -173,6 +176,12 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
173
176
|
setUploadErrorMessage(undefined);
|
|
174
177
|
});
|
|
175
178
|
fireAnalytics((0, _analytics.uploadCancelButton)());
|
|
179
|
+
if ((0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh')) {
|
|
180
|
+
setTimeout(function () {
|
|
181
|
+
var _getDocument;
|
|
182
|
+
(_getDocument = (0, _browserApis.getDocument)()) === null || _getDocument === void 0 || (_getDocument = _getDocument.getElementById('add-custom-emoji')) === null || _getDocument === void 0 || _getDocument.focus();
|
|
183
|
+
}, 0);
|
|
184
|
+
}
|
|
176
185
|
}, [fireAnalytics]);
|
|
177
186
|
var getDynamicCategories = (0, _react.useCallback)(function () {
|
|
178
187
|
if (!emojiProvider.calculateDynamicCategories) {
|
|
@@ -388,23 +397,53 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
|
|
|
388
397
|
}, 0);
|
|
389
398
|
}
|
|
390
399
|
}, [emojiPickerList]);
|
|
391
|
-
var onUploadEmoji = (0, _react.useCallback)(function (
|
|
392
|
-
|
|
393
|
-
|
|
400
|
+
var onUploadEmoji = (0, _react.useCallback)( /*#__PURE__*/function () {
|
|
401
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(upload, retry) {
|
|
402
|
+
var errorSetter, onSuccess, uploadShortName, existing;
|
|
403
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
404
|
+
while (1) switch (_context.prev = _context.next) {
|
|
405
|
+
case 0:
|
|
406
|
+
fireAnalytics((0, _analytics.uploadConfirmButton)({
|
|
407
|
+
retry: retry
|
|
408
|
+
}));
|
|
409
|
+
errorSetter = function errorSetter(message) {
|
|
410
|
+
setUploadErrorMessage(message);
|
|
411
|
+
};
|
|
412
|
+
onSuccess = function onSuccess(emojiDescription) {
|
|
413
|
+
(0, _reactDom.unstable_batchedUpdates)(function () {
|
|
414
|
+
setActiveCategory(_constants.customCategory);
|
|
415
|
+
setSelectedEmoji(emojiDescription);
|
|
416
|
+
setUploading(false);
|
|
417
|
+
});
|
|
418
|
+
scrollToUploadedEmoji(emojiDescription);
|
|
419
|
+
};
|
|
420
|
+
if (!(0, _platformFeatureFlags.fg)('platform_emoji_picker_refresh')) {
|
|
421
|
+
_context.next = 11;
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
uploadShortName = ":".concat(upload.name.toLowerCase(), ":");
|
|
425
|
+
_context.next = 7;
|
|
426
|
+
return emojiProvider.findByShortName(uploadShortName);
|
|
427
|
+
case 7:
|
|
428
|
+
existing = _context.sent;
|
|
429
|
+
if (!existing) {
|
|
430
|
+
_context.next = 11;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
errorSetter(_i18n.messages.emojiDuplicateName);
|
|
434
|
+
return _context.abrupt("return");
|
|
435
|
+
case 11:
|
|
436
|
+
(0, _UploadEmoji.uploadEmoji)(upload, emojiProvider, errorSetter, onSuccess, fireAnalytics, retry);
|
|
437
|
+
case 12:
|
|
438
|
+
case "end":
|
|
439
|
+
return _context.stop();
|
|
440
|
+
}
|
|
441
|
+
}, _callee);
|
|
394
442
|
}));
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
};
|
|
398
|
-
var onSuccess = function onSuccess(emojiDescription) {
|
|
399
|
-
(0, _reactDom.unstable_batchedUpdates)(function () {
|
|
400
|
-
setActiveCategory(_constants.customCategory);
|
|
401
|
-
setSelectedEmoji(emojiDescription);
|
|
402
|
-
setUploading(false);
|
|
403
|
-
});
|
|
404
|
-
scrollToUploadedEmoji(emojiDescription);
|
|
443
|
+
return function (_x, _x2) {
|
|
444
|
+
return _ref3.apply(this, arguments);
|
|
405
445
|
};
|
|
406
|
-
|
|
407
|
-
}, [emojiProvider, fireAnalytics, scrollToUploadedEmoji]);
|
|
446
|
+
}(), [emojiProvider, fireAnalytics, scrollToUploadedEmoji]);
|
|
408
447
|
var onTriggerDelete = (0, _react.useCallback)(function (_emojiId, emoji) {
|
|
409
448
|
if (_emojiId) {
|
|
410
449
|
fireAnalytics((0, _analytics.deleteBeginEvent)({
|
|
@@ -20,7 +20,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
|
|
|
20
20
|
actionSubjectId: actionSubjectId,
|
|
21
21
|
attributes: _objectSpread({
|
|
22
22
|
packageName: "@atlaskit/emoji",
|
|
23
|
-
packageVersion: "70.6.
|
|
23
|
+
packageVersion: "70.6.2"
|
|
24
24
|
}, attributes)
|
|
25
25
|
};
|
|
26
26
|
};
|
|
@@ -44,7 +44,25 @@ export class EmojiResource extends AbstractResource {
|
|
|
44
44
|
return !!repository;
|
|
45
45
|
});
|
|
46
46
|
_defineProperty(this, "isLoaded", () => this.initialLoaders !== 0 && this.activeLoaders === 0);
|
|
47
|
-
|
|
47
|
+
const rewriteEmojiGatewayPath = url => url.replace('/gateway/api/emoji', '/gateway/api/elements/emoji');
|
|
48
|
+
const stargateEmojiPathEnabled = fg('use-elements-stargate-emoji-path');
|
|
49
|
+
const singleEmojiApi = config.singleEmojiApi;
|
|
50
|
+
const optimisticImageApi = config.optimisticImageApi;
|
|
51
|
+
this.emojiProviderConfig = stargateEmojiPathEnabled ? {
|
|
52
|
+
...config,
|
|
53
|
+
providers: config.providers.map(provider => ({
|
|
54
|
+
...provider,
|
|
55
|
+
url: rewriteEmojiGatewayPath(provider.url)
|
|
56
|
+
})),
|
|
57
|
+
singleEmojiApi: singleEmojiApi ? {
|
|
58
|
+
...singleEmojiApi,
|
|
59
|
+
getUrl: emojiId => rewriteEmojiGatewayPath(singleEmojiApi.getUrl(emojiId))
|
|
60
|
+
} : undefined,
|
|
61
|
+
optimisticImageApi: optimisticImageApi ? {
|
|
62
|
+
...optimisticImageApi,
|
|
63
|
+
getUrl: emojiId => rewriteEmojiGatewayPath(optimisticImageApi.getUrl(emojiId))
|
|
64
|
+
} : undefined
|
|
65
|
+
} : config;
|
|
48
66
|
this.recordConfig = config.recordConfig;
|
|
49
67
|
this.currentUser = config.currentUser;
|
|
50
68
|
if (storageAvailable('localStorage')) {
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
import "./EmojiErrorMessage.compiled.css";
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { ax, ix } from "@compiled/react/runtime";
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import Tooltip from '@atlaskit/tooltip';
|
|
6
7
|
import ErrorIcon from '@atlaskit/icon/core/status-error';
|
|
8
|
+
import { ErrorMessage } from '@atlaskit/form';
|
|
7
9
|
import { useIntl } from 'react-intl';
|
|
8
10
|
import { messages } from '../i18n';
|
|
9
11
|
const errorMessageStyles = {
|
|
@@ -36,7 +38,9 @@ const EmojiErrorMessage = props => {
|
|
|
36
38
|
label: formatMessage(messages.error),
|
|
37
39
|
spacing: "spacious",
|
|
38
40
|
testId: emojiErrorIconTestId
|
|
39
|
-
}))) : /*#__PURE__*/React.createElement("div", {
|
|
41
|
+
}))) : fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
|
|
42
|
+
"data-testid": emojiErrorMessageTestId
|
|
43
|
+
}, /*#__PURE__*/React.createElement(ErrorMessage, null, message)) : /*#__PURE__*/React.createElement("div", {
|
|
40
44
|
"data-testid": emojiErrorMessageTestId,
|
|
41
45
|
className: ax([errorMessageStyles[errorStyle]])
|
|
42
46
|
}, /*#__PURE__*/React.createElement(ErrorIcon, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
._11c8wadc{font:var(--ds-font-body-small,normal 400 9pt/1pc "Atlassian Sans",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
|
|
2
2
|
._scffidpf input{border:0}
|
|
3
|
-
.
|
|
3
|
+
._zulp12x7{gap:var(--ds-space-075,6px)}
|
|
4
4
|
._zulpu2gc{gap:var(--ds-space-100,8px)}
|
|
5
5
|
._16jlkb7n{flex-grow:1}
|
|
6
6
|
._19bvpxbi{padding-left:var(--ds-space-200,1pc)}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
._1e0c1txw{display:flex}
|
|
12
12
|
._1o9zkb7n{flex-shrink:1}
|
|
13
13
|
._1rwq1j28 input{background-color:transparent}
|
|
14
|
+
._1tker0r7{min-height:250px}
|
|
14
15
|
._1w90azsu._1w90azsu{color:var(--ds-text-subtle,#505258)}
|
|
15
16
|
._2lx21bp4{flex-direction:column}
|
|
16
17
|
._34ir1o36 input{outline-width:medium}
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
._k48p1pd9{font-weight:var(--ds-font-weight-semibold,600)}
|
|
27
28
|
._n3td1ejb{padding-bottom:var(--ds-space-300,24px)}
|
|
28
29
|
._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
|
|
30
|
+
._n3tdv77o{padding-bottom:var(--ds-space-025,2px)}
|
|
29
31
|
._u5f3pxbi{padding-right:var(--ds-space-200,1pc)}
|
|
30
32
|
._u5f3u2gc{padding-right:var(--ds-space-100,8px)}
|
|
31
33
|
._xmji1r31 input{outline-color:currentColor}
|
|
@@ -18,11 +18,14 @@ import FileChooser from './FileChooser';
|
|
|
18
18
|
import { UploadStatus } from './internal-types';
|
|
19
19
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
20
20
|
import Button from '@atlaskit/button/new';
|
|
21
|
+
import { Box } from '@atlaskit/primitives/compiled';
|
|
22
|
+
import { getDocument } from '@atlaskit/browser-apis';
|
|
21
23
|
const closeEmojiUploadButton = null;
|
|
22
24
|
const uploadAddRowNew = null;
|
|
23
25
|
const emojiUpload = null;
|
|
24
26
|
const emojiUploadNew = null;
|
|
25
27
|
const emojiUploadTop = null;
|
|
28
|
+
const emojiUploadTopNew = null;
|
|
26
29
|
const labelStyles = null;
|
|
27
30
|
const uploadChooseFileEmojiName = null;
|
|
28
31
|
const uploadChooseFileMessage = null;
|
|
@@ -53,6 +56,7 @@ const ChooseEmojiFile = /*#__PURE__*/memo(props => {
|
|
|
53
56
|
onUploadCancelled,
|
|
54
57
|
onAddEmoji,
|
|
55
58
|
errorMessage,
|
|
59
|
+
nameErrorMessage,
|
|
56
60
|
previewImage,
|
|
57
61
|
uploadStatus,
|
|
58
62
|
intl
|
|
@@ -84,13 +88,13 @@ const ChooseEmojiFile = /*#__PURE__*/memo(props => {
|
|
|
84
88
|
"data-testid": uploadEmojiComponentTestId,
|
|
85
89
|
className: ax(["_ca0qu2gc _u5f3pxbi _n3tdu2gc _19bvpxbi _1e0c1txw _2lx21bp4 _1bah1b1v"])
|
|
86
90
|
}, /*#__PURE__*/React.createElement("div", {
|
|
87
|
-
className: ax(["_11c8wadc
|
|
91
|
+
className: ax(["_11c8wadc _n3tdv77o _1e0c1txw _1bah1yb4 _4cvresu3"])
|
|
88
92
|
}, /*#__PURE__*/React.createElement("label", {
|
|
89
93
|
htmlFor: "new-emoji-name-input",
|
|
90
94
|
className: ax(["_1w90azsu", "_11c8wadc _k48p1pd9"])
|
|
91
95
|
}, previewImage ? /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiPreviewTitle) : /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel))), /*#__PURE__*/React.createElement("div", {
|
|
92
|
-
className: ax(["
|
|
93
|
-
}, /*#__PURE__*/React.createElement(
|
|
96
|
+
className: ax(["_zulp12x7 _1e0c1txw _2lx21bp4 _1tker0r7"])
|
|
97
|
+
}, /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, () => /*#__PURE__*/React.createElement(FileChooser, {
|
|
94
98
|
label: emojiChooseFileTitle,
|
|
95
99
|
onChange: onChooseFile,
|
|
96
100
|
onClick: onClick,
|
|
@@ -98,6 +102,11 @@ const ChooseEmojiFile = /*#__PURE__*/memo(props => {
|
|
|
98
102
|
ariaDescribedBy: fileChooserButtonDescriptionId,
|
|
99
103
|
previewImage: previewImage,
|
|
100
104
|
previewAlt: name
|
|
105
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
106
|
+
id: fileChooserButtonDescriptionId
|
|
107
|
+
}, errorMessage && /*#__PURE__*/React.createElement(EmojiErrorMessage, {
|
|
108
|
+
errorStyle: "chooseFile",
|
|
109
|
+
message: errorMessage
|
|
101
110
|
}))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", {
|
|
102
111
|
htmlFor: "new-emoji-name-input",
|
|
103
112
|
className: ax(["_1w90azsu", "_11c8wadc _k48p1pd9"])
|
|
@@ -110,16 +119,15 @@ const ChooseEmojiFile = /*#__PURE__*/memo(props => {
|
|
|
110
119
|
value: name,
|
|
111
120
|
isCompact: true,
|
|
112
121
|
autoFocus: true,
|
|
122
|
+
isInvalid: !!nameErrorMessage,
|
|
113
123
|
testId: uploadEmojiNameInputTestId,
|
|
114
124
|
ref: inputRef,
|
|
115
125
|
id: "new-emoji-name-input",
|
|
116
126
|
"aria-required": true
|
|
117
|
-
})
|
|
118
|
-
id: fileChooserButtonDescriptionId
|
|
119
|
-
}, errorMessage && /*#__PURE__*/React.createElement(EmojiErrorMessage, {
|
|
127
|
+
}), nameErrorMessage && /*#__PURE__*/React.createElement(EmojiErrorMessage, {
|
|
120
128
|
errorStyle: "chooseFile",
|
|
121
|
-
message:
|
|
122
|
-
})), /*#__PURE__*/React.createElement("div", {
|
|
129
|
+
message: nameErrorMessage
|
|
130
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
123
131
|
className: ax(["_zulpu2gc _1e0c1txw _1bahesu3 _4cvr1h6o _ca0qpxbi _n3td1ejb"])
|
|
124
132
|
}, /*#__PURE__*/React.createElement(Button, {
|
|
125
133
|
onClick: onUploadCancelled,
|
|
@@ -276,6 +284,7 @@ const EmojiUploadPicker = props => {
|
|
|
276
284
|
setFilename(file.name);
|
|
277
285
|
await ImageUtil.parseImage(f.target.result);
|
|
278
286
|
setPreviewImage(f.target.result);
|
|
287
|
+
setChooseEmojiErrorMessage(undefined);
|
|
279
288
|
} catch {
|
|
280
289
|
setChooseEmojiErrorMessage( /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiInvalidImage));
|
|
281
290
|
cancelChooseFile();
|
|
@@ -306,15 +315,16 @@ const EmojiUploadPicker = props => {
|
|
|
306
315
|
// using setTimeout here to allow the UI to update before setting focus
|
|
307
316
|
setTimeout(lastFocus => {
|
|
308
317
|
if (lastFocus) {
|
|
309
|
-
var
|
|
310
|
-
(
|
|
318
|
+
var _getDocument, _getDocument$getEleme;
|
|
319
|
+
(_getDocument = getDocument()) === null || _getDocument === void 0 ? void 0 : (_getDocument$getEleme = _getDocument.getElementById(lastFocus)) === null || _getDocument$getEleme === void 0 ? void 0 : _getDocument$getEleme.focus();
|
|
311
320
|
}
|
|
312
321
|
}, 0, lastFocusedElementId.current);
|
|
313
322
|
}, [clearUploadPicker, onUploadCancelled]);
|
|
314
323
|
const onChooseFileClicked = () => {
|
|
315
324
|
onFileChooserClicked && onFileChooserClicked();
|
|
316
325
|
};
|
|
317
|
-
const
|
|
326
|
+
const isDuplicateNameError = errorMessage !== null && errorMessage !== undefined && fg('platform_emoji_picker_refresh');
|
|
327
|
+
const content = name && previewImage && !fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement(EmojiUploadPreview, {
|
|
318
328
|
errorMessage: errorMessage,
|
|
319
329
|
name: name,
|
|
320
330
|
onAddEmoji: onAddEmoji,
|
|
@@ -331,9 +341,10 @@ const EmojiUploadPicker = props => {
|
|
|
331
341
|
previewImage: previewImage,
|
|
332
342
|
uploadStatus: uploadStatus,
|
|
333
343
|
errorMessage: chooseEmojiErrorMessage,
|
|
344
|
+
nameErrorMessage: isDuplicateNameError ? errorMessage : undefined,
|
|
334
345
|
intl: intl
|
|
335
346
|
});
|
|
336
|
-
return disableFocusLock ? content : /*#__PURE__*/React.createElement(FocusLock, {
|
|
347
|
+
return disableFocusLock || fg('platform_emoji_picker_refresh') ? content : /*#__PURE__*/React.createElement(FocusLock, {
|
|
337
348
|
noFocusGuards: true
|
|
338
349
|
}, content);
|
|
339
350
|
};
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
._19bvutpp{padding-left:var(--ds-space-150,9pt)}
|
|
8
8
|
._1bah1h6o{justify-content:center}
|
|
9
9
|
._1e0c1txw{display:flex}
|
|
10
|
-
.
|
|
10
|
+
._1oec1ign{transition-duration:var(--ds-duration-short,.15s)}
|
|
11
11
|
._2lx21bp4{flex-direction:column}
|
|
12
12
|
._4cvr1h6o{align-items:center}
|
|
13
13
|
._4t3i7l9q{height:170px}
|
|
14
14
|
._5ral1f51{object-fit:contain}
|
|
15
|
-
.
|
|
15
|
+
._6fl4574g{transition-timing-function:var(--ds-easing-out-practical,ease)}
|
|
16
16
|
._80omtlke{cursor:pointer}
|
|
17
17
|
._bfhkhfxm{background-color:var(--ds-surface-sunken,#f8f8f8)}
|
|
18
18
|
._bfhkufnl{background-color:var(--ds-background-selected-hovered,#cfe1fd)}
|
|
19
|
-
.
|
|
19
|
+
._c71l1j4a{max-height:130px}
|
|
20
20
|
._k8m01rje{transition-property:background-color,border-color}
|
|
21
21
|
._p12f1osq{max-width:100%}
|
|
22
22
|
._u5f3utpp{padding-right:var(--ds-space-150,9pt)}
|