@atlaskit/emoji 71.16.4 → 71.17.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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 71.17.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`a32f36ef87959`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a32f36ef87959) -
8
+ Gated behind `add_emoji_media_size_to_media_file_upload_request`, switches emoji upload to use
9
+ media client uploadExternal function.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 71.16.4
4
16
 
5
17
  ### 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
  }
@@ -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.16.4"
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
  }
@@ -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.16.4",
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
  }
@@ -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.16.4"
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.0",
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": "^147.1.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;