@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
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.withSampling = exports.ufoExperiencesSampled = exports.isExperienceSampled = exports.clearSampled = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
+
|
|
20
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
21
|
+
|
|
22
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
23
|
+
|
|
24
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
25
|
+
|
|
26
|
+
var ufoExperiencesSampled = {};
|
|
27
|
+
exports.ufoExperiencesSampled = ufoExperiencesSampled;
|
|
28
|
+
|
|
29
|
+
var sampleChance = function sampleChance(min, max) {
|
|
30
|
+
// min and max included
|
|
31
|
+
return Math.floor(Math.random() * (max - min + 1) + min);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var clearSampled = function clearSampled() {
|
|
35
|
+
var _iterator = _createForOfIteratorHelper(Object.getOwnPropertyNames(ufoExperiencesSampled)),
|
|
36
|
+
_step;
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
40
|
+
var prop = _step.value;
|
|
41
|
+
delete ufoExperiencesSampled[prop];
|
|
42
|
+
}
|
|
43
|
+
} catch (err) {
|
|
44
|
+
_iterator.e(err);
|
|
45
|
+
} finally {
|
|
46
|
+
_iterator.f();
|
|
47
|
+
}
|
|
48
|
+
}; // default sampling function to determine which one to be sampled
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
exports.clearSampled = clearSampled;
|
|
52
|
+
|
|
53
|
+
var isExperienceSampled = function isExperienceSampled(rate) {
|
|
54
|
+
// if invalid sampling rate provided, we sample it
|
|
55
|
+
if (rate > 1 || rate < 0) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (rate === 1) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (rate === 0) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
var maxCount = Math.ceil(1 / rate);
|
|
68
|
+
var chance = sampleChance(1, maxCount);
|
|
69
|
+
return chance === maxCount;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.isExperienceSampled = isExperienceSampled;
|
|
73
|
+
|
|
74
|
+
var hasSampledFromStart = function hasSampledFromStart(experience) {
|
|
75
|
+
if (!ufoExperiencesSampled[experience.id]) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (experience.instanceId) {
|
|
80
|
+
// if the instance of concurrent exp has been sampled from start, allow it.
|
|
81
|
+
return ufoExperiencesSampled[experience.id].sampledInstance[experience.instanceId];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return ufoExperiencesSampled[experience.id].sampled;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* This function is a temp solution to reduce the event traffic, as UFO package does not support it.
|
|
89
|
+
*
|
|
90
|
+
* e.g. Emoji Picker contains thousands of emojis, which means will trigger a large number of renderred events without sampling
|
|
91
|
+
* @param ufoExperience
|
|
92
|
+
* @returns
|
|
93
|
+
*/
|
|
94
|
+
var withSampling = function withSampling(ufoExperience) {
|
|
95
|
+
var init = function init() {
|
|
96
|
+
if (!ufoExperiencesSampled[ufoExperience.id]) {
|
|
97
|
+
ufoExperiencesSampled[ufoExperience.id] = {
|
|
98
|
+
sampled: false,
|
|
99
|
+
sampledInstance: {}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
var start = /*#__PURE__*/function () {
|
|
105
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
|
|
106
|
+
var isSampled;
|
|
107
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
108
|
+
while (1) {
|
|
109
|
+
switch (_context.prev = _context.next) {
|
|
110
|
+
case 0:
|
|
111
|
+
if (!hasSampledFromStart(ufoExperience)) {
|
|
112
|
+
_context.next = 2;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return _context.abrupt("return");
|
|
117
|
+
|
|
118
|
+
case 2:
|
|
119
|
+
isSampled = options.samplingFunc || isExperienceSampled;
|
|
120
|
+
|
|
121
|
+
if (isSampled(options.samplingRate)) {
|
|
122
|
+
_context.next = 7;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (ufoExperience.instanceId) {
|
|
127
|
+
ufoExperiencesSampled[ufoExperience.id].sampledInstance[ufoExperience.instanceId] = false;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
ufoExperiencesSampled[ufoExperience.id].sampled = false;
|
|
131
|
+
return _context.abrupt("return");
|
|
132
|
+
|
|
133
|
+
case 7:
|
|
134
|
+
// update sampled records
|
|
135
|
+
if (ufoExperience.instanceId) {
|
|
136
|
+
ufoExperiencesSampled[ufoExperience.id].sampledInstance[ufoExperience.instanceId] = true;
|
|
137
|
+
ufoExperiencesSampled[ufoExperience.id].sampled = true;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return _context.abrupt("return", ufoExperience.start(options.startTime));
|
|
141
|
+
|
|
142
|
+
case 9:
|
|
143
|
+
case "end":
|
|
144
|
+
return _context.stop();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}, _callee);
|
|
148
|
+
}));
|
|
149
|
+
|
|
150
|
+
return function start(_x) {
|
|
151
|
+
return _ref.apply(this, arguments);
|
|
152
|
+
};
|
|
153
|
+
}();
|
|
154
|
+
|
|
155
|
+
var success = /*#__PURE__*/function () {
|
|
156
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(config) {
|
|
157
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
158
|
+
while (1) {
|
|
159
|
+
switch (_context2.prev = _context2.next) {
|
|
160
|
+
case 0:
|
|
161
|
+
if (hasSampledFromStart(ufoExperience)) {
|
|
162
|
+
_context2.next = 2;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return _context2.abrupt("return", null);
|
|
167
|
+
|
|
168
|
+
case 2:
|
|
169
|
+
return _context2.abrupt("return", ufoExperience.success(config));
|
|
170
|
+
|
|
171
|
+
case 3:
|
|
172
|
+
case "end":
|
|
173
|
+
return _context2.stop();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}, _callee2);
|
|
177
|
+
}));
|
|
178
|
+
|
|
179
|
+
return function success(_x2) {
|
|
180
|
+
return _ref2.apply(this, arguments);
|
|
181
|
+
};
|
|
182
|
+
}();
|
|
183
|
+
|
|
184
|
+
var failure = /*#__PURE__*/function () {
|
|
185
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(config) {
|
|
186
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
187
|
+
while (1) {
|
|
188
|
+
switch (_context3.prev = _context3.next) {
|
|
189
|
+
case 0:
|
|
190
|
+
if (hasSampledFromStart(ufoExperience)) {
|
|
191
|
+
_context3.next = 2;
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return _context3.abrupt("return", null);
|
|
196
|
+
|
|
197
|
+
case 2:
|
|
198
|
+
return _context3.abrupt("return", ufoExperience.failure(config));
|
|
199
|
+
|
|
200
|
+
case 3:
|
|
201
|
+
case "end":
|
|
202
|
+
return _context3.stop();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}, _callee3);
|
|
206
|
+
}));
|
|
207
|
+
|
|
208
|
+
return function failure(_x3) {
|
|
209
|
+
return _ref3.apply(this, arguments);
|
|
210
|
+
};
|
|
211
|
+
}();
|
|
212
|
+
|
|
213
|
+
var abort = /*#__PURE__*/function () {
|
|
214
|
+
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(config) {
|
|
215
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
216
|
+
while (1) {
|
|
217
|
+
switch (_context4.prev = _context4.next) {
|
|
218
|
+
case 0:
|
|
219
|
+
if (hasSampledFromStart(ufoExperience)) {
|
|
220
|
+
_context4.next = 2;
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return _context4.abrupt("return", null);
|
|
225
|
+
|
|
226
|
+
case 2:
|
|
227
|
+
return _context4.abrupt("return", ufoExperience.abort(config));
|
|
228
|
+
|
|
229
|
+
case 3:
|
|
230
|
+
case "end":
|
|
231
|
+
return _context4.stop();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}, _callee4);
|
|
235
|
+
}));
|
|
236
|
+
|
|
237
|
+
return function abort(_x4) {
|
|
238
|
+
return _ref4.apply(this, arguments);
|
|
239
|
+
};
|
|
240
|
+
}();
|
|
241
|
+
|
|
242
|
+
var mark = function mark(name, timestamp) {
|
|
243
|
+
if (!hasSampledFromStart(ufoExperience)) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return ufoExperience.mark(name, timestamp);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
var markFMP = function markFMP(timestamp) {
|
|
251
|
+
if (!hasSampledFromStart(ufoExperience)) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return ufoExperience.markFMP(timestamp);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
var markInlineResponse = function markInlineResponse(timestamp) {
|
|
259
|
+
if (!hasSampledFromStart(ufoExperience)) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return ufoExperience.markInlineResponse(timestamp);
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
init();
|
|
267
|
+
return _objectSpread(_objectSpread({}, ufoExperience), {}, {
|
|
268
|
+
start: start,
|
|
269
|
+
success: success,
|
|
270
|
+
failure: failure,
|
|
271
|
+
abort: abort,
|
|
272
|
+
mark: mark,
|
|
273
|
+
markFMP: markFMP,
|
|
274
|
+
markInlineResponse: markInlineResponse
|
|
275
|
+
});
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
exports.withSampling = withSampling;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ufoExperiences = exports.sampledUfoRenderedEmoji = void 0;
|
|
7
|
+
|
|
8
|
+
var _ufo = require("@atlaskit/ufo");
|
|
9
|
+
|
|
10
|
+
var _samplingUfo = require("./samplingUfo");
|
|
11
|
+
|
|
12
|
+
var createRenderExperience = function createRenderExperience(componentName) {
|
|
13
|
+
return {
|
|
14
|
+
platform: {
|
|
15
|
+
component: componentName
|
|
16
|
+
},
|
|
17
|
+
type: _ufo.ExperienceTypes.Load,
|
|
18
|
+
performanceType: _ufo.ExperiencePerformanceTypes.PageSegmentLoad
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
var createInlineExperience = function createInlineExperience(componentName) {
|
|
23
|
+
return {
|
|
24
|
+
platform: {
|
|
25
|
+
component: componentName
|
|
26
|
+
},
|
|
27
|
+
type: _ufo.ExperienceTypes.Experience,
|
|
28
|
+
performanceType: _ufo.ExperiencePerformanceTypes.InlineResult
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
var ufoExperiences = {
|
|
33
|
+
'emoji-rendered': new _ufo.ConcurrentExperience('emoji-rendered', createRenderExperience('emoji')),
|
|
34
|
+
'emoji-resource-fetched': new _ufo.ConcurrentExperience('emoji-resource-fetched', createRenderExperience('emoji-provider')),
|
|
35
|
+
'emoji-picker-opened': new _ufo.UFOExperience('emoji-picker-opened', createRenderExperience('emoji-picker')),
|
|
36
|
+
'emoji-selection-recorded': new _ufo.UFOExperience('emoji-selection-recorded', createInlineExperience('emoji-picker')),
|
|
37
|
+
'emoji-uploaded': new _ufo.UFOExperience('emoji-uploaded', createInlineExperience('emoji-picker')),
|
|
38
|
+
'emoji-searched': new _ufo.UFOExperience('emoji-searched', createInlineExperience('emoji-picker'))
|
|
39
|
+
};
|
|
40
|
+
exports.ufoExperiences = ufoExperiences;
|
|
41
|
+
|
|
42
|
+
var sampledUfoRenderedEmoji = function sampledUfoRenderedEmoji(emojiId) {
|
|
43
|
+
return (0, _samplingUfo.withSampling)(ufoExperiences['emoji-rendered'].getInstance(emojiId.id || emojiId.shortName));
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
exports.sampledUfoRenderedEmoji = sampledUfoRenderedEmoji;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSampledUFOComponentExperience = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _samplingUfo = require("./samplingUfo");
|
|
11
|
+
|
|
12
|
+
var useConstructor = function useConstructor(callback) {
|
|
13
|
+
var hasBeenFired = (0, _react.useRef)(false);
|
|
14
|
+
|
|
15
|
+
if (!hasBeenFired.current) {
|
|
16
|
+
callback();
|
|
17
|
+
hasBeenFired.current = true;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* A hook to start an experience and to auto abort the experience when the parent component is unmounted.
|
|
24
|
+
* Use this instead of a direct call to `experience.start`. If you need to restart the experience
|
|
25
|
+
* simply trigger an unmount and remount of the parent component.
|
|
26
|
+
* @param experience the experience to start and abort
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
var useSampledUFOComponentExperience = function useSampledUFOComponentExperience(experience, samplingRate, metadata) {
|
|
31
|
+
(0, _react.useEffect)(function () {
|
|
32
|
+
return function () {
|
|
33
|
+
(0, _samplingUfo.withSampling)(experience).abort();
|
|
34
|
+
}; // we want this cleanup to only happen on unmount so this is a legit use of empty array
|
|
35
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
36
|
+
}, []);
|
|
37
|
+
useConstructor(function () {
|
|
38
|
+
(0, _samplingUfo.withSampling)(experience).start({
|
|
39
|
+
samplingRate: samplingRate
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (metadata) {
|
|
43
|
+
experience.addMetadata(metadata);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return null;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.useSampledUFOComponentExperience = useSampledUFOComponentExperience;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.userCustomTitle = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.MAX_ORDINAL = void 0;
|
|
6
|
+
exports.userCustomTitle = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI = exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = exports.MAX_ORDINAL = void 0;
|
|
7
7
|
var customCategory = 'CUSTOM';
|
|
8
8
|
exports.customCategory = customCategory;
|
|
9
9
|
var frequentCategory = 'FREQUENT';
|
|
@@ -41,5 +41,12 @@ var defaultListLimit = 50;
|
|
|
41
41
|
exports.defaultListLimit = defaultListLimit;
|
|
42
42
|
var migrationUserId = 'hipchat_migration_emoticons';
|
|
43
43
|
exports.migrationUserId = migrationUserId;
|
|
44
|
-
var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker';
|
|
45
|
-
|
|
44
|
+
var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker'; // This is the base sampling rate in Emoji
|
|
45
|
+
|
|
46
|
+
exports.analyticsEmojiPrefix = analyticsEmojiPrefix;
|
|
47
|
+
var SAMPLING_RATE_EMOJI_RENDERED_EXP = 0.05; // This rate is used in ResourceEmoji which will be used in stead of base sampling rate above
|
|
48
|
+
|
|
49
|
+
exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = SAMPLING_RATE_EMOJI_RENDERED_EXP;
|
|
50
|
+
var SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI = 0.1; // add more sampling rate in parent components like EmojiTypeAheadItem.
|
|
51
|
+
|
|
52
|
+
exports.SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI = SAMPLING_RATE_EMOJI_RENDERED_EXP_RESOURCEEMOJI;
|
package/dist/cjs/version.json
CHANGED
|
@@ -3,10 +3,12 @@ import { AbstractResource, utils as serviceUtils } from '@atlaskit/util-service-
|
|
|
3
3
|
import { selectedToneStorageKey } from '../util/constants';
|
|
4
4
|
import { isMediaEmoji, isPromise, toEmojiId } from '../util/type-helpers';
|
|
5
5
|
import storageAvailable from '../util/storage-available';
|
|
6
|
+
import { ProviderTypes } from '../types';
|
|
6
7
|
import debug from '../util/logger';
|
|
7
8
|
import EmojiLoader from './EmojiLoader';
|
|
8
9
|
import EmojiRepository from './EmojiRepository';
|
|
9
10
|
import SiteEmojiResource from './media/SiteEmojiResource';
|
|
11
|
+
import { ufoExperiences } from '../util/analytics';
|
|
10
12
|
|
|
11
13
|
/**
|
|
12
14
|
* Checks if the emojiProvider can support uploading at a feature level.
|
|
@@ -38,6 +40,11 @@ export class EmojiResource extends AbstractResource {
|
|
|
38
40
|
const emojiResponses = [];
|
|
39
41
|
this.activeLoaders = config.providers.length;
|
|
40
42
|
config.providers.forEach((provider, index) => {
|
|
43
|
+
const providerType = this.getProviderType(provider);
|
|
44
|
+
ufoExperiences['emoji-resource-fetched'].getInstance(providerType).start();
|
|
45
|
+
ufoExperiences['emoji-resource-fetched'].getInstance(providerType).addMetadata({
|
|
46
|
+
type: providerType
|
|
47
|
+
});
|
|
41
48
|
const loader = new EmojiLoader(provider);
|
|
42
49
|
const emojis = loader.loadEmoji();
|
|
43
50
|
emojis.then(emojiResponse => {
|
|
@@ -46,11 +53,19 @@ export class EmojiResource extends AbstractResource {
|
|
|
46
53
|
this.initSiteEmojiResource(emojiResponse, provider).then(() => {
|
|
47
54
|
this.activeLoaders--;
|
|
48
55
|
this.performRetries();
|
|
49
|
-
this.refreshLastFilter();
|
|
56
|
+
this.refreshLastFilter(); // if not site emoji it would still resolve
|
|
57
|
+
// TODO: improve the logic in future
|
|
58
|
+
|
|
59
|
+
ufoExperiences['emoji-resource-fetched'].getInstance(providerType).success();
|
|
50
60
|
});
|
|
51
61
|
}).catch(reason => {
|
|
52
62
|
this.activeLoaders--;
|
|
53
63
|
this.notifyError(reason);
|
|
64
|
+
ufoExperiences['emoji-resource-fetched'].getInstance(providerType).failure({
|
|
65
|
+
metadata: {
|
|
66
|
+
reason
|
|
67
|
+
}
|
|
68
|
+
});
|
|
54
69
|
});
|
|
55
70
|
});
|
|
56
71
|
|
|
@@ -63,6 +78,18 @@ export class EmojiResource extends AbstractResource {
|
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
80
|
|
|
81
|
+
getProviderType(provider) {
|
|
82
|
+
if (provider.url.includes('/site')) {
|
|
83
|
+
return ProviderTypes.SITE;
|
|
84
|
+
} else if (provider.url.includes('/standard')) {
|
|
85
|
+
return ProviderTypes.STANDARD;
|
|
86
|
+
} else if (provider.url.includes('/atlassian')) {
|
|
87
|
+
return ProviderTypes.ATLASSIAN;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return ProviderTypes.UNKNOWN;
|
|
91
|
+
}
|
|
92
|
+
|
|
66
93
|
initEmojiRepository(emojiResponses) {
|
|
67
94
|
let emojis = [];
|
|
68
95
|
emojiResponses.forEach(emojiResponse => {
|
|
@@ -163,7 +163,11 @@ export default class SiteEmojiResource {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
findEmoji(emojiId) {
|
|
166
|
-
|
|
166
|
+
if (!emojiId.id) {
|
|
167
|
+
return Promise.reject(false);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const path = `../${encodeURIComponent(emojiId.id)}`;
|
|
167
171
|
return emojiRequest(this.siteServiceConfig, {
|
|
168
172
|
path
|
|
169
173
|
}).then(serviceResponse => {
|
|
@@ -186,7 +190,11 @@ export default class SiteEmojiResource {
|
|
|
186
190
|
return Promise.reject(false);
|
|
187
191
|
}
|
|
188
192
|
|
|
189
|
-
|
|
193
|
+
if (!emoji.id) {
|
|
194
|
+
return Promise.reject(false);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const path = `${encodeURIComponent(emoji.id)}`;
|
|
190
198
|
const requestInit = {
|
|
191
199
|
method: 'DELETE'
|
|
192
200
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import PropTypes from 'prop-types';
|
|
3
4
|
import React from 'react';
|
|
4
5
|
import { PureComponent } from 'react';
|
|
5
6
|
import { shouldUseAltRepresentation } from '../../api/EmojiUtils';
|
|
@@ -7,7 +8,9 @@ import { isEmojiDescription, isMediaEmoji, isPromise } from '../../util/type-hel
|
|
|
7
8
|
import debug from '../../util/logger';
|
|
8
9
|
import Emoji from './Emoji';
|
|
9
10
|
import EmojiPlaceholder from './EmojiPlaceholder';
|
|
10
|
-
import {
|
|
11
|
+
import { UfoErrorBoundary } from './UfoErrorBoundary';
|
|
12
|
+
import { sampledUfoRenderedEmoji, ufoExperiences, useSampledUFOComponentExperience } from '../../util/analytics';
|
|
13
|
+
import { SAMPLING_RATE_EMOJI_RENDERED_EXP } from '../../util/constants';
|
|
11
14
|
|
|
12
15
|
/**
|
|
13
16
|
* Renders an emoji from a cached image, if required.
|
|
@@ -18,13 +21,23 @@ export const CachingEmoji = props => {
|
|
|
18
21
|
const {
|
|
19
22
|
placeholderSize,
|
|
20
23
|
...emojiProps
|
|
21
|
-
} = props;
|
|
24
|
+
} = props; // start emoji rendered experience, it may have already started earlier in ResourcedEmoji
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
+
useSampledUFOComponentExperience(ufoExperiences['emoji-rendered'].getInstance(emojiProps.emoji.id || emojiProps.emoji.shortName), SAMPLING_RATE_EMOJI_RENDERED_EXP, {
|
|
27
|
+
source: 'caching-emoji'
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const emojiNode = () => {
|
|
31
|
+
if (isMediaEmoji(props.emoji)) {
|
|
32
|
+
return /*#__PURE__*/React.createElement(CachingMediaEmoji, props);
|
|
33
|
+
}
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
return /*#__PURE__*/React.createElement(Emoji, emojiProps);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
return /*#__PURE__*/React.createElement(UfoErrorBoundary, {
|
|
39
|
+
experiences: [ufoExperiences['emoji-rendered'].getInstance(props.emoji.id || props.emoji.shortName)]
|
|
40
|
+
}, emojiNode());
|
|
28
41
|
};
|
|
29
42
|
/**
|
|
30
43
|
* Rendering a media emoji image from a cache for media emoji, with different
|
|
@@ -33,7 +46,7 @@ export const CachingEmoji = props => {
|
|
|
33
46
|
|
|
34
47
|
export class CachingMediaEmoji extends PureComponent {
|
|
35
48
|
constructor(props, context) {
|
|
36
|
-
super(props);
|
|
49
|
+
super(props, context);
|
|
37
50
|
|
|
38
51
|
_defineProperty(this, "mounted", false);
|
|
39
52
|
|
|
@@ -41,6 +54,11 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
41
54
|
const {
|
|
42
55
|
invalidImage
|
|
43
56
|
} = this.state;
|
|
57
|
+
sampledUfoRenderedEmoji(_emojiId).failure({
|
|
58
|
+
metadata: {
|
|
59
|
+
reason: 'load error'
|
|
60
|
+
}
|
|
61
|
+
});
|
|
44
62
|
|
|
45
63
|
if (invalidImage || !emoji) {
|
|
46
64
|
// do nothing, bad image
|
|
@@ -59,6 +77,7 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
59
77
|
|
|
60
78
|
componentDidMount() {
|
|
61
79
|
this.mounted = true;
|
|
80
|
+
sampledUfoRenderedEmoji(this.props.emoji).markFMP();
|
|
62
81
|
}
|
|
63
82
|
|
|
64
83
|
componentWillUnmount() {
|
|
@@ -76,10 +95,6 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
76
95
|
}
|
|
77
96
|
|
|
78
97
|
loadEmoji(emoji, context, forceLoad) {
|
|
79
|
-
if (!context) {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
98
|
if (!context.emoji) {
|
|
84
99
|
return undefined;
|
|
85
100
|
}
|
|
@@ -120,6 +135,11 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
120
135
|
cachedEmoji: undefined,
|
|
121
136
|
invalidImage: true
|
|
122
137
|
});
|
|
138
|
+
sampledUfoRenderedEmoji(emoji).failure({
|
|
139
|
+
metadata: {
|
|
140
|
+
reason: 'failed to load media emoji'
|
|
141
|
+
}
|
|
142
|
+
});
|
|
123
143
|
}
|
|
124
144
|
});
|
|
125
145
|
return undefined;
|
|
@@ -172,6 +192,8 @@ export class CachingMediaEmoji extends PureComponent {
|
|
|
172
192
|
|
|
173
193
|
}
|
|
174
194
|
|
|
175
|
-
_defineProperty(CachingMediaEmoji, "
|
|
195
|
+
_defineProperty(CachingMediaEmoji, "contextTypes", {
|
|
196
|
+
emoji: PropTypes.object
|
|
197
|
+
});
|
|
176
198
|
|
|
177
199
|
export default CachingEmoji;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { jsx } from '@emotion/core';
|
|
1
3
|
import Button from '@atlaskit/button/custom-theme-button';
|
|
2
4
|
import CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';
|
|
3
|
-
import React from 'react';
|
|
4
5
|
import { token } from '@atlaskit/tokens';
|
|
5
6
|
import { N500 } from '@atlaskit/theme/colors';
|
|
6
7
|
import { deleteEmojiLabel } from '../../util/constants';
|
|
7
|
-
import
|
|
8
|
+
import { emojiDeleteButton, deleteButton } from './styles';
|
|
8
9
|
|
|
9
|
-
const DeleteButton = props =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const DeleteButton = props => jsx("span", {
|
|
11
|
+
css: deleteButton,
|
|
12
|
+
className: emojiDeleteButton
|
|
13
|
+
}, jsx(Button, {
|
|
14
|
+
iconBefore: jsx(CrossCircleIcon, {
|
|
13
15
|
label: deleteEmojiLabel,
|
|
14
16
|
primaryColor: token('color.text.subtle', N500),
|
|
15
17
|
size: "small"
|