@atlaskit/media-card 79.15.2 → 79.15.3

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/card/cardAnalytics.js +2 -1
  3. package/dist/cjs/card/fileCard.js +37 -15
  4. package/dist/cjs/inline/mediaInlineCardAnalytics.js +7 -3
  5. package/dist/cjs/utils/analytics/analytics.js +3 -1
  6. package/dist/cjs/utils/metadata.js +2 -1
  7. package/dist/es2019/card/cardAnalytics.js +2 -2
  8. package/dist/es2019/card/fileCard.js +37 -15
  9. package/dist/es2019/inline/mediaInlineCardAnalytics.js +7 -3
  10. package/dist/es2019/utils/analytics/analytics.js +3 -1
  11. package/dist/es2019/utils/metadata.js +2 -1
  12. package/dist/esm/card/cardAnalytics.js +2 -1
  13. package/dist/esm/card/fileCard.js +37 -15
  14. package/dist/esm/inline/mediaInlineCardAnalytics.js +7 -3
  15. package/dist/esm/utils/analytics/analytics.js +3 -1
  16. package/dist/esm/utils/metadata.js +2 -1
  17. package/dist/types/card/cardAnalytics.d.ts +2 -1
  18. package/dist/types/card/fileCard.d.ts +4 -1
  19. package/dist/types/card/inlinePlayerWrapperStyles.d.ts +1 -1
  20. package/dist/types/card/types.d.ts +5 -0
  21. package/dist/types/card/ui/actionsBar/cardActions/styles.d.ts +1 -1
  22. package/dist/types/card/ui/actionsBar/styles.d.ts +1 -1
  23. package/dist/types/card/ui/blanket/styles.d.ts +1 -1
  24. package/dist/types/card/ui/iconWrapper/styles.d.ts +1 -1
  25. package/dist/types/card/ui/playButton/styles.d.ts +2 -2
  26. package/dist/types/card/ui/progressBar/styles.d.ts +1 -1
  27. package/dist/types/card/ui/titleBox/styles.d.ts +6 -6
  28. package/dist/types/card/ui/wrapper/styles.d.ts +1 -1
  29. package/dist/types/inline/mediaInlineCardAnalytics.d.ts +2 -1
  30. package/dist/types/utils/analytics/analytics.d.ts +4 -1
  31. package/dist/types/utils/lightCards/errorIcon/styles.d.ts +1 -1
  32. package/dist/types/utils/lightCards/styles.d.ts +1 -1
  33. package/dist/types-ts4.5/card/cardAnalytics.d.ts +2 -1
  34. package/dist/types-ts4.5/card/fileCard.d.ts +4 -1
  35. package/dist/types-ts4.5/card/inlinePlayerWrapperStyles.d.ts +1 -1
  36. package/dist/types-ts4.5/card/types.d.ts +5 -0
  37. package/dist/types-ts4.5/card/ui/actionsBar/cardActions/styles.d.ts +1 -1
  38. package/dist/types-ts4.5/card/ui/actionsBar/styles.d.ts +1 -1
  39. package/dist/types-ts4.5/card/ui/blanket/styles.d.ts +1 -1
  40. package/dist/types-ts4.5/card/ui/iconWrapper/styles.d.ts +1 -1
  41. package/dist/types-ts4.5/card/ui/playButton/styles.d.ts +2 -2
  42. package/dist/types-ts4.5/card/ui/progressBar/styles.d.ts +1 -1
  43. package/dist/types-ts4.5/card/ui/titleBox/styles.d.ts +6 -6
  44. package/dist/types-ts4.5/card/ui/wrapper/styles.d.ts +1 -1
  45. package/dist/types-ts4.5/inline/mediaInlineCardAnalytics.d.ts +2 -1
  46. package/dist/types-ts4.5/utils/analytics/analytics.d.ts +4 -1
  47. package/dist/types-ts4.5/utils/lightCards/errorIcon/styles.d.ts +1 -1
  48. package/dist/types-ts4.5/utils/lightCards/styles.d.ts +1 -1
  49. package/package.json +7 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/media-card
2
2
 
3
+ ## 79.15.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
3
9
  ## 79.15.2
4
10
 
5
11
  ### Patch Changes
@@ -13,6 +13,7 @@ var fireOperationalEvent = exports.fireOperationalEvent = function fireOperation
13
13
  var error = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new _errors.MediaCardError('missing-error-data');
14
14
  var traceContext = arguments.length > 6 ? arguments[6] : undefined;
15
15
  var metadataTraceContext = arguments.length > 7 ? arguments[7] : undefined;
16
+ var processingFailReason = arguments.length > 8 ? arguments[8] : undefined;
16
17
  var fireEvent = function fireEvent(payload) {
17
18
  return (0, _analytics.fireMediaCardEvent)(payload, createAnalyticsEvent);
18
19
  };
@@ -27,7 +28,7 @@ var fireOperationalEvent = exports.fireOperationalEvent = function fireOperation
27
28
  break;
28
29
  case 'failed-processing':
29
30
  // Always emit failed events (no sampling)
30
- fireEvent((0, _analytics.getRenderFailedFileStatusPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext));
31
+ fireEvent((0, _analytics.getRenderFailedFileStatusPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason));
31
32
  break;
32
33
  case 'error':
33
34
  // Always emit error events (no sampling)
@@ -92,6 +92,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
92
92
  videoControlsWrapperRef = _ref.videoControlsWrapperRef,
93
93
  viewerOptions = _ref.viewerOptions,
94
94
  includeHashForDuplicateFiles = _ref.includeHashForDuplicateFiles,
95
+ ssrItemDetails = _ref.ssrItemDetails,
95
96
  onError = _ref.onError;
96
97
  var _useIntl = (0, _reactIntlNext.useIntl)(),
97
98
  formatMessage = _useIntl.formatMessage;
@@ -257,22 +258,43 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
257
258
  return 'failed';
258
259
  }
259
260
  };
260
- if (fileStateValue) {
261
- return {
262
- id: fileStateValue.id,
263
- name: fileStateValue.name,
264
- size: fileStateValue.size,
265
- mimeType: fileStateValue.mimeType,
266
- createdAt: fileStateValue.createdAt,
267
- mediaType: fileStateValue.mediaType,
268
- processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
269
- };
261
+ if ((0, _platformFeatureFlags.fg)('dfo_attachments_late_render_fix')) {
262
+ if (fileStateValue) {
263
+ return {
264
+ id: fileStateValue.id,
265
+ name: fileStateValue.name || ssrItemDetails && ssrItemDetails.filename,
266
+ size: fileStateValue.size,
267
+ mimeType: fileStateValue.mimeType || ssrItemDetails && ssrItemDetails.mimetype,
268
+ createdAt: fileStateValue.createdAt || ssrItemDetails && ssrItemDetails.createdDate,
269
+ mediaType: fileStateValue.mediaType,
270
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
271
+ };
272
+ } else {
273
+ return {
274
+ id: identifier.id,
275
+ name: ssrItemDetails && ssrItemDetails.filename,
276
+ mimeType: ssrItemDetails && ssrItemDetails.mimetype,
277
+ createdAt: ssrItemDetails && ssrItemDetails.createdDate
278
+ };
279
+ }
270
280
  } else {
271
- return {
272
- id: identifier.id
273
- };
281
+ if (fileStateValue) {
282
+ return {
283
+ id: fileStateValue.id,
284
+ name: fileStateValue.name,
285
+ size: fileStateValue.size,
286
+ mimeType: fileStateValue.mimeType,
287
+ createdAt: fileStateValue.createdAt,
288
+ mediaType: fileStateValue.mediaType,
289
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
290
+ };
291
+ } else {
292
+ return {
293
+ id: identifier.id
294
+ };
295
+ }
274
296
  }
275
- }, [fileStateValue, identifier.id]);
297
+ }, [fileStateValue, identifier.id, ssrItemDetails]);
276
298
  var fileAttributes = (0, _react.useMemo)(function () {
277
299
  return {
278
300
  fileMediatype: metadata.mediaType,
@@ -356,7 +378,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
356
378
  durationSinceCommenced: durationSinceCommenced
357
379
  }
358
380
  };
359
- createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext);
381
+ createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext, metadata.failReason);
360
382
 
