@atlaskit/emoji 71.16.4 → 71.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 71.17.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 71.17.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`a32f36ef87959`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a32f36ef87959) -
14
+ Gated behind `add_emoji_media_size_to_media_file_upload_request`, switches emoji upload to use
15
+ media client uploadExternal function.
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies
20
+
3
21
  ## 71.16.4
4
22
 
5
23
  ### Patch Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.mediaProportionOfProgress = exports.getDataUrlSizeInBytes = exports.default = void 0;
7
+ exports.mediaProportionOfProgress = exports.default = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
@@ -25,27 +25,6 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
25
25
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
26
26
  // Assume media is 95% of total upload time.
27
27
  var mediaProportionOfProgress = exports.mediaProportionOfProgress = 95 / 100;
28
- var getDataUrlSizeInBytes = exports.getDataUrlSizeInBytes = function getDataUrlSizeInBytes(dataURL) {
29
- var separatorIndex = dataURL.indexOf(',');
30
- if (separatorIndex === -1) {
31
- return undefined;
32
- }
33
- var metadata = dataURL.slice(0, separatorIndex);
34
- var data = dataURL.slice(separatorIndex + 1);
35
- if (!data) {
36
- return undefined;
37
- }
38
- if (metadata.includes(';base64')) {
39
- var _data$match;
40
- var padding = ((_data$match = data.match(/=*$/)) === null || _data$match === void 0 ? void 0 : _data$match[0].length) || 0;
41
- return Math.floor(data.length * 3 / 4) - padding;
42
- }
43
- try {
44
- return new TextEncoder().encode(decodeURIComponent(data)).length;
45
- } catch (_unused) {
46
- return data.length;
47
- }
48
- };
49
28
  var SiteEmojiResource = exports.default = /*#__PURE__*/function () {
50
29
  // @ts-ignore: I am not being read from, should I be deleted???
51
30
 
@@ -210,35 +189,64 @@ var SiteEmojiResource = exports.default = /*#__PURE__*/function () {
210
189
  },
211
190
  useSha256ForUploads: true
212
191
  });
213
- var size = (0, _fg.fg)('add_emoji_media_size_to_media_file_upload_request') ? getDataUrlSizeInBytes(upload.dataURL) : undefined;
214
- var subscription = mediaClient.file.upload(_objectSpread({
215
- content: upload.dataURL,
216
- name: upload.filename,
217
- collection: collectionName
218
- }, size !== undefined ? {
219
- size: size
220
- } : {})).subscribe({
221
- next: function next(state) {
222
- if (state.status === 'uploading' && progressCallback) {
223
- progressCallback({
224
- percent: state.progress * mediaProportionOfProgress
225
- });
226
- } else if (state.status === 'processing' || state.status === 'processed') {
227
- subscription.unsubscribe();
228
- var totalUploadTime = Date.now() - startTime;
229
- var mediaUploadTime = totalUploadTime - tokenLoadTime;
230
- (0, _logger.default)('total upload / media upload times', totalUploadTime, mediaUploadTime);
231
- _this2.postToEmojiService(upload, state.id).then(function (emoji) {
232
- resolve(emoji);
233
- }).catch(function (httpError) {
234
- reject(httpError.reason || httpError);
235
- });
192
+ if ((0, _fg.fg)('add_emoji_media_size_to_media_file_upload_request')) {
193
+ mediaClient.file.uploadExternal(upload.dataURL, collectionName, undefined, true).then(function (_ref3) {
194
+ var uploadableFileUpfrontIds = _ref3.uploadableFileUpfrontIds;
195
+ var subscription = mediaClient.file.getFileState(uploadableFileUpfrontIds.id, {
196
+ collectionName: collectionName
197
+ }).subscribe({
198
+ next: function next(state) {
199
+ if (state.status === 'uploading' && progressCallback) {
200
+ progressCallback({
201
+ percent: state.progress * mediaProportionOfProgress
202
+ });
203
+ } else if (state.status === 'processing' || state.status === 'processed') {
204
+ subscription.unsubscribe();
205
+ var totalUploadTime = Date.now() - startTime;
206
+ var mediaUploadTime = totalUploadTime - tokenLoadTime;
207
+ (0, _logger.default)('total upload / media upload times', totalUploadTime, mediaUploadTime);
208
+ _this2.postToEmojiService(upload, uploadableFileUpfrontIds.id).then(function (emoji) {
209
+ resolve(emoji);
210
+ }).catch(function (httpError) {
211
+ reject(httpError.reason || httpError);
212
+ });
213
+ }
214
+ },
215
+ error: function error(_error) {
216
+ reject(_error);
217
+ }
218
+ });
219
+ }).catch(function (error) {
220
+ reject(error);
221
+ });
222
+ } else {
223
+ var subscription = mediaClient.file.upload({
224
+ content: upload.dataURL,
225
+ name: upload.filename,
226
+ collection: collectionName
227
+ }).subscribe({
228
+ next: function next(state) {
229
+ if (state.status === 'uploading' && progressCallback) {
230
+ progressCallback({
231
+ percent: state.progress * mediaProportionOfProgress
232
+ });
233
+ } else if (state.status === 'processing' || state.status === 'processed') {
234
+ subscription.unsubscribe();
235
+ var totalUploadTime = Date.now() - startTime;
236
+ var mediaUploadTime = totalUploadTime - tokenLoadTime;
237
+ (0, _logger.default)('total upload / media upload times', totalUploadTime, mediaUploadTime);
238
+ _this2.postToEmojiService(upload, state.id).then(function (emoji) {
239
+ resolve(emoji);
240
+ }).catch(function (httpError) {
241
+ reject(httpError.reason || httpError);
242
+ });
243
+ }
244
+ },
245
+ error: function error(_error2) {
246
+ reject(_error2);
236
247
  }
237
- },
238
- error: function error(_error) {
239
- reject(_error);
240
- }
241
- });
248
+ });
249
+ }
242
250
  });
