@atlaskit/media-card 77.0.2 → 77.1.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +106 -94
  2. package/dist/cjs/card/card.js +8 -10
  3. package/dist/cjs/card/cardAnalytics.js +6 -11
  4. package/dist/cjs/card/cardConstants.js +1 -2
  5. package/dist/cjs/card/cardLoader.js +1 -2
  6. package/dist/cjs/card/cardState.js +3 -5
  7. package/dist/cjs/card/cardSwitcher.js +1 -2
  8. package/dist/cjs/card/cardView.js +3 -5
  9. package/dist/cjs/card/classnames.js +2 -4
  10. package/dist/cjs/card/getCardPreview/cache.js +3 -6
  11. package/dist/cjs/card/getCardPreview/filePreviewStatus.js +3 -5
  12. package/dist/cjs/card/getCardPreview/helpers.js +4 -7
  13. package/dist/cjs/card/getCardPreview/index.js +13 -25
  14. package/dist/cjs/card/getCardStatus.js +3 -5
  15. package/dist/cjs/card/inlinePlayer.js +3 -6
  16. package/dist/cjs/card/inlinePlayerLazy.js +2 -3
  17. package/dist/cjs/card/inlinePlayerWrapper.js +2 -3
  18. package/dist/cjs/card/inlinePlayerWrapperStyles.js +2 -4
  19. package/dist/cjs/card/media-card-analytics-error-boundary.js +5 -6
  20. package/dist/cjs/card/ui/actionsBar/actionsBar.js +2 -3
  21. package/dist/cjs/card/ui/actionsBar/actionsBarWrapper.js +2 -3
  22. package/dist/cjs/card/ui/actionsBar/cardActions/cardActionButton.js +2 -3
  23. package/dist/cjs/card/ui/actionsBar/cardActions/cardActionIconButton.js +2 -3
  24. package/dist/cjs/card/ui/actionsBar/cardActions/cardActionsDropdownMenu.js +2 -3
  25. package/dist/cjs/card/ui/actionsBar/cardActions/cardActionsView.js +1 -2
  26. package/dist/cjs/card/ui/actionsBar/cardActions/styles.js +4 -7
  27. package/dist/cjs/card/ui/actionsBar/styles.js +3 -6
  28. package/dist/cjs/card/ui/blanket/blanket.js +4 -4
  29. package/dist/cjs/card/ui/blanket/styles.js +3 -6
  30. package/dist/cjs/card/ui/common.js +4 -7
  31. package/dist/cjs/card/ui/iconMessage/iconMessageWrapper.js +2 -3
  32. package/dist/cjs/card/ui/iconMessage/index.js +7 -13
  33. package/dist/cjs/card/ui/iconMessage/styles.js +1 -2
  34. package/dist/cjs/card/ui/iconWrapper/iconWrapper.js +2 -3
  35. package/dist/cjs/card/ui/iconWrapper/styles.js +1 -2
  36. package/dist/cjs/card/ui/imageRenderer/imageRenderer.js +2 -3
  37. package/dist/cjs/card/ui/playButton/playButton.js +2 -3
  38. package/dist/cjs/card/ui/playButton/playButtonBackground.js +2 -3
  39. package/dist/cjs/card/ui/playButton/playButtonWrapper.js +2 -3
  40. package/dist/cjs/card/ui/playButton/styles.js +5 -10
  41. package/dist/cjs/card/ui/progressBar/progressBar.js +3 -5
  42. package/dist/cjs/card/ui/progressBar/styledBar.js +4 -4
  43. package/dist/cjs/card/ui/progressBar/styles.js +1 -2
  44. package/dist/cjs/card/ui/styles.js +11 -21
  45. package/dist/cjs/card/ui/tickBox/styles.js +5 -9
  46. package/dist/cjs/card/ui/tickBox/tickBox.js +2 -3
  47. package/dist/cjs/card/ui/tickBox/tickBoxWrapper.js +2 -3
  48. package/dist/cjs/card/ui/titleBox/failedTitleBox.js +2 -3
  49. package/dist/cjs/card/ui/titleBox/styles.js +5 -10
  50. package/dist/cjs/card/ui/titleBox/titleBox.js +3 -5
  51. package/dist/cjs/card/ui/titleBox/titleBoxComponents.js +6 -11
  52. package/dist/cjs/card/ui/unhandledErrorCard/index.js +2 -3
  53. package/dist/cjs/card/ui/wrapper/styles.js +1 -2
  54. package/dist/cjs/card/ui/wrapper/wrapper.js +2 -3
  55. package/dist/cjs/card/v2/cardV2.js +10 -12
  56. package/dist/cjs/card/v2/cardV2Loader.js +1 -2
  57. package/dist/cjs/card/v2/cardViewV2.js +308 -0
  58. package/dist/cjs/errors.js +13 -25
  59. package/dist/cjs/inline/loader.js +2 -3
  60. package/dist/cjs/inline/mediaInlineAnalyticsErrorBoundary.js +3 -4
  61. package/dist/cjs/inline/mediaInlineCard.js +3 -5
  62. package/dist/cjs/inline/mediaInlineCardAnalytics.js +4 -7
  63. package/dist/cjs/types.js +2 -3
  64. package/dist/cjs/utils/analytics.js +23 -41
  65. package/dist/cjs/utils/cardDimensions.js +5 -9
  66. package/dist/cjs/utils/containsPixelUnit.js +2 -3
  67. package/dist/cjs/utils/dimensionComparer.js +3 -5
  68. package/dist/cjs/utils/document.js +2 -3
  69. package/dist/cjs/utils/generateUniqueId.js +2 -3
  70. package/dist/cjs/utils/getDataURIDimension.js +3 -5
  71. package/dist/cjs/utils/getElementDimension.js +2 -3
  72. package/dist/cjs/utils/getMediaCardCursor.js +2 -3
  73. package/dist/cjs/utils/globalScope/getSSRData.js +2 -3
  74. package/dist/cjs/utils/globalScope/globalScope.js +6 -11
  75. package/dist/cjs/utils/isValidPercentageUnit.js +2 -3
  76. package/dist/cjs/utils/lightCards/cardError.js +1 -2
  77. package/dist/cjs/utils/lightCards/cardLoading.js +2 -3
  78. package/dist/cjs/utils/lightCards/errorIcon/index.js +1 -2
  79. package/dist/cjs/utils/lightCards/errorIcon/styles.js +1 -2
  80. package/dist/cjs/utils/lightCards/getDimensionsWithDefault.js +2 -3
  81. package/dist/cjs/utils/lightCards/lightCardWrappers.js +2 -3
  82. package/dist/cjs/utils/lightCards/styles.js +2 -3
  83. package/dist/cjs/utils/metadata.js +2 -3
  84. package/dist/cjs/utils/mockIntersectionObserver.js +5 -6
  85. package/dist/cjs/utils/objectURLCache.js +4 -7
  86. package/dist/cjs/utils/preventClickThrough.js +2 -3
  87. package/dist/cjs/utils/printScript.js +3 -5
  88. package/dist/cjs/utils/ufoExperiences.js +3 -5
  89. package/dist/cjs/utils/videoIsPlayable.js +2 -3
  90. package/dist/cjs/utils/videoSnapshot.js +2 -3
  91. package/dist/cjs/utils/viewportDetector.js +2 -3
  92. package/dist/es2019/card/card.js +1 -1
  93. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  94. package/dist/es2019/card/ui/blanket/blanket.js +2 -1
  95. package/dist/es2019/card/ui/progressBar/styledBar.js +2 -1
  96. package/dist/es2019/card/ui/tickBox/styles.js +1 -1
  97. package/dist/es2019/card/v2/cardV2.js +3 -3
  98. package/dist/es2019/card/v2/cardViewV2.js +300 -0
  99. package/dist/es2019/inline/loader.js +1 -1
  100. package/dist/es2019/utils/ufoExperiences.js +1 -1
  101. package/dist/esm/card/card.js +5 -5
  102. package/dist/esm/card/media-card-analytics-error-boundary.js +4 -4
  103. package/dist/esm/card/ui/blanket/blanket.js +2 -1
  104. package/dist/esm/card/ui/progressBar/styledBar.js +2 -1
  105. package/dist/esm/card/ui/tickBox/styles.js +1 -1
  106. package/dist/esm/card/v2/cardV2.js +7 -7
  107. package/dist/esm/card/v2/cardViewV2.js +299 -0
  108. package/dist/esm/inline/loader.js +1 -1
  109. package/dist/esm/inline/mediaInlineAnalyticsErrorBoundary.js +2 -2
  110. package/dist/esm/utils/analytics.js +4 -4
  111. package/dist/esm/utils/mockIntersectionObserver.js +3 -3
  112. package/dist/esm/utils/ufoExperiences.js +1 -1
  113. package/dist/types/card/v2/cardViewV2.d.ts +44 -0
  114. package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +44 -0
  115. package/package.json +3 -3