361
383
  // Emit stored auth provider events when card reaches final state
362
384
  if (createAnalyticsEvent && pendingAuthProviderEventRef.current && ['complete', 'error', 'failed-processing'].includes(finalStatus) && (0, _platformFeatureFlags.fg)('platform_media_auth_provider_analytics')) {
@@ -41,7 +41,7 @@ var getErrorStatusPayload = exports.getErrorStatusPayload = function getErrorSta
41
41
  }, (0, _analytics.extractErrorInfo)(error))
42
42
  };
43
43
  };
44
- var getFailedProcessingStatusPayload = exports.getFailedProcessingStatusPayload = function getFailedProcessingStatusPayload(fileId, fileState) {
44
+ var getFailedProcessingStatusPayload = exports.getFailedProcessingStatusPayload = function getFailedProcessingStatusPayload(fileId, fileState, processingFailReason) {
45
45
  return {
46
46
  eventType: 'operational',
47
47
  action: 'failed',
@@ -52,7 +52,9 @@ var getFailedProcessingStatusPayload = exports.getFailedProcessingStatusPayload
52
52
  fileId: fileId,
53
53
  fileStatus: fileState === null || fileState === void 0 ? void 0 : fileState.status
54
54
  },
55
- failReason: 'failed-processing'
55
+ failReason: 'failed-processing',
56
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
57
+ processingFailReason: processingFailReason || 'not-available'
56
58
  }
57
59
  };
58
60
  };
@@ -60,7 +62,9 @@ var fireFailedOperationalEvent = exports.fireFailedOperationalEvent = function f
60
62
  var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new _errors.MediaCardError('missing-error-data');
61
63
  var failReason = arguments.length > 2 ? arguments[2] : undefined;
62
64
  var createAnalyticsEvent = arguments.length > 3 ? arguments[3] : undefined;
63
- var payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
65
+ // Extract processingFailReason from fileState if available
66
+ var processingFailReason = (fileState === null || fileState === void 0 ? void 0 : fileState.status) === 'failed-processing' ? fileState.failReason : undefined;
67
+ var payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState, processingFailReason) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
64
68
  (0, _analytics.fireMediaCardEvent)(payload, createAnalyticsEvent);
65
69
  };
66
70
  var fireSucceededOperationalEvent = exports.fireSucceededOperationalEvent = function fireSucceededOperationalEvent(fileState, createAnalyticsEvent) {
@@ -184,7 +184,7 @@ var getErrorEventPayload = exports.getErrorEventPayload = function getErrorEvent
184
184
  })
185
185
  };
186
186
  };
187
- var getRenderFailedFileStatusPayload = exports.getRenderFailedFileStatusPayload = function getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext) {
187
+ var getRenderFailedFileStatusPayload = exports.getRenderFailedFileStatusPayload = function getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason) {
188
188
  return {
189
189
  eventType: 'operational',
190
190
  action: 'failed',
@@ -195,6 +195,8 @@ var getRenderFailedFileStatusPayload = exports.getRenderFailedFileStatusPayload
195
195
  performanceAttributes: performanceAttributes,
196
196
  status: 'fail',
197
197
  failReason: 'failed-processing',
198
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
199
+ processingFailReason: processingFailReason || 'not-available',
198
200
  ssrReliability: ssrReliability,
199
201
  traceContext: traceContext,
200
202
  metadataTraceContext: metadataTraceContext
@@ -23,7 +23,8 @@ var getFileDetailsFromFileState = function getFileDetailsFromFileState(state) {
23
23
  mimeType: state.mimeType,
24
24
  createdAt: state.createdAt,
25
25
  mediaType: state.mediaType,
26
- processingStatus: getProcessingStatusFromFileState(state.status)
26
+ processingStatus: getProcessingStatusFromFileState(state.status),
27
+ failReason: state.status === 'failed-processing' ? state.failReason : undefined
27
28
  };
28
29
  };
29
30
  var getFileDetails = exports.getFileDetails = function getFileDetails(identifier, fileState) {
@@ -4,7 +4,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
4
4
 
5
5
  // Sampling rate for mediaCardRender success events (10%)
6
6
  const MEDIA_CARD_RENDER_SUCCESS_SAMPLE_RATE = 0.1;
7
- export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error = new MediaCardError('missing-error-data'), traceContext, metadataTraceContext) => {
7
+ export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error = new MediaCardError('missing-error-data'), traceContext, metadataTraceContext, processingFailReason) => {
8
8
  const fireEvent = payload => fireMediaCardEvent(payload, createAnalyticsEvent);
9
9
  switch (status) {
10
10
  case 'complete':
@@ -17,7 +17,7 @@ export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttribute
17
17
  break;
18
18
  case 'failed-processing':
19
19
  // Always emit failed events (no sampling)
20
- fireEvent(getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext));
20
+ fireEvent(getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason));
21
21
  break;
22
22
  case 'error':
23
23
  // Always emit error events (no sampling)
@@ -73,6 +73,7 @@ export const FileCard = ({
73
73
  videoControlsWrapperRef,
74
74
  viewerOptions,
75
75
  includeHashForDuplicateFiles,
76
+ ssrItemDetails,
76
77
  onError
77
78
  }) => {
78
79
  const {
@@ -210,22 +211,43 @@ export const FileCard = ({
210
211
  return 'failed';
211
212
  }
212
213
  };
213
- if (fileStateValue) {
214
- return {
215
- id: fileStateValue.id,
216
- name: fileStateValue.name,
217
- size: fileStateValue.size,
218
- mimeType: fileStateValue.mimeType,
219
- createdAt: fileStateValue.createdAt,
220
- mediaType: fileStateValue.mediaType,
221
- processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
222
- };
214
+ if (fg('dfo_attachments_late_render_fix')) {
215
+ if (fileStateValue) {
216
+ return {
217
+ id: fileStateValue.id,
218
+ name: fileStateValue.name || ssrItemDetails && ssrItemDetails.filename,
219
+ size: fileStateValue.size,
220
+ mimeType: fileStateValue.mimeType || ssrItemDetails && ssrItemDetails.mimetype,
221
+ createdAt: fileStateValue.createdAt || ssrItemDetails && ssrItemDetails.createdDate,
222
+ mediaType: fileStateValue.mediaType,
223
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
224
+ };
225
+ } else {
226
+ return {
227
+ id: identifier.id,
228
+ name: ssrItemDetails && ssrItemDetails.filename,
229
+ mimeType: ssrItemDetails && ssrItemDetails.mimetype,
230
+ createdAt: ssrItemDetails && ssrItemDetails.createdDate
231
+ };
232
+ }
223
233
  } else {
224
- return {
225
- id: identifier.id
226
- };
234
+ if (fileStateValue) {
235
+ return {
236
+ id: fileStateValue.id,
237
+ name: fileStateValue.name,
238
+ size: fileStateValue.size,
239
+ mimeType: fileStateValue.mimeType,
240
+ createdAt: fileStateValue.createdAt,
241
+ mediaType: fileStateValue.mediaType,
242
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
243
+ };
244
+ } else {
245
+ return {
246
+ id: identifier.id
247
+ };
248
+ }
227
249
  }
228
- }, [fileStateValue, identifier.id]);
250
+ }, [fileStateValue, identifier.id, ssrItemDetails]);
229
251
  const fileAttributes = useMemo(() => {
230
252
  return {
231
253
  fileMediatype: metadata.mediaType,
@@ -277,7 +299,7 @@ export const FileCard = ({
277
299
  durationSinceCommenced
278
300
  }
279
301
  };
280
- createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext);
302
+ createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext, metadata.failReason);
281
303
 
282
304
  // Emit stored auth provider events when card reaches final state
283
305
  if (createAnalyticsEvent && pendingAuthProviderEventRef.current && ['complete', 'error', 'failed-processing'].includes(finalStatus) && fg('platform_media_auth_provider_analytics')) {
@@ -32,7 +32,7 @@ export const getErrorStatusPayload = (fileId, error, fileState) => {
32
32
  }
33
33
  };
34
34
  };