243
251
  });
244
252
  }
@@ -369,7 +369,6 @@ var ImageEmoji = exports.ImageEmoji = function ImageEmoji(props) {
369
369
  }
370
370
  }, [inView, onBeforeLoad]);
371
371
  var emojiNode = /*#__PURE__*/_react.default.createElement("img", (0, _extends2.default)({
372
- //@ts-ignore
373
372
  loading: disableLazyLoad ? 'eager' : 'lazy',
374
373
  src: src,
375
374
  key: src,
@@ -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: "71.16.3"
23
+ packageVersion: "71.17.0"
24
24
  }, attributes)
25
25
  };
26
26
  };
@@ -9,27 +9,6 @@ import TokenManager from './TokenManager';
9
9
  import debug from '../../util/logger';
10
10
  // Assume media is 95% of total upload time.
11
11
  export const mediaProportionOfProgress = 95 / 100;
12
- export const getDataUrlSizeInBytes = dataURL => {
13
- const separatorIndex = dataURL.indexOf(',');
14
- if (separatorIndex === -1) {
15
- return undefined;
16
- }
17
- const metadata = dataURL.slice(0, separatorIndex);
18
- const data = dataURL.slice(separatorIndex + 1);
19
- if (!data) {
20
- return undefined;
21
- }
22
- if (metadata.includes(';base64')) {
23
- var _data$match;
24
- const padding = ((_data$match = data.match(/=*$/)) === null || _data$match === void 0 ? void 0 : _data$match[0].length) || 0;
25
- return Math.floor(data.length * 3 / 4) - padding;
26
- }
27
- try {
28
- return new TextEncoder().encode(decodeURIComponent(data)).length;
29
- } catch {
30
- return data.length;
31
- }
32
- };
33
12
  export default class SiteEmojiResource {
34
13
  // @ts-ignore: I am not being read from, should I be deleted???
35
14
 
@@ -167,36 +146,65 @@ export default class SiteEmojiResource {
167
146
  }),
168
147
  useSha256ForUploads: true
169
148
  });