@@ -22,7 +22,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
22
22
  _classCallCheck(this, WrappedMediaCardAnalyticsErrorBoundary);
23
23
  _this = _super.call(this, props);
24
24
  _defineProperty(_assertThisInitialized(_this), "fireOperationalEvent", function (error, info) {
25
- var _window, _window$navigator;
25
+ var _window;
26
26
  var _this$props = _this.props,
27
27
  _this$props$data = _this$props.data,
28
28
  data = _this$props$data === void 0 ? {} : _this$props$data,
@@ -32,7 +32,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
32
32
  action: 'failed',
33
33
  actionSubject: 'mediaCardRender',
34
34
  attributes: _objectSpread({
35
- browserInfo: (_window = window) !== null && _window !== void 0 && (_window$navigator = _window.navigator) !== null && _window$navigator !== void 0 && _window$navigator.userAgent ? window.navigator.userAgent : 'unknown',
35
+ browserInfo: (_window = window) !== null && _window !== void 0 && (_window = _window.navigator) !== null && _window !== void 0 && _window.userAgent ? window.navigator.userAgent : 'unknown',
36
36
  error: error,
37
37
  info: info,
38
38
  failReason: 'unexpected-error'
@@ -43,7 +43,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
43
43
  _defineProperty(_assertThisInitialized(_this), "handleOnClick", function (event) {
44
44
  try {
45
45
  var _this$props$onClick, _this$props2;
46
- (_this$props$onClick = (_this$props2 = _this.props).onClick) === null || _this$props$onClick === void 0 ? void 0 : _this$props$onClick.call(_this$props2, {
46
+ (_this$props$onClick = (_this$props2 = _this.props).onClick) === null || _this$props$onClick === void 0 || _this$props$onClick.call(_this$props2, {
47
47
  event: event
48
48
  });
49
49
  } catch (e) {}
@@ -83,7 +83,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
83
83
  }(React.Component);
84
84
  _defineProperty(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
85
85
  var packageName = "@atlaskit/media-card";
86
- var packageVersion = "77.0.2";
86
+ var packageVersion = "77.1.0";
87
87
  var MediaCardAnalyticsErrorBoundary = withMediaAnalyticsContext({
88
88
  packageVersion: packageVersion,
89
89
  packageName: packageName,
@@ -5,6 +5,7 @@ export var Blanket = function Blanket(props) {
5
5
  var isFixed = props.isFixed;
6
6
  return jsx("div", {
7
7
  css: blanketStyles(isFixed),
8
- className: blanketClassName
8
+ className: blanketClassName,
9
+ "data-testid": "media-card-blanket"
9
10
  });
10
11
  };
@@ -8,7 +8,8 @@ export var StyledBar = function StyledBar(props) {
8
8
  showOnTop = props.showOnTop;
9
9
  return jsx("div", {
10
10
  id: "styledBar",
11
- "data-testid": "media-progress-bar",
11
+ role: "progressbar",
12
+ "aria-valuenow": progress,
12
13
  css: styledBarStyles({
13
14
  progress: progress,
14
15
  breakpoint: breakpoint,
@@ -11,6 +11,6 @@ export var getSelectedStyles = function getSelectedStyles(selected) {
11
11
 
12
12
  // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
13
13
  export var wrapperStyles = function wrapperStyles(selected) {
14
- return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n font-size: 14px;\n width: 14px;\n height: 14px;\n position: absolute;\n top: 7px;\n left: 7px;\n border-radius: 20px;\n color: transparent;\n /* Enforce dimensions and position of \"tick\" icon */\n span {\n display: block;\n svg {\n height: 14px;\n }\n }\n ", "\n"])), transition(), getSelectedStyles(selected));
14
+ return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n ", "\n font-size: 14px;\n width: 14px;\n height: 14px;\n position: absolute;\n top: 7px;\n left: 7px;\n border-radius: 20px;\n color: transparent;\n /* Enforce dimensions and position of \"tick\" icon */\n span {\n display: block;\n svg {\n height: 14px;\n }\n }\n ", "\n"])), transition && transition(), getSelectedStyles(selected));
15
15
  };
16
16
  wrapperStyles.displayName = 'TickBoxWrapper';
@@ -22,7 +22,7 @@ import { getRandomHex } from '@atlaskit/media-common';
22
22
  import { globalMediaEventEmitter, isDifferentIdentifier, isFileIdentifier, RECENTS_COLLECTION, isImageRepresentationReady, isExternalImageIdentifier, imageResizeModeToFileImageMode } from '@atlaskit/media-client';
23
23
  import { MediaViewer } from '@atlaskit/media-viewer';
24
24
  import { injectIntl, IntlProvider } from 'react-intl-next';
25
- import { CardView } from '../cardView';
25
+ import { CardViewV2 } from './cardViewV2';
26
26
  import { ViewportDetector } from '../../utils/viewportDetector';
27
27
  import { videoIsPlayable } from '../../utils/videoIsPlayable';
28
28
  import { getRequestedDimensions } from '../../utils/getDataURIDimension';
@@ -41,7 +41,7 @@ import { completeUfoExperience, startUfoExperience } from '../../utils/ufoExperi
41
41
  import { generateUniqueId } from '../../utils/generateUniqueId';
42
42
  import { useFileState } from '@atlaskit/media-client-react';
43
43
  var packageName = "@atlaskit/media-card";
44
- var packageVersion = "77.0.2";
44
+ var packageVersion = "77.1.0";
45
45
  export var CardV2Base = /*#__PURE__*/function (_Component) {
46
46
  _inherits(CardV2Base, _Component);
47
47
  var _super = _createSuper(CardV2Base);
@@ -564,7 +564,7 @@ export var CardV2Base = /*#__PURE__*/function (_Component) {
564
564
  // Force Media Image to always display img for SSR
565
565
  var forceSyncDisplay = !!ssr;
566
566
  var mediaCardCursor = getMediaCardCursor(!!useInlinePlayer, !!shouldOpenMediaViewer, status === 'error' || status === 'failed-processing', !!_this.state.cardPreview, metadata.mediaType);
567
- var card = /*#__PURE__*/React.createElement(CardView, {
567
+ var card = /*#__PURE__*/React.createElement(CardViewV2, {
568
568
  status: cardStatusOverride || status,
569
569
  error: error,
570
570
  mediaItemType: mediaItemType,
@@ -749,7 +749,7 @@ export var CardV2Base = /*#__PURE__*/function (_Component) {
749
749
  // and then check if the triggered listener is from the card
750
750
  // that contains a div in current window.getSelection()
751
751
  // won't work in IE11
752
- (_getDocument = getDocument()) === null || _getDocument === void 0 ? void 0 : _getDocument.addEventListener('copy', this.fireCopiedEvent);
752
+ (_getDocument = getDocument()) === null || _getDocument === void 0 || _getDocument.addEventListener('copy', this.fireCopiedEvent);
753
753
  }
754
754
  }, {
755
755
  key: "componentDidUpdate",
@@ -876,7 +876,7 @@ export var CardV2Base = /*#__PURE__*/function (_Component) {
876
876
  value: function componentWillUnmount() {
877
877
  var _getDocument2;
878
878
  this.hasBeenMounted = false;
879
- (_getDocument2 = getDocument()) === null || _getDocument2 === void 0 ? void 0 : _getDocument2.removeEventListener('copy', this.fireCopiedEvent);
879
+ (_getDocument2 = getDocument()) === null || _getDocument2 === void 0 || _getDocument2.removeEventListener('copy', this.fireCopiedEvent);
880
880
  }
881
881
  }, {
882
882
  key: "updateStateForIdentifier",
@@ -919,8 +919,8 @@ export var CardV2Base = /*#__PURE__*/function (_Component) {
919
919
  }, {
920
920
  key: "fileAttributes",
921
921
  get: function get() {
922
- var _this$state6, _this$state6$fileStat;
923
- return getFileAttributes(this.metadata, (_this$state6 = this.state) === null || _this$state6 === void 0 ? void 0 : (_this$state6$fileStat = _this$state6.fileState) === null || _this$state6$fileStat === void 0 ? void 0 : _this$state6$fileStat.status);
922
+ var _this$state6;
923
+ return getFileAttributes(this.metadata, (_this$state6 = this.state) === null || _this$state6 === void 0 || (_this$state6 = _this$state6.fileState) === null || _this$state6 === void 0 ? void 0 : _this$state6.status);
924
924
  }
925
925
  }, {
926
926
  key: "fireOperationalEvent",
@@ -0,0 +1,299 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ 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) { _defineProperty(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; }
5
+ /** @jsx jsx */
6
+ import { jsx } from '@emotion/react';
7
+ import React, { useEffect, useState, useRef, useMemo } from 'react';
8
+ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
9
+ import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
10
+ import SpinnerIcon from '@atlaskit/spinner';
11
+ import Tooltip from '@atlaskit/tooltip';
12
+ import { messages } from '@atlaskit/media-ui';
13
+ import { defaultImageCardDimensions } from '../../utils/cardDimensions';
14
+ import { isValidPercentageUnit } from '../../utils/isValidPercentageUnit';
15
+ import { getElementDimension } from '../../utils/getElementDimension';
16
+ import { createAndFireMediaCardEvent } from '../../utils/analytics';
17
+ import { attachDetailsToActions } from '../actions';
18
+ import { cardImageContainerStyles, calcBreakpointSize } from '../ui/styles';
19
+ import { ImageRenderer } from '../ui/imageRenderer/imageRenderer';
20
+ import { TitleBox } from '../ui/titleBox/titleBox';
21
+ import { FailedTitleBox } from '../ui/titleBox/failedTitleBox';
22
+ import { ProgressBar } from '../ui/progressBar/progressBar';
23
+ import { PlayButton } from '../ui/playButton/playButton';
24
+ import { TickBox } from '../ui/tickBox/tickBox';
25
+ import { Blanket } from '../ui/blanket/blanket';
26
+ import { ActionsBar } from '../ui/actionsBar/actionsBar';
27
+ import { IconWrapper } from '../ui/iconWrapper/iconWrapper';
28
+ import { PreviewUnavailable, CreatingPreview, FailedToUpload, PreviewCurrentlyUnavailable, FailedToLoad } from '../ui/iconMessage';
29
+ import { isUploadError, isRateLimitedError, isPollingError } from '../../errors';
30
+ import { Wrapper } from '../ui/wrapper';
31
+ import { fileCardImageViewSelector } from '../classnames';
32
+ export var CardViewV2Base = function CardViewV2Base(_ref) {
33
+ var innerRef = _ref.innerRef,
34
+ onImageLoad = _ref.onImageLoad,
35
+ onImageError = _ref.onImageError,
36
+ dimensions = _ref.dimensions,
37
+ _ref$appearance = _ref.appearance,
38
+ appearance = _ref$appearance === void 0 ? 'auto' : _ref$appearance,
39
+ onClick = _ref.onClick,
40
+ onMouseEnter = _ref.onMouseEnter,
41
+ testId = _ref.testId,
42
+ metadata = _ref.metadata,
43
+ status = _ref.status,
44
+ selected = _ref.selected,
45
+ selectable = _ref.selectable,
46
+ cardPreview = _ref.cardPreview,
47
+ mediaCardCursor = _ref.mediaCardCursor,
48
+ shouldHideTooltip = _ref.shouldHideTooltip,
49
+ progress = _ref.progress,
50
+ alt = _ref.alt,
51
+ resizeMode = _ref.resizeMode,
52
+ onDisplayImage = _ref.onDisplayImage,
53
+ nativeLazyLoad = _ref.nativeLazyLoad,
54
+ forceSyncDisplay = _ref.forceSyncDisplay,
55
+ actions = _ref.actions,
56
+ disableOverlay = _ref.disableOverlay,
57
+ titleBoxBgColor = _ref.titleBoxBgColor,
58
+ titleBoxIcon = _ref.titleBoxIcon,
59
+ error = _ref.error,
60
+ disableAnimation = _ref.disableAnimation;
61
+ var _useState = useState(),
62
+ _useState2 = _slicedToArray(_useState, 2),
63
+ elementWidth = _useState2[0],
64
+ setElementWidth = _useState2[1];
65
+ var _useState3 = useState(false),
66
+ _useState4 = _slicedToArray(_useState3, 2),
67
+ didImageRender = _useState4[0],
68
+ setDidImageRender = _useState4[1];
69
+ var divRef = useRef(null);
70
+ var prevCardPreviewRef = useRef();
71
+ var width = (dimensions === null || dimensions === void 0 ? void 0 : dimensions.width) || 0;
72
+ useEffect(function () {
73
+ // If the dimensions.width is a percentage, we need to transform it into a pixel value in order to get the right breakpoints applied.
74
+ if (width && isValidPercentageUnit(width) && !!divRef.current) {
75
+ var _elementWidth = getElementDimension(divRef.current, 'width');
76
+ setElementWidth(_elementWidth);
77
+ }
78
+ }, [width]);
79
+ useEffect(function () {
80
+ innerRef && !!divRef.current && innerRef(divRef.current);
81
+ }, [innerRef]);
82
+ useEffect(function () {
83
+ // We should only switch didImageRender to false when cardPreview goes undefined, not when it is changed. as this method could be triggered after onImageLoad callback, falling on a race condition
84
+ if (prevCardPreviewRef.current && !cardPreview) {
85
+ setDidImageRender(false);
86
+ }
87
+ prevCardPreviewRef.current = cardPreview;
88
+ }, [cardPreview]);
89
+ var handleOnImageLoad = function handleOnImageLoad(prevCardPreview) {
90
+ if (prevCardPreview.dataURI !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
91
+ return;
92
+ }
93
+
94
+ /*
95
+ We render the icon & icon message always, even if there is cardPreview available.
96
+ If the image fails to load/render, the icon will remain, i.e. the user won't see a change until the root card decides to chage status to error.
97
+ If the image renders successfully, we switch this variable to hide the icon & icon message behind the thumbnail in case the image has transparency.
98
+ It is less likely that root component replaces a suceeded cardPreview for a failed one than the opposite case. Therefore we prefer to hide the icon instead show when the image fails, for a smoother transition
99
+ */
100
+
101
+ setDidImageRender(true);
102
+ onImageLoad === null || onImageLoad === void 0 || onImageLoad(cardPreview);
103
+ };
104
+ var handleOnImageError = function handleOnImageError(cardPreview) {
105
+ setDidImageRender(false);
106
+ onImageError === null || onImageError === void 0 || onImageError(cardPreview);
107
+ };
108
+ var breakpoint = useMemo(function () {
109
+ var width = elementWidth || (dimensions ? dimensions.width : '') || defaultImageCardDimensions.width;
110
+ return calcBreakpointSize(parseInt("".concat(width), 10));
111
+ }, [elementWidth, dimensions]);
112
+ var shouldRenderPlayButton = function shouldRenderPlayButton() {
113
+ var _ref2 = metadata || {},
114
+ mediaType = _ref2.mediaType;
115
+ if (mediaType !== 'video' || !cardPreview) {
116
+ return false;
117
+ }
118
+ return true;
119
+ };
120
+ var getRenderConfigByStatus = function getRenderConfigByStatus() {
121
+ var _ref3 = metadata || {},
122
+ name = _ref3.name,
123
+ mediaType = _ref3.mediaType;
124
+ var isZeroSize = metadata && metadata.size === 0;
125
+ var defaultConfig = {
126
+ renderTypeIcon: !didImageRender,
127
+ renderImageRenderer: !!cardPreview,
128
+ renderPlayButton: !!cardPreview && mediaType === 'video',
129
+ renderBlanket: !disableOverlay,
130
+ renderTitleBox: !disableOverlay && !!name,
131
+ renderTickBox: !disableOverlay && !!selectable
132
+ };
133
+ switch (status) {
134
+ case 'uploading':
135
+ return _objectSpread(_objectSpread({}, defaultConfig), {}, {
136
+ renderBlanket: !disableOverlay || mediaType !== 'video',
137
+ isFixedBlanket: true,
138
+ renderProgressBar: true
139
+ });
140
+ case 'processing':
141
+ return _objectSpread(_objectSpread({}, defaultConfig), {}, {
142
+ iconMessage: !didImageRender && !isZeroSize ? jsx(CreatingPreview, {
143
+ disableAnimation: disableAnimation
144
+ }) : undefined
145
+ });
146
+ case 'complete':
147
+ return defaultConfig;
148
+ case 'error':
149
+ case 'failed-processing':
150
+ var baseErrorConfig = _objectSpread(_objectSpread({}, defaultConfig), {}, {
151
+ renderTypeIcon: true,
152
+ renderImageRenderer: false,
153
+ renderTitleBox: false,
154
+ renderPlayButton: false
155
+ });
156
+ var _iconMessage;
157
+ var _customTitleMessage;
158
+ var _ref4 = error || {},
159
+ secondaryError = _ref4.secondaryError;
160
+ if (isRateLimitedError(secondaryError) || isPollingError(secondaryError)) {
161
+ _iconMessage = jsx(PreviewCurrentlyUnavailable, null);
162
+ } else if (isUploadError(error)) {
163
+ _iconMessage = jsx(FailedToUpload, null);
164
+ _customTitleMessage = messages.failed_to_upload;
165
+ } else if (!metadata) {
166
+ _iconMessage = jsx(FailedToLoad, null);
167
+ } else {
168
+ _iconMessage = jsx(PreviewUnavailable, null);
169
+ }
170
+ if (!disableOverlay) {
171
+ var _renderFailedTitleBox = !name || !!_customTitleMessage;
172
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
173
+ renderTitleBox: !!name && !_customTitleMessage,
174
+ renderFailedTitleBox: _renderFailedTitleBox,
175
+ iconMessage: !_renderFailedTitleBox ? _iconMessage : undefined,
176
+ customTitleMessage: _customTitleMessage
177
+ });
178
+ }
179
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
180
+ iconMessage: _iconMessage
181
+ });
182
+ case 'loading-preview':
183
+ case 'loading':
184
+ default:
185
+ return _objectSpread(_objectSpread({}, defaultConfig), {}, {
186
+ renderPlayButton: false,
187
+ renderTypeIcon: false,
188
+ renderSpinner: !didImageRender
189
+ });
190
+ }
191
+ };
192
+ var _getRenderConfigBySta = getRenderConfigByStatus(),
193
+ renderTypeIcon = _getRenderConfigBySta.renderTypeIcon,
194
+ iconMessage = _getRenderConfigBySta.iconMessage,
195
+ renderImageRenderer = _getRenderConfigBySta.renderImageRenderer,
196
+ renderSpinner = _getRenderConfigBySta.renderSpinner,
197
+ renderPlayButton = _getRenderConfigBySta.renderPlayButton,
198
+ renderBlanket = _getRenderConfigBySta.renderBlanket,
199
+ renderProgressBar = _getRenderConfigBySta.renderProgressBar,
200
+ renderTitleBox = _getRenderConfigBySta.renderTitleBox,
201
+ renderFailedTitleBox = _getRenderConfigBySta.renderFailedTitleBox,
202
+ renderTickBox = _getRenderConfigBySta.renderTickBox,
203
+ isFixedBlanket = _getRenderConfigBySta.isFixedBlanket,
204
+ customTitleMessage = _getRenderConfigBySta.customTitleMessage;
205
+ var shouldDisplayBackground = !cardPreview || !disableOverlay || status === 'error' || status === 'failed-processing';
206
+ var isPlayButtonClickable = shouldRenderPlayButton() && !!disableOverlay;
207
+ var isTickBoxSelectable = !disableOverlay && !!selectable && !selected;
208
+ // Disable tooltip for Media Single
209
+ var shouldDisplayTooltip = !disableOverlay && !shouldHideTooltip;
210
+ var hasTitleBox = !!(renderTitleBox || renderFailedTitleBox);
211
+ var _ref5 = metadata || {},
212
+ mediaType = _ref5.mediaType,
213
+ mimeType = _ref5.mimeType,
214
+ name = _ref5.name,
215
+ createdAt = _ref5.createdAt;
216
+ var actionsWithDetails = metadata && actions ? attachDetailsToActions(actions, metadata) : [];
217
+ var content = jsx(React.Fragment, null, jsx("div", {
218
+ css: cardImageContainerStyles,
219
+ className: fileCardImageViewSelector,
220
+ "data-testid": fileCardImageViewSelector,
221
+ "data-test-media-name": name,
222
+ "data-test-status": status,
223
+ "data-test-progress": progress,
224
+ "data-test-selected": selected
225
+ }, renderTypeIcon && jsx(IconWrapper, {
226
+ breakpoint: breakpoint,
227
+ hasTitleBox: hasTitleBox
228
+ }, jsx(MimeTypeIcon, {
229
+ testId: "media-card-file-type-icon",
230
+ mediaType: mediaType,
231
+ mimeType: mimeType,
232
+ name: name
233
+ }), iconMessage), renderSpinner && jsx(IconWrapper, {
234
+ breakpoint: breakpoint,
235
+ hasTitleBox: hasTitleBox
236
+ }, jsx(SpinnerIcon, {
237
+ testId: "media-card-loading"
238
+ })), renderImageRenderer && !!cardPreview && jsx(ImageRenderer, {
239
+ cardPreview: cardPreview,
240
+ mediaType: (metadata === null || metadata === void 0 ? void 0 : metadata.mediaType) || 'unknown',
241
+ alt: alt,
242
+ resizeMode: resizeMode,
243
+ onDisplayImage: onDisplayImage,
244
+ onImageLoad: handleOnImageLoad,
245
+ onImageError: handleOnImageError,
246
+ nativeLazyLoad: nativeLazyLoad,
247
+ forceSyncDisplay: forceSyncDisplay
248
+ }), renderPlayButton && jsx(IconWrapper, {
249
+ breakpoint: breakpoint,
250
+ hasTitleBox: hasTitleBox
251
+ }, jsx(PlayButton, null)), renderBlanket && jsx(Blanket, {
252
+ isFixed: isFixedBlanket
253
+ }), renderTitleBox && name && jsx(TitleBox, {
254
+ name: name,
255
+ createdAt: createdAt,
256
+ breakpoint: breakpoint,
257
+ titleBoxIcon: titleBoxIcon,
258
+ titleBoxBgColor: titleBoxBgColor
259
+ }), renderFailedTitleBox && jsx(FailedTitleBox, {
260
+ breakpoint: breakpoint,
261
+ customMessage: customTitleMessage
262
+ }), renderProgressBar && jsx(ProgressBar, {
263
+ progress: progress,
264
+ breakpoint: breakpoint,
265
+ positionBottom: !hasTitleBox
266
+ }), renderTickBox && jsx(TickBox, {
267
+ selected: selected
268
+ })), disableOverlay || !actions || actions.length === 0 ? null : jsx(ActionsBar, {
269
+ actions: actionsWithDetails
270
+ }));
271
+ return jsx(Wrapper, {
272
+ testId: testId || 'media-card-view',
273
+ dimensions: dimensions,
274
+ appearance: appearance,
275
+ onClick: onClick,
276
+ onMouseEnter: onMouseEnter,
277
+ innerRef: divRef,
278
+ breakpoint: breakpoint,
279
+ mediaCardCursor: mediaCardCursor,
280
+ disableOverlay: !!disableOverlay,
281
+ selected: !!selected,
282
+ displayBackground: shouldDisplayBackground,
283
+ isPlayButtonClickable: isPlayButtonClickable,
284
+ isTickBoxSelectable: isTickBoxSelectable,
285
+ shouldDisplayTooltip: shouldDisplayTooltip
286
+ }, shouldDisplayTooltip ? jsx(Tooltip, {
287
+ content: name,
288
+ position: "bottom",
289
+ tag: "div"
290
+ }, content) : content);
291
+ };
292
+ export var CardViewV2 = withAnalyticsEvents({
293
+ onClick: createAndFireMediaCardEvent({
294
+ eventType: 'ui',
295
+ action: 'clicked',
296
+ actionSubject: 'mediaCard',
297
+ attributes: {}
298
+ })
299
+ })(CardViewV2Base);
@@ -103,7 +103,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
103
103
  ErrorBoundary = _this$state.ErrorBoundary;
104
104
  var analyticsContext = {
105
105
  packageVersion: "@atlaskit/media-card",
106
- packageName: "77.0.2",
106
+ packageName: "77.1.0",
107
107
  componentName: 'mediaInlineCard',
108
108
  component: 'mediaInlineCard'
109
109
  };
@@ -69,7 +69,7 @@ var WrappedMediaInlineAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Com
69
69
  _classCallCheck(this, WrappedMediaInlineAnalyticsErrorBoundary);
70
70
  _this = _super.call(this, props);
71
71
  _defineProperty(_assertThisInitialized(_this), "fireOperationalEvent", function (error, info) {
72
- var _window, _window$navigator;
72
+ var _window;
73
73
  var _this$props = _this.props,
74
74
  _this$props$data = _this$props.data,
75
75
  data = _this$props$data === void 0 ? {} : _this$props$data,
@@ -79,7 +79,7 @@ var WrappedMediaInlineAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Com
79
79
  action: 'failed',
80
80
  actionSubject: 'mediaInlineRender',
81
81
  attributes: _objectSpread({
82
- browserInfo: (_window = window) !== null && _window !== void 0 && (_window$navigator = _window.navigator) !== null && _window$navigator !== void 0 && _window$navigator.userAgent ? window.navigator.userAgent : 'unknown',
82
+ browserInfo: (_window = window) !== null && _window !== void 0 && (_window = _window.navigator) !== null && _window !== void 0 && _window.userAgent ? window.navigator.userAgent : 'unknown',
83
83
  error: error,
84
84
  failReason: 'unexpected-error',
85
85
  info: info
@@ -117,8 +117,8 @@ export var getErrorTraceContext = function getErrorTraceContext(error) {
117
117
  var _error$secondaryError;
118
118
  return (_error$secondaryError = error.secondaryError.metadata) === null || _error$secondaryError === void 0 ? void 0 : _error$secondaryError.traceContext;
119
119
  } else if (isMediaFileStateError(error.secondaryError)) {
120
- var _error$secondaryError2, _error$secondaryError3;
121
- return (_error$secondaryError2 = error.secondaryError.details) === null || _error$secondaryError2 === void 0 ? void 0 : (_error$secondaryError3 = _error$secondaryError2.metadata) === null || _error$secondaryError3 === void 0 ? void 0 : _error$secondaryError3.traceContext;
120
+ var _error$secondaryError2;
121
+ return (_error$secondaryError2 = error.secondaryError.details) === null || _error$secondaryError2 === void 0 || (_error$secondaryError2 = _error$secondaryError2.metadata) === null || _error$secondaryError2 === void 0 ? void 0 : _error$secondaryError2.traceContext;
122
122
  }
123
123
  }
124
124
  };
@@ -127,8 +127,8 @@ export var getRenderErrorRequestMetadata = function getRenderErrorRequestMetadat
127
127
  if (isRequestError(error.secondaryError)) {
128
128
  return error.secondaryError.metadata;
129
129
  } else if (isMediaFileStateError(error.secondaryError)) {
130
- var _error$secondaryError4;
131
- return (_error$secondaryError4 = error.secondaryError.details) === null || _error$secondaryError4 === void 0 ? void 0 : _error$secondaryError4.metadata;
130
+ var _error$secondaryError3;
131
+ return (_error$secondaryError3 = error.secondaryError.details) === null || _error$secondaryError3 === void 0 ? void 0 : _error$secondaryError3.metadata;
132
132
  }
133
133
  }
134
134
  };
@@ -15,15 +15,15 @@ export var MockIntersectionObserver = /*#__PURE__*/function () {
15
15
  // eslint-disable-next-line @typescript-eslint/no-this-alias
16
16
  var outerThis = this;
17
17
  this.mockObserver = /*#__PURE__*/function () {
18
- function _class2(callback) {
19
- _classCallCheck(this, _class2);
18
+ function _class3(callback) {
19
+ _classCallCheck(this, _class3);
20
20
  _defineProperty(this, "observe", observe !== null && observe !== void 0 ? observe : noop);
21
21
  _defineProperty(this, "unobserve", noop);
22
22
  _defineProperty(this, "disconnect", disconnect !== null && disconnect !== void 0 ? disconnect : noop);
23
23
  outerThis.callback = callback;
24
24
  outerThis.mockObserverInstance = this;
25
25
  }
26
- return _createClass(_class2);
26
+ return _createClass(_class3);
27
27
  }();
28
28
  }
29
29
  }, {
@@ -7,7 +7,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
7
7
  import { MediaCardError } from '../errors';
8
8
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
9
9
  var packageName = "@atlaskit/media-card";
10
- var packageVersion = "77.0.2";
10
+ var packageVersion = "77.1.0";
11
11
  var concurrentExperience;
12
12
  var getExperience = function getExperience(id) {
13
13
  if (!concurrentExperience) {
@@ -0,0 +1,44 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/react';
3
+ import React, { MouseEvent } from 'react';
4
+ import { MessageDescriptor } from 'react-intl-next';
5
+ import { MediaItemType, FileDetails } from '@atlaskit/media-client';
6
+ import { WithAnalyticsEventsProps, UIAnalyticsEvent } from '@atlaskit/analytics-next';
7
+ import { SharedCardProps, CardStatus, CardPreview, MediaCardCursor } from '../../types';
8
+ import { MediaCardError } from '../../errors';
9
+ export interface CardViewV2OwnProps extends SharedCardProps {
10
+ readonly status: CardStatus;
11
+ readonly mediaItemType: MediaItemType;
12
+ readonly mediaCardCursor?: MediaCardCursor;
13
+ readonly metadata?: FileDetails;
14
+ readonly error?: MediaCardError;
15
+ readonly onClick?: (event: React.MouseEvent<HTMLDivElement>, analyticsEvent?: UIAnalyticsEvent) => void;
16
+ readonly onMouseEnter?: (event: MouseEvent<HTMLDivElement>) => void;
17
+ readonly onDisplayImage?: () => void;
18
+ readonly cardPreview?: CardPreview;
19
+ readonly progress?: number;
20
+ readonly innerRef?: (instance: HTMLDivElement | null) => void;
21
+ readonly onImageLoad?: (cardPreview: CardPreview) => void;
22
+ readonly onImageError?: (cardPreview: CardPreview) => void;
23
+ readonly nativeLazyLoad?: boolean;
24
+ readonly forceSyncDisplay?: boolean;
25
+ disableAnimation?: boolean;
26
+ shouldHideTooltip?: boolean;
27
+ }
28
+ export type CardViewV2Props = CardViewV2OwnProps & WithAnalyticsEventsProps;
29
+ export interface RenderConfigByStatusV2 {
30
+ renderTypeIcon?: boolean;
31
+ iconMessage?: JSX.Element;
32
+ renderImageRenderer?: boolean;
33
+ renderPlayButton?: boolean;
34
+ renderTitleBox?: boolean;
35
+ renderBlanket?: boolean;
36
+ isFixedBlanket?: boolean;
37
+ renderProgressBar?: boolean;
38
+ renderSpinner?: boolean;
39
+ renderFailedTitleBox?: boolean;
40
+ renderTickBox?: boolean;
41
+ customTitleMessage?: MessageDescriptor;
42
+ }
43
+ export declare const CardViewV2Base: ({ innerRef, onImageLoad, onImageError, dimensions, appearance, onClick, onMouseEnter, testId, metadata, status, selected, selectable, cardPreview, mediaCardCursor, shouldHideTooltip, progress, alt, resizeMode, onDisplayImage, nativeLazyLoad, forceSyncDisplay, actions, disableOverlay, titleBoxBgColor, titleBoxIcon, error, disableAnimation, }: CardViewV2Props) => jsx.JSX.Element;
44
+ export declare const CardViewV2: React.ForwardRefExoticComponent<Omit<CardViewV2Props, keyof WithAnalyticsEventsProps> & React.RefAttributes<any>>;
@@ -0,0 +1,44 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/react';
3
+ import React, { MouseEvent } from 'react';
4
+ import { MessageDescriptor } from 'react-intl-next';
5
+ import { MediaItemType, FileDetails } from '@atlaskit/media-client';
6
+ import { WithAnalyticsEventsProps, UIAnalyticsEvent } from '@atlaskit/analytics-next';
7
+ import { SharedCardProps, CardStatus, CardPreview, MediaCardCursor } from '../../types';
8
+ import { MediaCardError } from '../../errors';
9
+ export interface CardViewV2OwnProps extends SharedCardProps {
10
+ readonly status: CardStatus;
11
+ readonly mediaItemType: MediaItemType;
12
+ readonly mediaCardCursor?: MediaCardCursor;
13
+ readonly metadata?: FileDetails;
14
+ readonly error?: MediaCardError;
15
+ readonly onClick?: (event: React.MouseEvent<HTMLDivElement>, analyticsEvent?: UIAnalyticsEvent) => void;
16
+ readonly onMouseEnter?: (event: MouseEvent<HTMLDivElement>) => void;
17
+ readonly onDisplayImage?: () => void;
18
+ readonly cardPreview?: CardPreview;
19
+ readonly progress?: number;
20
+ readonly innerRef?: (instance: HTMLDivElement | null) => void;
21
+ readonly onImageLoad?: (cardPreview: CardPreview) => void;
22
+ readonly onImageError?: (cardPreview: CardPreview) => void;
23
+ readonly nativeLazyLoad?: boolean;
24
+ readonly forceSyncDisplay?: boolean;
25
+ disableAnimation?: boolean;
26
+ shouldHideTooltip?: boolean;
27
+ }
28
+ export type CardViewV2Props = CardViewV2OwnProps & WithAnalyticsEventsProps;
29
+ export interface RenderConfigByStatusV2 {
30
+ renderTypeIcon?: boolean;
31
+ iconMessage?: JSX.Element;
32
+ renderImageRenderer?: boolean;
33
+ renderPlayButton?: boolean;
34
+ renderTitleBox?: boolean;
35
+ renderBlanket?: boolean;
36
+ isFixedBlanket?: boolean;
37
+ renderProgressBar?: boolean;
38
+ renderSpinner?: boolean;
39
+ renderFailedTitleBox?: boolean;
40
+ renderTickBox?: boolean;
41
+ customTitleMessage?: MessageDescriptor;
42
+ }
43
+ export declare const CardViewV2Base: ({ innerRef, onImageLoad, onImageError, dimensions, appearance, onClick, onMouseEnter, testId, metadata, status, selected, selectable, cardPreview, mediaCardCursor, shouldHideTooltip, progress, alt, resizeMode, onDisplayImage, nativeLazyLoad, forceSyncDisplay, actions, disableOverlay, titleBoxBgColor, titleBoxIcon, error, disableAnimation, }: CardViewV2Props) => jsx.JSX.Element;
44
+ export declare const CardViewV2: React.ForwardRefExoticComponent<Omit<CardViewV2Props, keyof WithAnalyticsEventsProps> & React.RefAttributes<any>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "77.0.2",
3
+ "version": "77.1.0",
4
4
  "description": "Includes all media card related components, CardView, CardViewSmall, Card...",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -38,7 +38,7 @@
38
38
  "dependencies": {
39
39
  "@atlaskit/analytics-next": "^9.1.0",
40
40
  "@atlaskit/dropdown-menu": "^11.14.0",
41
- "@atlaskit/editor-shared-styles": "^2.7.0",
41
+ "@atlaskit/editor-shared-styles": "^2.8.0",
42
42
  "@atlaskit/icon": "^21.12.0",
43
43
  "@atlaskit/media-client": "^24.0.0",
44
44
  "@atlaskit/media-client-react": "^1.0.0",
@@ -46,7 +46,7 @@
46
46
  "@atlaskit/media-ui": "^25.0.0",
47
47
  "@atlaskit/media-viewer": "^48.1.0",
48
48
  "@atlaskit/platform-feature-flags": "^0.2.2",
49
- "@atlaskit/spinner": "^15.5.0",
49
+ "@atlaskit/spinner": "^15.6.0",
50
50
  "@atlaskit/theme": "^12.6.0",
51
51
  "@atlaskit/tokens": "^1.25.0",
52
52
  "@atlaskit/tooltip": "^17.8.0",