35
- export const getFailedProcessingStatusPayload = (fileId, fileState) => {
35
+ export const getFailedProcessingStatusPayload = (fileId, fileState, processingFailReason) => {
36
36
  return {
37
37
  eventType: 'operational',
38
38
  action: 'failed',
@@ -43,12 +43,16 @@ export const getFailedProcessingStatusPayload = (fileId, fileState) => {
43
43
  fileId,
44
44
  fileStatus: fileState === null || fileState === void 0 ? void 0 : fileState.status
45
45
  },
46
- failReason: 'failed-processing'
46
+ failReason: 'failed-processing',
47
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
48
+ processingFailReason: processingFailReason || 'not-available'
47
49
  }
48
50
  };
49
51
  };
50
52
  export const fireFailedOperationalEvent = (fileState, error = new MediaCardError('missing-error-data'), failReason, createAnalyticsEvent) => {
51
- const payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
53
+ // Extract processingFailReason from fileState if available
54
+ const processingFailReason = (fileState === null || fileState === void 0 ? void 0 : fileState.status) === 'failed-processing' ? fileState.failReason : undefined;
55
+ const payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState, processingFailReason) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
52
56
  fireMediaCardEvent(payload, createAnalyticsEvent);
53
57
  };
54
58
  export const fireSucceededOperationalEvent = (fileState, createAnalyticsEvent) => {
@@ -169,7 +169,7 @@ export const getErrorEventPayload = (cardStatus, fileAttributes, error, ssrRelia
169
169
  }
170
170
  };
171
171
  };
172
- export const getRenderFailedFileStatusPayload = (fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext) => ({
172
+ export const getRenderFailedFileStatusPayload = (fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason) => ({
173
173
  eventType: 'operational',
174
174
  action: 'failed',
175
175
  actionSubject: 'mediaCardRender',
@@ -179,6 +179,8 @@ export const getRenderFailedFileStatusPayload = (fileAttributes, performanceAttr
179
179
  performanceAttributes,
180
180
  status: 'fail',
181
181
  failReason: 'failed-processing',
182
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
183
+ processingFailReason: processingFailReason || 'not-available',
182
184
  ssrReliability,
183
185
  traceContext,
184
186
  metadataTraceContext
@@ -16,7 +16,8 @@ const getFileDetailsFromFileState = state => ({
16
16
  mimeType: state.mimeType,
17
17
  createdAt: state.createdAt,
18
18
  mediaType: state.mediaType,
19
- processingStatus: getProcessingStatusFromFileState(state.status)
19
+ processingStatus: getProcessingStatusFromFileState(state.status),
20
+ failReason: state.status === 'failed-processing' ? state.failReason : undefined
20
21
  });
21
22
  export const getFileDetails = (identifier, fileState) => {
22
23
  return isFileIdentifier(identifier) ? fileState && !isErrorFileState(fileState) ? getFileDetailsFromFileState(fileState) : {
@@ -8,6 +8,7 @@ export var fireOperationalEvent = function fireOperationalEvent(createAnalyticsE
8
8
  var error = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new MediaCardError('missing-error-data');
9
9
  var traceContext = arguments.length > 6 ? arguments[6] : undefined;
10
10
  var metadataTraceContext = arguments.length > 7 ? arguments[7] : undefined;
11
+ var processingFailReason = arguments.length > 8 ? arguments[8] : undefined;
11
12
  var fireEvent = function fireEvent(payload) {
12
13
  return fireMediaCardEvent(payload, createAnalyticsEvent);
13
14
  };
@@ -22,7 +23,7 @@ export var fireOperationalEvent = function fireOperationalEvent(createAnalyticsE
22
23
  break;
23
24
  case 'failed-processing':
24
25
  // Always emit failed events (no sampling)
25
- fireEvent(getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext));
26
+ fireEvent(getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason));
26
27
  break;
27
28
  case 'error':
28
29
  // Always emit error events (no sampling)
@@ -84,6 +84,7 @@ export var FileCard = function FileCard(_ref) {
84
84
  videoControlsWrapperRef = _ref.videoControlsWrapperRef,
85
85
  viewerOptions = _ref.viewerOptions,
86
86
  includeHashForDuplicateFiles = _ref.includeHashForDuplicateFiles,
87
+ ssrItemDetails = _ref.ssrItemDetails,
87
88
  onError = _ref.onError;
88
89
  var _useIntl = useIntl(),
89
90
  formatMessage = _useIntl.formatMessage;
@@ -249,22 +250,43 @@ export var FileCard = function FileCard(_ref) {
249
250
  return 'failed';
250
251
  }
251
252
  };
252
- if (fileStateValue) {
253
- return {
254
- id: fileStateValue.id,
255
- name: fileStateValue.name,
256
- size: fileStateValue.size,
257
- mimeType: fileStateValue.mimeType,
258
- createdAt: fileStateValue.createdAt,
259
- mediaType: fileStateValue.mediaType,
260
- processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
261
- };
253
+ if (fg('dfo_attachments_late_render_fix')) {
254
+ if (fileStateValue) {
255
+ return {
256
+ id: fileStateValue.id,
257
+ name: fileStateValue.name || ssrItemDetails && ssrItemDetails.filename,
258
+ size: fileStateValue.size,
259
+ mimeType: fileStateValue.mimeType || ssrItemDetails && ssrItemDetails.mimetype,
260
+ createdAt: fileStateValue.createdAt || ssrItemDetails && ssrItemDetails.createdDate,
261
+ mediaType: fileStateValue.mediaType,
262
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
263
+ };
264
+ } else {
265
+ return {
266
+ id: identifier.id,
267
+ name: ssrItemDetails && ssrItemDetails.filename,
268
+ mimeType: ssrItemDetails && ssrItemDetails.mimetype,
269
+ createdAt: ssrItemDetails && ssrItemDetails.createdDate
270
+ };
271
+ }
262
272
  } else {
263
- return {
264
- id: identifier.id
265
- };
273
+ if (fileStateValue) {
274
+ return {
275
+ id: fileStateValue.id,
276
+ name: fileStateValue.name,
277
+ size: fileStateValue.size,
278
+ mimeType: fileStateValue.mimeType,
279
+ createdAt: fileStateValue.createdAt,
280
+ mediaType: fileStateValue.mediaType,
281
+ processingStatus: getProcessingStatusFromFileState(fileStateValue.status)
282
+ };
283
+ } else {
284
+ return {
285
+ id: identifier.id
286
+ };
287
+ }
266
288
  }
267
- }, [fileStateValue, identifier.id]);
289
+ }, [fileStateValue, identifier.id, ssrItemDetails]);
268
290
  var fileAttributes = useMemo(function () {
269
291
  return {
270
292
  fileMediatype: metadata.mediaType,
@@ -348,7 +370,7 @@ export var FileCard = function FileCard(_ref) {
348
370
  durationSinceCommenced: durationSinceCommenced
349
371
  }
350
372
  };
351
- createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext);
373
+ createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliability, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext, metadata.failReason);
352
374
 
353
375
  // Emit stored auth provider events when card reaches final state
354
376
  if (createAnalyticsEvent && pendingAuthProviderEventRef.current && ['complete', 'error', 'failed-processing'].includes(finalStatus) && fg('platform_media_auth_provider_analytics')) {
@@ -34,7 +34,7 @@ export var getErrorStatusPayload = function getErrorStatusPayload(fileId, error,
34
34
  }, extractErrorInfo(error))
35
35
  };
36
36
  };
37
- export var getFailedProcessingStatusPayload = function getFailedProcessingStatusPayload(fileId, fileState) {
37
+ export var getFailedProcessingStatusPayload = function getFailedProcessingStatusPayload(fileId, fileState, processingFailReason) {
38
38
  return {
39
39
  eventType: 'operational',
40
40
  action: 'failed',
@@ -45,7 +45,9 @@ export var getFailedProcessingStatusPayload = function getFailedProcessingStatus
45
45
  fileId: fileId,
46
46
  fileStatus: fileState === null || fileState === void 0 ? void 0 : fileState.status
47
47
  },
48
- failReason: 'failed-processing'
48
+ failReason: 'failed-processing',
49
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
50
+ processingFailReason: processingFailReason || 'not-available'
49
51
  }
50
52
  };
51
53
  };
@@ -53,7 +55,9 @@ export var fireFailedOperationalEvent = function fireFailedOperationalEvent(file
53
55
  var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new MediaCardError('missing-error-data');
54
56
  var failReason = arguments.length > 2 ? arguments[2] : undefined;
55
57
  var createAnalyticsEvent = arguments.length > 3 ? arguments[3] : undefined;
56
- var payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
58
+ // Extract processingFailReason from fileState if available
59
+ var processingFailReason = (fileState === null || fileState === void 0 ? void 0 : fileState.status) === 'failed-processing' ? fileState.failReason : undefined;
60
+ var payload = failReason ? getFailedProcessingStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', fileState, processingFailReason) : getErrorStatusPayload((fileState === null || fileState === void 0 ? void 0 : fileState.id) || 'unknown-id', error, fileState);
57
61
  fireMediaCardEvent(payload, createAnalyticsEvent);
58
62
  };
59
63
  export var fireSucceededOperationalEvent = function fireSucceededOperationalEvent(fileState, createAnalyticsEvent) {
@@ -175,7 +175,7 @@ export var getErrorEventPayload = function getErrorEventPayload(cardStatus, file
175
175
  })
176
176
  };