170
- const size = fg('add_emoji_media_size_to_media_file_upload_request') ? getDataUrlSizeInBytes(upload.dataURL) : undefined;
171
- const subscription = mediaClient.file.upload({
172
- content: upload.dataURL,
173
- name: upload.filename,
174
- collection: collectionName,
175
- ...(size !== undefined ? {
176
- size
177
- } : {})
178
- }).subscribe({
179
- next: state => {
180
- if (state.status === 'uploading' && progressCallback) {
181
- progressCallback({
182
- percent: state.progress * mediaProportionOfProgress
183
- });
184
- } else if (state.status === 'processing' || state.status === 'processed') {
185
- subscription.unsubscribe();
186
- const totalUploadTime = Date.now() - startTime;
187
- const mediaUploadTime = totalUploadTime - tokenLoadTime;
188
- debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
189
- this.postToEmojiService(upload, state.id).then(emoji => {
190
- resolve(emoji);
191
- }).catch(httpError => {
192
- reject(httpError.reason || httpError);
193
- });
194
- }
195
- },
196
- error(error) {
149
+ if (fg('add_emoji_media_size_to_media_file_upload_request')) {
150
+ mediaClient.file.uploadExternal(upload.dataURL, collectionName, undefined, true).then(({
151
+ uploadableFileUpfrontIds
152
+ }) => {
153
+ const subscription = mediaClient.file.getFileState(uploadableFileUpfrontIds.id, {
154
+ collectionName
155
+ }).subscribe({
156
+ next: state => {
157
+ if (state.status === 'uploading' && progressCallback) {
158
+ progressCallback({
159
+ percent: state.progress * mediaProportionOfProgress
160
+ });
161
+ } else if (state.status === 'processing' || state.status === 'processed') {
162
+ subscription.unsubscribe();
163
+ const totalUploadTime = Date.now() - startTime;
164
+ const mediaUploadTime = totalUploadTime - tokenLoadTime;
165
+ debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
166
+ this.postToEmojiService(upload, uploadableFileUpfrontIds.id).then(emoji => {
167
+ resolve(emoji);
168
+ }).catch(httpError => {
169
+ reject(httpError.reason || httpError);
170
+ });
171
+ }
172
+ },
173
+ error(error) {
174
+ reject(error);
175
+ }
176
+ });
177
+ }).catch(error => {
197
178
  reject(error);
198
- }
199
- });
179
+ });
180
+ } else {
181
+ const subscription = mediaClient.file.upload({
182
+ content: upload.dataURL,
183
+ name: upload.filename,
184
+ collection: collectionName
185
+ }).subscribe({
186
+ next: state => {
187
+ if (state.status === 'uploading' && progressCallback) {
188
+ progressCallback({
189
+ percent: state.progress * mediaProportionOfProgress
190
+ });
191
+ } else if (state.status === 'processing' || state.status === 'processed') {
192
+ subscription.unsubscribe();
193
+ const totalUploadTime = Date.now() - startTime;
194
+ const mediaUploadTime = totalUploadTime - tokenLoadTime;
195
+ debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
196
+ this.postToEmojiService(upload, state.id).then(emoji => {
197
+ resolve(emoji);
198
+ }).catch(httpError => {
199
+ reject(httpError.reason || httpError);
200
+ });
201
+ }
202
+ },
203
+ error(error) {
204
+ reject(error);
205
+ }
206
+ });
207
+ }
200
208
  });
201
209
  });
202
210
  }
@@ -363,7 +363,6 @@ export const ImageEmoji = props => {
363
363
  }
364
364
  }, [inView, onBeforeLoad]);
365
365
  const emojiNode = /*#__PURE__*/React.createElement("img", _extends({
366
- //@ts-ignore
367
366
  loading: disableLazyLoad ? 'eager' : 'lazy',
368
367
  src: src,
369
368
  key: src,
@@ -9,7 +9,7 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
9
9
  actionSubjectId,
10
10
  attributes: {
11
11
  packageName: "@atlaskit/emoji",
12
- packageVersion: "71.16.3",
12
+ packageVersion: "71.17.0",
13
13
  ...attributes
14
14
  }
15
15
  });
@@ -18,27 +18,6 @@ import TokenManager from './TokenManager';
18
18
  import debug from '../../util/logger';
19
19
  // Assume media is 95% of total upload time.
20
20
  export var mediaProportionOfProgress = 95 / 100;
21
- export var getDataUrlSizeInBytes = function getDataUrlSizeInBytes(dataURL) {
22
- var separatorIndex = dataURL.indexOf(',');
23
- if (separatorIndex === -1) {
24
- return undefined;
25
- }
26
- var metadata = dataURL.slice(0, separatorIndex);
27
- var data = dataURL.slice(separatorIndex + 1);
28
- if (!data) {
29
- return undefined;
30
- }
31
- if (metadata.includes(';base64')) {
32
- var _data$match;
33
- var padding = ((_data$match = data.match(/=*$/)) === null || _data$match === void 0 ? void 0 : _data$match[0].length) || 0;
34
- return Math.floor(data.length * 3 / 4) - padding;
35
- }
36
- try {
37
- return new TextEncoder().encode(decodeURIComponent(data)).length;
38
- } catch (_unused) {
39
- return data.length;
40
- }
41
- };
42
21
  var SiteEmojiResource = /*#__PURE__*/function () {
43
22
  // @ts-ignore: I am not being read from, should I be deleted???
44
23
 
@@ -203,35 +182,64 @@ var SiteEmojiResource = /*#__PURE__*/function () {
203
182
  },
204
183
  useSha256ForUploads: true
205
184
  });