177
177
  };
178
- export var getRenderFailedFileStatusPayload = function getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext) {
178
+ export var getRenderFailedFileStatusPayload = function getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext, processingFailReason) {
179
179
  return {
180
180
  eventType: 'operational',
181
181
  action: 'failed',
@@ -186,6 +186,8 @@ export var getRenderFailedFileStatusPayload = function getRenderFailedFileStatus
186
186
  performanceAttributes: performanceAttributes,
187
187
  status: 'fail',
188
188
  failReason: 'failed-processing',
189
+ // 'not-available' is used for cases before processingFailReason implementation (backward compatibility)
190
+ processingFailReason: processingFailReason || 'not-available',
189
191
  ssrReliability: ssrReliability,
190
192
  traceContext: traceContext,
191
193
  metadataTraceContext: metadataTraceContext
@@ -17,7 +17,8 @@ var getFileDetailsFromFileState = function getFileDetailsFromFileState(state) {
17
17
  mimeType: state.mimeType,
18
18
  createdAt: state.createdAt,
19
19
  mediaType: state.mediaType,
20
- processingStatus: getProcessingStatusFromFileState(state.status)
20
+ processingStatus: getProcessingStatusFromFileState(state.status),
21
+ failReason: state.status === 'failed-processing' ? state.failReason : undefined
21
22
  };
22
23
  };
23
24
  export var getFileDetails = function getFileDetails(identifier, fileState) {
@@ -3,7 +3,8 @@ import { type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
3
3
  import { type SSRStatus } from '../utils/analytics';
4
4
  import { type CardStatus } from '../types';
5
5
  import { MediaCardError } from '../errors';
6
- export declare const fireOperationalEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, status: CardStatus, fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
6
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
7
+ export declare const fireOperationalEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, status: CardStatus, fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext, processingFailReason?: ProcessingFailReason) => void;
7
8
  export declare const fireNonCriticalErrorEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, cardStatus: CardStatus, fileAttributes: FileAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
8
9
  export declare const fireDownloadSucceededEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, fileAttributes: FileAttributes, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
9
10
  export declare const fireDownloadFailedEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, fileAttributes: FileAttributes, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
@@ -6,6 +6,7 @@ import { type MediaCardErrorPrimaryReason } from '../errors';
6
6
  import { type CardAppearance, type CardDimensions, type CardEventProps, type TitleBoxIcon } from '../types';
7
7
  import { type MediaFilePreviewErrorPrimaryReason } from '@atlaskit/media-file-preview';
8
8
  import { type CardAction } from './actions';
9
+ import type { SsrItemDetails } from './types';
9
10
  export interface FileCardProps extends CardEventProps {
10
11
  /** Overlay the media file. */
11
12
  readonly disableOverlay?: boolean;
@@ -54,7 +55,9 @@ export interface FileCardProps extends CardEventProps {
54
55
  readonly viewerOptions?: ViewerOptionsProps;
55
56
  /** Sets options for viewer **/
56
57
  readonly includeHashForDuplicateFiles?: boolean;
58
+ /** Optional file details to render straight away **/
59
+ readonly ssrItemDetails?: SsrItemDetails;
57
60
  /** General Error handling include status errors and display errors*/
58
61
  readonly onError?: (reason: MediaFilePreviewErrorPrimaryReason | MediaCardErrorPrimaryReason) => void;
59
62
  }
60
- export declare const FileCard: ({ appearance, resizeMode, isLazy, disableOverlay, featureFlags, identifier, ssr, dimensions, originalDimensions, contextId, alt, actions, shouldEnableDownloadButton, useInlinePlayer, shouldOpenMediaViewer, onFullscreenChange, selectable, selected, testId, titleBoxBgColor, titleBoxIcon, shouldHideTooltip, mediaViewerItems, onClick, onMouseEnter, videoControlsWrapperRef, viewerOptions, includeHashForDuplicateFiles, onError, }: FileCardProps) => React.JSX.Element;
63
+ export declare const FileCard: ({ appearance, resizeMode, isLazy, disableOverlay, featureFlags, identifier, ssr, dimensions, originalDimensions, contextId, alt, actions, shouldEnableDownloadButton, useInlinePlayer, shouldOpenMediaViewer, onFullscreenChange, selectable, selected, testId, titleBoxBgColor, titleBoxIcon, shouldHideTooltip, mediaViewerItems, onClick, onMouseEnter, videoControlsWrapperRef, viewerOptions, includeHashForDuplicateFiles, ssrItemDetails, onError, }: FileCardProps) => React.JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { type InlinePlayerWrapperProps } from './types';
2
2
  export declare const inlinePlayerClassName = "media-card-inline-player";
3
3
  export declare const inlinePlayerWrapperStyles: {
4
- ({ dimensions, selected, }: InlinePlayerWrapperProps): import("@emotion/react").SerializedStyles;
4
+ ({ dimensions, selected, }: InlinePlayerWrapperProps): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -14,4 +14,9 @@ export type InlinePlayerWrapperProps = {
14
14
  innerRef?: RefObject<HTMLDivElement> | ((instance: HTMLDivElement | null) => void) | undefined;
15
15
  children?: JSX.Element[] | ReactElement<any, any> | null | any;
16
16
  };
17
+ export type SsrItemDetails = {
18
+ filename: string;
19
+ mimetype: string;
20
+ createdDate: number;
21
+ };
17
22
  export type CardWithMediaClientConfigProps = WithMediaClientConfigProps<CardBaseProps>;
@@ -17,4 +17,4 @@ export type CardActionButtonOwnProps = {
17
17
  children?: React.ReactNode;
18
18
  };
19
19
  export type CardActionButtonProps = CardActionButtonOwnProps & HTMLAttributes<HTMLButtonElement>;
20
- export declare const cardActionButtonStyles: ({ variant }: CardActionButtonProps) => import("@emotion/react").SerializedStyles;
20
+ export declare const cardActionButtonStyles: ({ variant }: CardActionButtonProps) => import("@emotion/utils").SerializedStyles;
@@ -1,6 +1,6 @@
1
1
  export declare const actionsBarClassName = "media-card-actions-bar";
2
2
  export declare const fixedActionBarStyles = "opacity: 1;";
3
3
  export declare const wrapperStyles: {
4
- (isFixed?: boolean): import("@emotion/react").SerializedStyles;
4
+ (isFixed?: boolean): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -1,6 +1,6 @@
1
1
  export declare const blanketClassName = "media-card-blanket";
2
2
  export declare const fixedBlanketStyles: string;
3
3
  export declare const blanketStyles: {
4
- (isFixed?: boolean): import("@emotion/react").SerializedStyles;
4
+ (isFixed?: boolean): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -2,6 +2,6 @@ import { type Breakpoint } from '../common';
2
2
  import { type IconWrapperProps } from './types';
3
3
  export declare function titleBoxHeight(hasTitleBox: boolean, breakpoint: Breakpoint): string;
4
4
  export declare const iconWrapperStyles: {
5
- ({ hasTitleBox, breakpoint }: IconWrapperProps): import("@emotion/react").SerializedStyles;
5
+ ({ hasTitleBox, breakpoint }: IconWrapperProps): import("@emotion/utils").SerializedStyles;
6
6
  displayName: string;
7
7
  };
@@ -1,5 +1,5 @@
1
1
  export declare const playButtonClassName = "media-card-play-button";
2
2
  export declare const bkgClassName = "play-icon-background";
3
3
  export declare const fixedPlayButtonStyles = "\n .play-icon-background {\n width: 56px;\n height: 56px;\n }\n";
4
- export declare const playButtonWrapperStyles: import("@emotion/react").SerializedStyles;
5
- export declare const backgroundStyles: import("@emotion/react").SerializedStyles;
4
+ export declare const playButtonWrapperStyles: import("@emotion/utils").SerializedStyles;
5
+ export declare const backgroundStyles: import("@emotion/utils").SerializedStyles;
@@ -2,6 +2,6 @@ import { Breakpoint } from '../common';
2
2
  import { type StyledBarProps } from './types';
3
3
  export declare function generateResponsiveStyles(breakpoint: Breakpoint, positionBottom: boolean, showOnTop: boolean, multiplier?: number): string;
4
4
  export declare const styledBarStyles: {
5
- (props: StyledBarProps): import("@emotion/react").SerializedStyles;
5
+ (props: StyledBarProps): import("@emotion/utils").SerializedStyles;
6
6
  displayName: string;
7
7
  };
@@ -6,18 +6,18 @@ type TitleBoxWrapperStyleArgs = {
6
6
  display?: 'none' | 'flex';
7
7
  };
8
8
  export declare const titleBoxWrapperStyles: {
9
- ({ breakpoint, display, titleBoxBgColor, }: TitleBoxWrapperStyleArgs): import("@emotion/react").SerializedStyles;
9
+ ({ breakpoint, display, titleBoxBgColor, }: TitleBoxWrapperStyleArgs): import("@emotion/utils").SerializedStyles;
10
10
  displayName: string;
11
11
  };
12
12
  export declare const titleBoxHeaderStyles: {
13
- ({ hasIconOverlap }: TitleBoxHeaderProps): import("@emotion/react").SerializedStyles;
13
+ ({ hasIconOverlap }: TitleBoxHeaderProps): import("@emotion/utils").SerializedStyles;
14
14
  displayName: string;
15
15
  };
16
16
  export declare const titleBoxFooterStyles: {
17
- ({ hasIconOverlap }: TitleBoxFooterProps): import("@emotion/react").SerializedStyles;
17
+ ({ hasIconOverlap }: TitleBoxFooterProps): import("@emotion/utils").SerializedStyles;
18
18
  displayName: string;
19
19
  };
20
- export declare const titleBoxIconStyles: import("@emotion/react").SerializedStyles;
21
- export declare const newTitleBoxIconStyles: import("@emotion/react").SerializedStyles;
22
- export declare const errorMessageWrapperStyles: import("@emotion/react").SerializedStyles;
20
+ export declare const titleBoxIconStyles: import("@emotion/utils").SerializedStyles;
21
+ export declare const newTitleBoxIconStyles: import("@emotion/utils").SerializedStyles;
22
+ export declare const errorMessageWrapperStyles: import("@emotion/utils").SerializedStyles;
23
23
  export {};
@@ -1,5 +1,5 @@
1
1
  import { type WrapperProps } from './types';
2
2
  export declare const wrapperStyles: {
3
- ({ breakpoint, dimensions, appearance, disableOverlay, displayBackground, selected, isPlayButtonClickable, isTickBoxSelectable, shouldDisplayTooltip, mediaCardCursor, }: WrapperProps): import("@emotion/react").SerializedStyles;
3
+ ({ breakpoint, dimensions, appearance, disableOverlay, displayBackground, selected, isPlayButtonClickable, isTickBoxSelectable, shouldDisplayTooltip, mediaCardCursor, }: WrapperProps): import("@emotion/utils").SerializedStyles;
4
4
  displayName: string;
5
5
  };
@@ -2,8 +2,9 @@ import { type FileState } from '@atlaskit/media-client';
2
2
  import { type RenderInlineCardFailedEventPayload, type RenderInlineCardSucceededEventPayload } from '../utils/analytics';
3
3
  import { MediaCardError } from '../errors';
4
4
  import type { CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
5
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
5
6
  export declare const getSucceededStatusPayload: (fileState?: FileState) => RenderInlineCardSucceededEventPayload;
6
7
  export declare const getErrorStatusPayload: (fileId: string, error: MediaCardError, fileState?: FileState) => RenderInlineCardFailedEventPayload;
7
- export declare const getFailedProcessingStatusPayload: (fileId: string, fileState?: FileState) => RenderInlineCardFailedEventPayload;
8
+ export declare const getFailedProcessingStatusPayload: (fileId: string, fileState?: FileState, processingFailReason?: ProcessingFailReason) => RenderInlineCardFailedEventPayload;
8
9
  export declare const fireFailedOperationalEvent: (fileState: FileState, error?: MediaCardError, failReason?: "failed-processing", createAnalyticsEvent?: CreateUIAnalyticsEvent) => void;
9
10
  export declare const fireSucceededOperationalEvent: (fileState: FileState, createAnalyticsEvent?: CreateUIAnalyticsEvent) => void;
@@ -5,6 +5,7 @@ import { type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
5
5
  import { type MediaCardError, type MediaCardErrorPrimaryReason } from '../../errors';
6
6
  import { type CardPreviewSource, type CardDimensions, type CardStatus } from '../../types';
7
7
  import { type SSR } from '@atlaskit/media-common';
8
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
8
9
  export type CardPreviewAttributes = {
9
10
  fileId: string;
10
11
  prevDimensions: CardDimensions | undefined;
@@ -65,6 +66,7 @@ export type RenderFailedEventPayload = OperationalEventPayload<WithFileAttribute
65
66
  error?: MediaClientErrorReason | 'nativeError';
66
67
  statusCode?: number;
67
68
  request?: RequestMetadata;
69
+ processingFailReason?: ProcessingFailReason | 'not-available';
68
70
  }, 'failed', 'mediaCardRender'>;
69
71
  export type DownloadFailedEventPayload = OperationalEventPayload<WithFileAttributes & WithTraceContext & FailureAttributes & {
70
72
  failReason: FailedErrorFailReason;
@@ -95,6 +97,7 @@ export type RenderInlineCardFailedEventPayload = OperationalEventPayload<WithFil
95
97
  failReason: FailedErrorFailReason | 'failed-processing';
96
98
  error?: MediaClientErrorReason | 'nativeError';
97
99
  request?: RequestMetadata;
100
+ processingFailReason?: ProcessingFailReason | 'not-available';
98
101
  }, 'failed', 'mediaInlineRender'>;
99
102
  export type DownloadSucceededEventPayload = OperationalEventPayload<WithFileAttributes & SuccessAttributes & WithTraceContext, 'succeeded', 'mediaCardDownload'>;
100
103
  export type RenderSucceededEventPayload = OperationalEventPayload<WithFileAttributes & WithPerformanceAttributes & WithSSRReliability & SuccessAttributes & WithTraceContext, 'succeeded', 'mediaCardRender'>;
@@ -136,7 +139,7 @@ export declare const extractErrorInfo: (error: MediaCardError, metadataTraceCont
136
139
  export declare const getRenderErrorEventPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, error: MediaCardError, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => RenderFailedEventPayload;
137
140
  export declare const getDownloadFailedEventPayload: (fileAttributes: FileAttributes, error: MediaCardError, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => DownloadFailedEventPayload;
138
141
  export declare const getErrorEventPayload: (cardStatus: CardStatus, fileAttributes: FileAttributes, error: MediaCardError, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => ErrorEventPayload;
139
- export declare const getRenderFailedFileStatusPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => RenderFailedEventPayload;
142
+ export declare const getRenderFailedFileStatusPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext, processingFailReason?: ProcessingFailReason) => RenderFailedEventPayload;
140
143
  export declare const getAuthProviderSucceededPayload: (durationMs: number, timeoutMs: number, authContext?: {
141
144
  access?: Array<{
142
145
  type: string;
@@ -1 +1 @@
1
- export declare const errorIconWrapperStyles: import("@emotion/react").SerializedStyles;
1
+ export declare const errorIconWrapperStyles: import("@emotion/utils").SerializedStyles;
@@ -1,2 +1,2 @@
1
1
  import { type WrapperProps } from './types';
2
- export declare const wrapperStyles: ({ dimensions }: WrapperProps) => import("@emotion/react").SerializedStyles;
2
+ export declare const wrapperStyles: ({ dimensions }: WrapperProps) => import("@emotion/utils").SerializedStyles;
@@ -3,7 +3,8 @@ import { type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
3
3
  import { type SSRStatus } from '../utils/analytics';
4
4
  import { type CardStatus } from '../types';
5
5
  import { MediaCardError } from '../errors';
6
- export declare const fireOperationalEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, status: CardStatus, fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
6
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
7
+ export declare const fireOperationalEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, status: CardStatus, fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext, processingFailReason?: ProcessingFailReason) => void;
7
8
  export declare const fireNonCriticalErrorEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, cardStatus: CardStatus, fileAttributes: FileAttributes, ssrReliability: SSRStatus, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
8
9
  export declare const fireDownloadSucceededEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, fileAttributes: FileAttributes, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
9
10
  export declare const fireDownloadFailedEvent: (createAnalyticsEvent: CreateUIAnalyticsEvent, fileAttributes: FileAttributes, error: MediaCardError | undefined, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => void;
@@ -6,6 +6,7 @@ import { type MediaCardErrorPrimaryReason } from '../errors';
6
6
  import { type CardAppearance, type CardDimensions, type CardEventProps, type TitleBoxIcon } from '../types';
7
7
  import { type MediaFilePreviewErrorPrimaryReason } from '@atlaskit/media-file-preview';
8
8
  import { type CardAction } from './actions';
9
+ import type { SsrItemDetails } from './types';
9
10
  export interface FileCardProps extends CardEventProps {
10
11
  /** Overlay the media file. */
11
12
  readonly disableOverlay?: boolean;
@@ -54,7 +55,9 @@ export interface FileCardProps extends CardEventProps {
54
55
  readonly viewerOptions?: ViewerOptionsProps;
55
56
  /** Sets options for viewer **/
56
57
  readonly includeHashForDuplicateFiles?: boolean;
58
+ /** Optional file details to render straight away **/
59
+ readonly ssrItemDetails?: SsrItemDetails;
57
60
  /** General Error handling include status errors and display errors*/
58
61
  readonly onError?: (reason: MediaFilePreviewErrorPrimaryReason | MediaCardErrorPrimaryReason) => void;
59
62
  }
60
- export declare const FileCard: ({ appearance, resizeMode, isLazy, disableOverlay, featureFlags, identifier, ssr, dimensions, originalDimensions, contextId, alt, actions, shouldEnableDownloadButton, useInlinePlayer, shouldOpenMediaViewer, onFullscreenChange, selectable, selected, testId, titleBoxBgColor, titleBoxIcon, shouldHideTooltip, mediaViewerItems, onClick, onMouseEnter, videoControlsWrapperRef, viewerOptions, includeHashForDuplicateFiles, onError, }: FileCardProps) => React.JSX.Element;
63
+ export declare const FileCard: ({ appearance, resizeMode, isLazy, disableOverlay, featureFlags, identifier, ssr, dimensions, originalDimensions, contextId, alt, actions, shouldEnableDownloadButton, useInlinePlayer, shouldOpenMediaViewer, onFullscreenChange, selectable, selected, testId, titleBoxBgColor, titleBoxIcon, shouldHideTooltip, mediaViewerItems, onClick, onMouseEnter, videoControlsWrapperRef, viewerOptions, includeHashForDuplicateFiles, ssrItemDetails, onError, }: FileCardProps) => React.JSX.Element;
@@ -1,6 +1,6 @@
1
1
  import { type InlinePlayerWrapperProps } from './types';
2
2
  export declare const inlinePlayerClassName = "media-card-inline-player";
3
3
  export declare const inlinePlayerWrapperStyles: {
4
- ({ dimensions, selected, }: InlinePlayerWrapperProps): import("@emotion/react").SerializedStyles;
4
+ ({ dimensions, selected, }: InlinePlayerWrapperProps): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -14,4 +14,9 @@ export type InlinePlayerWrapperProps = {
14
14
  innerRef?: RefObject<HTMLDivElement> | ((instance: HTMLDivElement | null) => void) | undefined;
15
15
  children?: JSX.Element[] | ReactElement<any, any> | null | any;
16
16
  };
17
+ export type SsrItemDetails = {
18
+ filename: string;
19
+ mimetype: string;
20
+ createdDate: number;
21
+ };
17
22
  export type CardWithMediaClientConfigProps = WithMediaClientConfigProps<CardBaseProps>;
@@ -17,4 +17,4 @@ export type CardActionButtonOwnProps = {
17
17
  children?: React.ReactNode;
18
18
  };
19
19
  export type CardActionButtonProps = CardActionButtonOwnProps & HTMLAttributes<HTMLButtonElement>;
20
- export declare const cardActionButtonStyles: ({ variant }: CardActionButtonProps) => import("@emotion/react").SerializedStyles;
20
+ export declare const cardActionButtonStyles: ({ variant }: CardActionButtonProps) => import("@emotion/utils").SerializedStyles;
@@ -1,6 +1,6 @@
1
1
  export declare const actionsBarClassName = "media-card-actions-bar";
2
2
  export declare const fixedActionBarStyles = "opacity: 1;";
3
3
  export declare const wrapperStyles: {
4
- (isFixed?: boolean): import("@emotion/react").SerializedStyles;
4
+ (isFixed?: boolean): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -1,6 +1,6 @@
1
1
  export declare const blanketClassName = "media-card-blanket";
2
2
  export declare const fixedBlanketStyles: string;
3
3
  export declare const blanketStyles: {
4
- (isFixed?: boolean): import("@emotion/react").SerializedStyles;
4
+ (isFixed?: boolean): import("@emotion/utils").SerializedStyles;
5
5
  displayName: string;
6
6
  };
@@ -2,6 +2,6 @@ import { type Breakpoint } from '../common';
2
2
  import { type IconWrapperProps } from './types';
3
3
  export declare function titleBoxHeight(hasTitleBox: boolean, breakpoint: Breakpoint): string;
4
4
  export declare const iconWrapperStyles: {
5
- ({ hasTitleBox, breakpoint }: IconWrapperProps): import("@emotion/react").SerializedStyles;
5
+ ({ hasTitleBox, breakpoint }: IconWrapperProps): import("@emotion/utils").SerializedStyles;
6
6
  displayName: string;
7
7
  };
@@ -1,5 +1,5 @@
1
1
  export declare const playButtonClassName = "media-card-play-button";
2
2
  export declare const bkgClassName = "play-icon-background";
3
3
  export declare const fixedPlayButtonStyles = "\n .play-icon-background {\n width: 56px;\n height: 56px;\n }\n";
4
- export declare const playButtonWrapperStyles: import("@emotion/react").SerializedStyles;
5
- export declare const backgroundStyles: import("@emotion/react").SerializedStyles;
4
+ export declare const playButtonWrapperStyles: import("@emotion/utils").SerializedStyles;
5
+ export declare const backgroundStyles: import("@emotion/utils").SerializedStyles;
@@ -2,6 +2,6 @@ import { Breakpoint } from '../common';
2
2
  import { type StyledBarProps } from './types';
3
3
  export declare function generateResponsiveStyles(breakpoint: Breakpoint, positionBottom: boolean, showOnTop: boolean, multiplier?: number): string;
4
4
  export declare const styledBarStyles: {
5
- (props: StyledBarProps): import("@emotion/react").SerializedStyles;
5
+ (props: StyledBarProps): import("@emotion/utils").SerializedStyles;
6
6
  displayName: string;
7
7
  };
@@ -6,18 +6,18 @@ type TitleBoxWrapperStyleArgs = {
6
6
  display?: 'none' | 'flex';
7
7
  };
8
8
  export declare const titleBoxWrapperStyles: {
9
- ({ breakpoint, display, titleBoxBgColor, }: TitleBoxWrapperStyleArgs): import("@emotion/react").SerializedStyles;
9
+ ({ breakpoint, display, titleBoxBgColor, }: TitleBoxWrapperStyleArgs): import("@emotion/utils").SerializedStyles;
10
10
  displayName: string;
11
11
  };
12
12
  export declare const titleBoxHeaderStyles: {
13
- ({ hasIconOverlap }: TitleBoxHeaderProps): import("@emotion/react").SerializedStyles;
13
+ ({ hasIconOverlap }: TitleBoxHeaderProps): import("@emotion/utils").SerializedStyles;
14
14
  displayName: string;
15
15
  };
16
16
  export declare const titleBoxFooterStyles: {
17
- ({ hasIconOverlap }: TitleBoxFooterProps): import("@emotion/react").SerializedStyles;
17
+ ({ hasIconOverlap }: TitleBoxFooterProps): import("@emotion/utils").SerializedStyles;
18
18
  displayName: string;
19
19
  };
20
- export declare const titleBoxIconStyles: import("@emotion/react").SerializedStyles;
21
- export declare const newTitleBoxIconStyles: import("@emotion/react").SerializedStyles;
22
- export declare const errorMessageWrapperStyles: import("@emotion/react").SerializedStyles;
20
+ export declare const titleBoxIconStyles: import("@emotion/utils").SerializedStyles;
21
+ export declare const newTitleBoxIconStyles: import("@emotion/utils").SerializedStyles;
22
+ export declare const errorMessageWrapperStyles: import("@emotion/utils").SerializedStyles;
23
23
  export {};
@@ -1,5 +1,5 @@
1
1
  import { type WrapperProps } from './types';
2
2
  export declare const wrapperStyles: {
3
- ({ breakpoint, dimensions, appearance, disableOverlay, displayBackground, selected, isPlayButtonClickable, isTickBoxSelectable, shouldDisplayTooltip, mediaCardCursor, }: WrapperProps): import("@emotion/react").SerializedStyles;
3
+ ({ breakpoint, dimensions, appearance, disableOverlay, displayBackground, selected, isPlayButtonClickable, isTickBoxSelectable, shouldDisplayTooltip, mediaCardCursor, }: WrapperProps): import("@emotion/utils").SerializedStyles;
4
4
  displayName: string;
5
5
  };
@@ -2,8 +2,9 @@ import { type FileState } from '@atlaskit/media-client';
2
2
  import { type RenderInlineCardFailedEventPayload, type RenderInlineCardSucceededEventPayload } from '../utils/analytics';
3
3
  import { MediaCardError } from '../errors';
4
4
  import type { CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
5
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
5
6
  export declare const getSucceededStatusPayload: (fileState?: FileState) => RenderInlineCardSucceededEventPayload;
6
7
  export declare const getErrorStatusPayload: (fileId: string, error: MediaCardError, fileState?: FileState) => RenderInlineCardFailedEventPayload;
7
- export declare const getFailedProcessingStatusPayload: (fileId: string, fileState?: FileState) => RenderInlineCardFailedEventPayload;
8
+ export declare const getFailedProcessingStatusPayload: (fileId: string, fileState?: FileState, processingFailReason?: ProcessingFailReason) => RenderInlineCardFailedEventPayload;
8
9
  export declare const fireFailedOperationalEvent: (fileState: FileState, error?: MediaCardError, failReason?: "failed-processing", createAnalyticsEvent?: CreateUIAnalyticsEvent) => void;
9
10
  export declare const fireSucceededOperationalEvent: (fileState: FileState, createAnalyticsEvent?: CreateUIAnalyticsEvent) => void;
@@ -5,6 +5,7 @@ import { type CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
5
5
  import { type MediaCardError, type MediaCardErrorPrimaryReason } from '../../errors';
6
6
  import { type CardPreviewSource, type CardDimensions, type CardStatus } from '../../types';
7
7
  import { type SSR } from '@atlaskit/media-common';
8
+ import { type ProcessingFailReason } from '@atlaskit/media-state';
8
9
  export type CardPreviewAttributes = {
9
10
  fileId: string;
10
11
  prevDimensions: CardDimensions | undefined;
@@ -65,6 +66,7 @@ export type RenderFailedEventPayload = OperationalEventPayload<WithFileAttribute
65
66
  error?: MediaClientErrorReason | 'nativeError';
66
67
  statusCode?: number;
67
68
  request?: RequestMetadata;
69
+ processingFailReason?: ProcessingFailReason | 'not-available';
68
70
  }, 'failed', 'mediaCardRender'>;
69
71
  export type DownloadFailedEventPayload = OperationalEventPayload<WithFileAttributes & WithTraceContext & FailureAttributes & {
70
72
  failReason: FailedErrorFailReason;
@@ -95,6 +97,7 @@ export type RenderInlineCardFailedEventPayload = OperationalEventPayload<WithFil
95
97
  failReason: FailedErrorFailReason | 'failed-processing';
96
98
  error?: MediaClientErrorReason | 'nativeError';
97
99
  request?: RequestMetadata;
100
+ processingFailReason?: ProcessingFailReason | 'not-available';
98
101
  }, 'failed', 'mediaInlineRender'>;
99
102
  export type DownloadSucceededEventPayload = OperationalEventPayload<WithFileAttributes & SuccessAttributes & WithTraceContext, 'succeeded', 'mediaCardDownload'>;
100
103
  export type RenderSucceededEventPayload = OperationalEventPayload<WithFileAttributes & WithPerformanceAttributes & WithSSRReliability & SuccessAttributes & WithTraceContext, 'succeeded', 'mediaCardRender'>;
@@ -136,7 +139,7 @@ export declare const extractErrorInfo: (error: MediaCardError, metadataTraceCont
136
139
  export declare const getRenderErrorEventPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, error: MediaCardError, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => RenderFailedEventPayload;
137
140
  export declare const getDownloadFailedEventPayload: (fileAttributes: FileAttributes, error: MediaCardError, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => DownloadFailedEventPayload;
138
141
  export declare const getErrorEventPayload: (cardStatus: CardStatus, fileAttributes: FileAttributes, error: MediaCardError, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => ErrorEventPayload;
139
- export declare const getRenderFailedFileStatusPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext) => RenderFailedEventPayload;
142
+ export declare const getRenderFailedFileStatusPayload: (fileAttributes: FileAttributes, performanceAttributes: PerformanceAttributes, ssrReliability: SSRStatus, traceContext: MediaTraceContext, metadataTraceContext?: MediaTraceContext, processingFailReason?: ProcessingFailReason) => RenderFailedEventPayload;
140
143
  export declare const getAuthProviderSucceededPayload: (durationMs: number, timeoutMs: number, authContext?: {
141
144
  access?: Array<{
142
145
  type: string;
@@ -1 +1 @@
1
- export declare const errorIconWrapperStyles: import("@emotion/react").SerializedStyles;
1
+ export declare const errorIconWrapperStyles: import("@emotion/utils").SerializedStyles;
@@ -1,2 +1,2 @@
1
1
  import { type WrapperProps } from './types';
2
- export declare const wrapperStyles: ({ dimensions }: WrapperProps) => import("@emotion/react").SerializedStyles;
2
+ export declare const wrapperStyles: ({ dimensions }: WrapperProps) => import("@emotion/utils").SerializedStyles;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "79.15.2",
3
+ "version": "79.15.3",
4
4
  "description": "Includes all media card related components, CardView, CardViewSmall, Card...",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -34,7 +34,7 @@
34
34
  "@atlaskit/analytics-next": "^11.1.0",
35
35
  "@atlaskit/dropdown-menu": "^16.4.0",
36
36
  "@atlaskit/editor-shared-styles": "^3.10.0",
37
- "@atlaskit/icon": "^30.0.0",
37
+ "@atlaskit/icon": "^31.0.0",
38
38
  "@atlaskit/link": "^3.3.0",
39
39
  "@atlaskit/media-client": "^35.7.0",
40
40
  "@atlaskit/media-client-react": "^4.1.0",
@@ -45,7 +45,7 @@
45
45
  "@atlaskit/media-viewer": "^52.7.0",
46
46
  "@atlaskit/platform-feature-flags": "^1.1.0",
47
47
  "@atlaskit/primitives": "^18.0.0",
48
- "@atlaskit/react-ufo": "^5.1.0",
48
+ "@atlaskit/react-ufo": "^5.2.0",
49
49
  "@atlaskit/spinner": "^19.0.0",
50
50
  "@atlaskit/theme": "^21.0.0",
51
51
  "@atlaskit/tokens": "^11.0.0",
@@ -82,7 +82,7 @@
82
82
  "@atlaskit/range": "^9.3.0",
83
83
  "@atlaskit/ssr": "workspace:^",
84
84
  "@atlaskit/toggle": "^15.2.0",
85
- "@atlassian/a11y-jest-testing": "^0.9.0",
85
+ "@atlassian/a11y-jest-testing": "^0.10.0",
86
86
  "@atlassian/feature-flags-test-utils": "^1.0.0",
87
87
  "@atlassian/ufo": "^0.7.0",
88
88
  "@testing-library/dom": "^10.1.0",
@@ -149,6 +149,9 @@
149
149
  },
150
150
  "media_card_failed_messaging_ui_revamp": {
151
151
  "type": "boolean"
152
+ },
153
+ "dfo_attachments_late_render_fix": {
154
+ "type": "boolean"
152
155
  }
153
156
  },
154
157
  "techstack": {