206
- var size = fg('add_emoji_media_size_to_media_file_upload_request') ? getDataUrlSizeInBytes(upload.dataURL) : undefined;
207
- var subscription = mediaClient.file.upload(_objectSpread({
208
- content: upload.dataURL,
209
- name: upload.filename,
210
- collection: collectionName
211
- }, size !== undefined ? {
212
- size: size
213
- } : {})).subscribe({
214
- next: function next(state) {
215
- if (state.status === 'uploading' && progressCallback) {
216
- progressCallback({
217
- percent: state.progress * mediaProportionOfProgress
218
- });
219
- } else if (state.status === 'processing' || state.status === 'processed') {
220
- subscription.unsubscribe();
221
- var totalUploadTime = Date.now() - startTime;
222
- var mediaUploadTime = totalUploadTime - tokenLoadTime;
223
- debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
224
- _this2.postToEmojiService(upload, state.id).then(function (emoji) {
225
- resolve(emoji);
226
- }).catch(function (httpError) {
227
- reject(httpError.reason || httpError);
228
- });
185
+ if (fg('add_emoji_media_size_to_media_file_upload_request')) {
186
+ mediaClient.file.uploadExternal(upload.dataURL, collectionName, undefined, true).then(function (_ref3) {
187
+ var uploadableFileUpfrontIds = _ref3.uploadableFileUpfrontIds;
188
+ var subscription = mediaClient.file.getFileState(uploadableFileUpfrontIds.id, {
189
+ collectionName: collectionName
190
+ }).subscribe({
191
+ next: function next(state) {
192
+ if (state.status === 'uploading' && progressCallback) {
193
+ progressCallback({
194
+ percent: state.progress * mediaProportionOfProgress
195
+ });
196
+ } else if (state.status === 'processing' || state.status === 'processed') {
197
+ subscription.unsubscribe();
198
+ var totalUploadTime = Date.now() - startTime;
199
+ var mediaUploadTime = totalUploadTime - tokenLoadTime;
200
+ debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
201
+ _this2.postToEmojiService(upload, uploadableFileUpfrontIds.id).then(function (emoji) {
202
+ resolve(emoji);
203
+ }).catch(function (httpError) {
204
+ reject(httpError.reason || httpError);
205
+ });
206
+ }
207
+ },
208
+ error: function error(_error) {
209
+ reject(_error);
210
+ }
211
+ });
212
+ }).catch(function (error) {
213
+ reject(error);
214
+ });
215
+ } else {
216
+ var subscription = mediaClient.file.upload({
217
+ content: upload.dataURL,
218
+ name: upload.filename,
219
+ collection: collectionName
220
+ }).subscribe({
221
+ next: function next(state) {
222
+ if (state.status === 'uploading' && progressCallback) {
223
+ progressCallback({
224
+ percent: state.progress * mediaProportionOfProgress
225
+ });
226
+ } else if (state.status === 'processing' || state.status === 'processed') {
227
+ subscription.unsubscribe();
228
+ var totalUploadTime = Date.now() - startTime;
229
+ var mediaUploadTime = totalUploadTime - tokenLoadTime;
230
+ debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
231
+ _this2.postToEmojiService(upload, state.id).then(function (emoji) {
232
+ resolve(emoji);
233
+ }).catch(function (httpError) {
234
+ reject(httpError.reason || httpError);
235
+ });
236
+ }
237
+ },
238
+ error: function error(_error2) {
239
+ reject(_error2);
229
240
  }
230
- },
231
- error: function error(_error) {
232
- reject(_error);
233
- }
234
- });
241
+ });
242
+ }
235
243
  });
236
244
  });
237
245
  }
@@ -360,7 +360,6 @@ export var ImageEmoji = function ImageEmoji(props) {
360
360
  }
361
361
  }, [inView, onBeforeLoad]);
362
362
  var emojiNode = /*#__PURE__*/React.createElement("img", _extends({
363
- //@ts-ignore
364
363
  loading: disableLazyLoad ? 'eager' : 'lazy',
365
364
  src: src,
366
365
  key: src,
@@ -14,7 +14,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
14
14
  actionSubjectId: actionSubjectId,
15
15
  attributes: _objectSpread({
16
16
  packageName: "@atlaskit/emoji",
17
- packageVersion: "71.16.3"
17
+ packageVersion: "71.17.0"
18
18
  }, attributes)
19
19
  };
20
20
  };
@@ -15,7 +15,6 @@ type TokenisedEmojiRepresentation = {
15
15
  representation?: EmojiRepresentation;
16
16
  };
17
17
  export declare const mediaProportionOfProgress: number;
18
- export declare const getDataUrlSizeInBytes: (dataURL: string) => number | undefined;
19
18
  export default class SiteEmojiResource {
20
19
  private siteServiceConfig;
21
20
  private mediaApiToken;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "71.16.4",
3
+ "version": "71.17.1",
4
4
  "description": "Fabric emoji React components",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -50,7 +50,7 @@
50
50
  "@atlaskit/spinner": "^20.1.0",
51
51
  "@atlaskit/textfield": "^10.0.0",
52
52
  "@atlaskit/theme": "^28.0.0",
53
- "@atlaskit/tmp-editor-statsig": "^147.0.0",
53
+ "@atlaskit/tmp-editor-statsig": "^148.0.0",
54
54
  "@atlaskit/tokens": "^16.7.0",
55
55
  "@atlaskit/tooltip": "^24.0.0",
56
56
  "@atlaskit/ufo": "^1.0.0",
package/emoji.docs.tsx DELETED
@@ -1,96 +0,0 @@
1
- /**
2
- * Structured MCP docs for `@atlaskit/emoji`.
3
- */
4
-
5
- import path from 'path';
6
-
7
- import type { StructuredContentSource } from '@atlassian/structured-docs-types/types';
8
-
9
- import packageJson from './package.json';
10
-
11
- const packagePath = path.resolve(__dirname);
12
-
13
- const documentation: StructuredContentSource = {
14
- package: {
15
- package: '@atlaskit/emoji',
16
- packagePath,
17
- packageJson,
18
- overview:
19
- 'React components and utilities for displaying and picking emojis. It includes support for standard emojis, custom emojis, and skin tone variations.',
20
- },
21
- components: [
22
- {
23
- name: 'Emoji',
24
- description: 'A component for displaying a single emoji.',
25
- status: 'general-availability',
26
- import: {
27
- name: 'Emoji',
28
- package: '@atlaskit/emoji',
29
- type: 'named',
30
- packagePath,
31
- packageJson,
32
- },
33
- usageGuidelines: ['Use `Emoji` to render a specific emoji by its ID or short name.'],
34
- keywords: ['emoji', 'display'],
35
- categories: ['elements'],
36
- examples: [
37
- {
38
- name: 'Simple emoji',
39
- description: 'Basic usage of the Emoji component.',
40
- source: path.resolve(packagePath, './examples/00-simple-emoji.tsx'),
41
- },
42
- ],
43
- },
44
- {
45
- name: 'EmojiPicker',
46
- description: 'A component that provides a searchable picker for emojis.',
47
- status: 'general-availability',
48
- import: {
49
- name: 'EmojiPicker',
50
- package: '@atlaskit/emoji',
51
- type: 'named',
52
- packagePath,
53
- packageJson,
54
- },
55
- usageGuidelines: [
56
- 'Use `EmojiPicker` when you need to allow users to select an emoji from a list.',
57
- 'Requires an `EmojiResource` to fetch and manage emoji data.',
58
- ],
59
- keywords: ['emoji', 'picker', 'select'],
60
- categories: ['elements'],
61
- examples: [
62
- {
63
- name: 'Emoji picker with usage',
64
- description: 'Emoji picker with frequently used emojis tracked.',
65
- source: path.resolve(packagePath, './examples/06-emoji-picker-with-usage.tsx'),
66
- },
67
- ],
68
- },
69
- {
70
- name: 'EmojiTypeAhead',
71
- description: 'A component that provides emoji suggestions based on user input.',
72
- status: 'general-availability',
73
- import: {
74
- name: 'EmojiTypeAhead',
75
- package: '@atlaskit/emoji',
76
- type: 'named',
77
- packagePath,
78
- packageJson,
79
- },
80
- usageGuidelines: [
81
- 'Use `EmojiTypeAhead` to provide a shortcut-based emoji selection experience (e.g., typing `:smile`).',
82
- ],
83
- keywords: ['emoji', 'typeahead', 'autocomplete'],
84
- categories: ['elements'],
85
- examples: [
86
- {
87
- name: 'Standard emoji typeahead',
88
- description: 'Basic usage of EmojiTypeAhead.',
89
- source: path.resolve(packagePath, './examples/03-standard-emoji-typeahead.tsx'),
90
- },
91
- ],
92
- },
93
- ],
94
- };
95
-
96
- export default documentation;