@atlaskit/media-card 79.0.12 → 79.0.13

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 (63) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/card/card.js +1 -1
  3. package/dist/cjs/card/cardView.js +10 -5
  4. package/dist/cjs/card/externalImageCard.js +1 -0
  5. package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
  6. package/dist/cjs/card/svgView/svgView.js +2 -1
  7. package/dist/cjs/card/svgView/svgViewV2.js +64 -0
  8. package/dist/cjs/card/ui/imageRenderer/helpers.js +76 -0
  9. package/dist/cjs/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
  10. package/dist/cjs/card/ui/imageRenderer/imageRendererV2.js +87 -0
  11. package/dist/cjs/card/ui/imageRenderer/index.js +14 -0
  12. package/dist/cjs/card/ui/imageRenderer/types.js +5 -0
  13. package/dist/cjs/card/ui/imageRenderer/wrapper.compiled.css +7 -0
  14. package/dist/cjs/card/ui/imageRenderer/wrapper.js +21 -0
  15. package/dist/cjs/inline/loader.js +1 -1
  16. package/dist/cjs/utils/ufoExperiences.js +1 -1
  17. package/dist/es2019/card/card.js +1 -1
  18. package/dist/es2019/card/cardView.js +10 -5
  19. package/dist/es2019/card/externalImageCard.js +1 -0
  20. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  21. package/dist/es2019/card/svgView/svgView.js +2 -1
  22. package/dist/es2019/card/svgView/svgViewV2.js +57 -0
  23. package/dist/es2019/card/ui/imageRenderer/helpers.js +73 -0
  24. package/dist/es2019/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
  25. package/dist/es2019/card/ui/imageRenderer/imageRendererV2.js +68 -0
  26. package/dist/es2019/card/ui/imageRenderer/index.js +7 -0
  27. package/dist/es2019/card/ui/imageRenderer/types.js +1 -0
  28. package/dist/es2019/card/ui/imageRenderer/wrapper.compiled.css +7 -0
  29. package/dist/es2019/card/ui/imageRenderer/wrapper.js +11 -0
  30. package/dist/es2019/inline/loader.js +1 -1
  31. package/dist/es2019/utils/ufoExperiences.js +1 -1
  32. package/dist/esm/card/card.js +1 -1
  33. package/dist/esm/card/cardView.js +10 -5
  34. package/dist/esm/card/externalImageCard.js +1 -0
  35. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  36. package/dist/esm/card/svgView/svgView.js +2 -1
  37. package/dist/esm/card/svgView/svgViewV2.js +57 -0
  38. package/dist/esm/card/ui/imageRenderer/helpers.js +70 -0
  39. package/dist/esm/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
  40. package/dist/esm/card/ui/imageRenderer/imageRendererV2.js +77 -0
  41. package/dist/esm/card/ui/imageRenderer/index.js +7 -0
  42. package/dist/esm/card/ui/imageRenderer/types.js +1 -0
  43. package/dist/esm/card/ui/imageRenderer/wrapper.compiled.css +7 -0
  44. package/dist/esm/card/ui/imageRenderer/wrapper.js +12 -0
  45. package/dist/esm/inline/loader.js +1 -1
  46. package/dist/esm/utils/ufoExperiences.js +1 -1
  47. package/dist/types/card/cardView.d.ts +2 -2
  48. package/dist/types/card/svgView/svgViewV2.d.ts +7 -0
  49. package/dist/types/card/ui/imageRenderer/helpers.d.ts +3 -0
  50. package/dist/types/card/ui/imageRenderer/imageRenderer.d.ts +2 -14
  51. package/dist/types/card/ui/imageRenderer/imageRendererV2.d.ts +3 -0
  52. package/dist/types/card/ui/imageRenderer/index.d.ts +3 -0
  53. package/dist/types/card/ui/imageRenderer/types.d.ts +18 -0
  54. package/dist/types/card/ui/imageRenderer/wrapper.d.ts +4 -0
  55. package/dist/types-ts4.5/card/cardView.d.ts +2 -2
  56. package/dist/types-ts4.5/card/svgView/svgViewV2.d.ts +7 -0
  57. package/dist/types-ts4.5/card/ui/imageRenderer/helpers.d.ts +3 -0
  58. package/dist/types-ts4.5/card/ui/imageRenderer/imageRenderer.d.ts +2 -14
  59. package/dist/types-ts4.5/card/ui/imageRenderer/imageRendererV2.d.ts +3 -0
  60. package/dist/types-ts4.5/card/ui/imageRenderer/index.d.ts +3 -0
  61. package/dist/types-ts4.5/card/ui/imageRenderer/types.d.ts +18 -0
  62. package/dist/types-ts4.5/card/ui/imageRenderer/wrapper.d.ts +4 -0
  63. package/package.json +7 -4
@@ -0,0 +1,73 @@
1
+ export const calculateDimensions = (imgElement, parentElement, resizeMode) => {
2
+ const {
3
+ naturalWidth,
4
+ width,
5
+ naturalHeight,
6
+ height
7
+ } = imgElement;
8
+ // Firefox & Safari can't always read the "natural" dimensions correctly.
9
+ // When these are undefined or zero, we replace them with the rendered values
10
+ const imgWidth = naturalWidth || width;
11
+ const imgHeight = naturalHeight || height;
12
+ const {
13
+ width: parentWidth,
14
+ height: parentHeight
15
+ } = parentElement.getBoundingClientRect();
16
+ if (resizeMode === 'fit' || resizeMode === 'full-fit') {
17
+ return {
18
+ maxWidth: `min(100%, ${imgWidth}px)`,
19
+ maxHeight: `min(100%, ${imgHeight}px)`
20
+ };
21
+ }
22
+ const imgRatio = imgWidth / imgHeight;
23
+ const cardRatio = parentWidth / parentHeight;
24
+ const isImageLandscapier = imgRatio > cardRatio;
25
+ if (resizeMode === 'stretchy-fit') {
26
+ if (isImageLandscapier) {
27
+ return {
28
+ width: '100%',
29
+ maxHeight: '100%'
30
+ };
31
+ } else {
32
+ return {
33
+ height: '100%',
34
+ maxWidth: '100%'
35
+ };
36
+ }
37
+ }
38
+ if (resizeMode === 'crop') {
39
+ if (isImageLandscapier) {
40
+ return {
41
+ height: imgHeight,
42
+ maxHeight: '100%'
43
+ };
44
+ } else {
45
+ return {
46
+ width: imgWidth,
47
+ maxWidth: '100%'
48
+ };
49
+ }
50
+ }
51
+ return {};
52
+ };
53
+ export const calculateInitialDimensions = resizeMode => {
54
+ if (resizeMode === 'fit' || resizeMode === 'full-fit') {
55
+ return {
56
+ maxWidth: `100%`,
57
+ maxHeight: `100%`
58
+ };
59
+ }
60
+ if (resizeMode === 'stretchy-fit') {
61
+ // assume the image is landscape
62
+ return {
63
+ width: '100%',
64
+ maxHeight: '100%'
65
+ };
66
+ }
67
+
68
+ // resizeMode === 'crop'
69
+ // assume the image is landscape
70
+ return {
71
+ width: '100%'
72
+ };
73
+ };
@@ -0,0 +1,2 @@
1
+ ._5ral1f51{object-fit:contain}
2
+ ._bfhku67f{background-color:#fff}
@@ -0,0 +1,68 @@
1
+ /* imageRendererV2.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./imageRendererV2.compiled.css";
3
+ import { ax, ix } from "@compiled/react/runtime";
4
+ import React, { useState, useRef, useEffect } from 'react';
5
+ import { calculateDimensions, calculateInitialDimensions } from './helpers';
6
+ import { useCurrentValueRef } from '../../../utils/useCurrentValueRef';
7
+ import { ImageRendererWrapper } from './wrapper';
8
+ import { isFileIdentifier } from '@atlaskit/media-client';
9
+ const baseStyles = null;
10
+ const backgroundStyles = null;
11
+ export const ImageRenderer = ({
12
+ cardPreview,
13
+ alt = '',
14
+ resizeMode = 'crop',
15
+ onImageLoad,
16
+ onImageError,
17
+ onDisplayImage,
18
+ mediaType,
19
+ nativeLazyLoad,
20
+ forceSyncDisplay,
21
+ identifier,
22
+ wrapperRef,
23
+ useWhiteBackground,
24
+ testId
25
+ }) => {
26
+ const onDisplayImageRef = useCurrentValueRef(onDisplayImage);
27
+ useEffect(() => {
28
+ if (mediaType === 'image') {
29
+ var _onDisplayImageRef$cu;
30
+ (_onDisplayImageRef$cu = onDisplayImageRef.current) === null || _onDisplayImageRef$cu === void 0 ? void 0 : _onDisplayImageRef$cu.call(onDisplayImageRef);
31
+ }
32
+ }, [mediaType, onDisplayImageRef]);
33
+ const [didRender, setDidRender] = useState(false);
34
+ const [resolvedDimensions, setResolvedDimensions] = useState(calculateInitialDimensions(resizeMode));
35
+ const imgRef = useRef(null);
36
+ const onLoad = evt => {
37
+ wrapperRef.current && setResolvedDimensions(calculateDimensions(evt.currentTarget, wrapperRef.current, resizeMode));
38
+ setDidRender(true);
39
+ cardPreview && (onImageLoad === null || onImageLoad === void 0 ? void 0 : onImageLoad(cardPreview));
40
+ };
41
+ const onError = () => {
42
+ onImageError && cardPreview && onImageError(cardPreview);
43
+ };
44
+ useEffect(() => {
45
+ if (imgRef.current && wrapperRef.current && imgRef.current) {
46
+ setResolvedDimensions(calculateDimensions(imgRef.current, wrapperRef.current, resizeMode));
47
+ }
48
+ }, [resizeMode, wrapperRef]);
49
+ return cardPreview ? /*#__PURE__*/React.createElement(ImageRendererWrapper, null, /*#__PURE__*/React.createElement("img", {
50
+ ref: imgRef,
51
+ "data-testid": testId,
52
+ "data-fileid": isFileIdentifier(identifier) ? identifier.id : null,
53
+ "data-filecollection": isFileIdentifier(identifier) ? identifier.collectionName : null,
54
+ "data-resizemode": resizeMode,
55
+ "data-source": cardPreview.source,
56
+ src: cardPreview.dataURI,
57
+ alt: alt,
58
+ onLoad: onLoad,
59
+ onError: onError,
60
+ loading: nativeLazyLoad ? 'lazy' : undefined,
61
+ style: {
62
+ visibility: didRender || forceSyncDisplay ? 'visible' : 'hidden',
63
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
64
+ ...resolvedDimensions
65
+ },
66
+ className: ax(["_5ral1f51", useWhiteBackground && "_bfhku67f"])
67
+ })) : null;
68
+ };
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { ImageRenderer as ImageRendererV1 } from './imageRenderer';
3
+ import { ImageRenderer as ImageRendererV2 } from './imageRendererV2';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+ export const ImageRenderer = props => {
6
+ return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(ImageRendererV2, props) : /*#__PURE__*/React.createElement(ImageRendererV1, props);
7
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ ._1bah1h6o{justify-content:center}
2
+ ._1bsb1osq{width:100%}
3
+ ._1e0c1txw{display:flex}
4
+ ._2lx21bp4{flex-direction:column}
5
+ ._4cvr1h6o{align-items:center}
6
+ ._4t3i1osq{height:100%}
7
+ ._kqswstnw{position:absolute}
@@ -0,0 +1,11 @@
1
+ /* wrapper.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./wrapper.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ const wrapperStyles = null;
6
+ export const ImageRendererWrapper = ({
7
+ children
8
+ }) => /*#__PURE__*/React.createElement("div", {
9
+ "data-testid": "ImageRendererWrapper",
10
+ className: ax(["_kqswstnw _1bsb1osq _4t3i1osq _1e0c1txw _2lx21bp4 _1bah1h6o _4cvr1h6o"])
11
+ }, children);
@@ -37,7 +37,7 @@ export default class MediaInlineCardLoader extends React.PureComponent {
37
37
  } = this.state;
38
38
  const analyticsContext = {
39
39
  packageVersion: "@atlaskit/media-card",
40
- packageName: "79.0.12",
40
+ packageName: "79.0.13",
41
41
  componentName: 'mediaInlineCard',
42
42
  component: 'mediaInlineCard'
43
43
  };
@@ -5,7 +5,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
5
5
  import { MediaCardError } from '../errors';
6
6
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
7
7
  const packageName = "@atlaskit/media-card";
8
- const packageVersion = "79.0.12";
8
+ const packageVersion = "79.0.13";
9
9
  const SAMPLE_RATE = 0.05;
10
10
  let concurrentExperience;
11
11
  const getExperience = id => {
@@ -11,7 +11,7 @@ import { startResourceObserver, setAnalyticsContext } from '../utils/mediaPerfor
11
11
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
12
12
  import UFOLabel from '@atlaskit/react-ufo/label';
13
13
  var packageName = "@atlaskit/media-card";
14
- var packageVersion = "79.0.12";
14
+ var packageVersion = "79.0.13";
15
15
  export var CardBase = function CardBase(_ref) {
16
16
  var identifier = _ref.identifier,
17
17
  otherProps = _objectWithoutProperties(_ref, _excluded);
@@ -3,6 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
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
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
5
  import React, { useEffect, useState, useRef, useMemo } from 'react';
6
+ import { isFileIdentifier } from '@atlaskit/media-client';
6
7
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
7
8
  import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
8
9
  import SpinnerIcon from '@atlaskit/spinner';
@@ -10,7 +11,7 @@ import Tooltip from '@atlaskit/tooltip';
10
11
  import { useMergeRefs } from 'use-callback-ref';
11
12
  import { messages } from '@atlaskit/media-ui';
12
13
  import { createAndFireMediaCardEvent } from '../utils/analytics';
13
- import { ImageRenderer } from './ui/imageRenderer/imageRenderer';
14
+ import { ImageRenderer } from './ui/imageRenderer';
14
15
  import { TitleBox } from './ui/titleBox/titleBox';
15
16
  import { FailedTitleBox } from './ui/titleBox/failedTitleBox';
16
17
  import { ProgressBar } from './ui/progressBar/progressBar';
@@ -27,6 +28,7 @@ import { useBreakpoint } from './useBreakpoint';
27
28
  import OpenMediaViewerButton from './ui/openMediaViewerButton/openMediaViewerButton';
28
29
  import { useCurrentValueRef } from '../utils/useCurrentValueRef';
29
30
  import { SvgView } from './svgView';
31
+ import { fg } from '@atlaskit/platform-feature-flags';
30
32
  export var CardViewBase = function CardViewBase(_ref) {
31
33
  var identifier = _ref.identifier,
32
34
  _ref$innerRef = _ref.innerRef,
@@ -235,7 +237,8 @@ export var CardViewBase = function CardViewBase(_ref) {
235
237
  onSvgLoad === null || onSvgLoad === void 0 || onSvgLoad();
236
238
  };
237
239
  var contents = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ImageContainer, {
238
- centerElements: didSvgRender,
240
+ centerElements: didSvgRender && !fg('platform_media_card_image_render') // The whole centerElements styles can go after removing the flag
241
+ ,
239
242
  testId: fileCardImageViewSelector,
240
243
  mediaName: name,
241
244
  status: status,
@@ -256,13 +259,13 @@ export var CardViewBase = function CardViewBase(_ref) {
256
259
  }, /*#__PURE__*/React.createElement(SpinnerIcon, {
257
260
  testId: "media-card-loading",
258
261
  interactionName: "media-card-loading"
259
- })), renderSvgView && identifier && /*#__PURE__*/React.createElement(SvgView, {
262
+ })), renderSvgView && identifier && isFileIdentifier(identifier) && /*#__PURE__*/React.createElement(SvgView, {
260
263
  identifier: identifier,
261
264
  resizeMode: resizeMode || 'crop',
262
265
  onError: onSvgError,
263
266
  onLoad: onSvgLoadBase,
264
267
  wrapperRef: divRef
265
- }), renderImageRenderer && /*#__PURE__*/React.createElement(ImageRenderer, {
268
+ }), renderImageRenderer && identifier && /*#__PURE__*/React.createElement(ImageRenderer, {
266
269
  cardPreview: cardPreview,
267
270
  mediaType: (metadata === null || metadata === void 0 ? void 0 : metadata.mediaType) || 'unknown',
268
271
  alt: alt !== null && alt !== void 0 ? alt : name,
@@ -271,7 +274,9 @@ export var CardViewBase = function CardViewBase(_ref) {
271
274
  onImageLoad: handleOnImageLoad,
272
275
  onImageError: handleOnImageError,
273
276
  nativeLazyLoad: nativeLazyLoad,
274
- forceSyncDisplay: forceSyncDisplay
277
+ forceSyncDisplay: forceSyncDisplay,
278
+ identifier: identifier,
279
+ wrapperRef: divRef
275
280
  }), renderPlayButton && /*#__PURE__*/React.createElement(IconWrapper, {
276
281
  breakpoint: breakpoint,
277
282
  hasTitleBox: hasVisibleTitleBox
@@ -191,6 +191,7 @@ export var ExternalImageCard = function ExternalImageCard(_ref) {
191
191
 
192
192
  var mediaCardCursor = getMediaCardCursor(false, !!shouldOpenMediaViewer, status === 'error', !!cardPreview, metadata.mediaType);
193
193
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CardView, {
194
+ identifier: identifier,
194
195
  status: status,
195
196
  error: error,
196
197
  mediaItemType: identifier.mediaItemType,
@@ -80,7 +80,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
80
80
  }(React.Component);
81
81
  _defineProperty(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
82
82
  var packageName = "@atlaskit/media-card";
83
- var packageVersion = "79.0.12";
83
+ var packageVersion = "79.0.13";
84
84
 
85
85
  // @ts-ignore: [PIT-1685] Fails in post-office due to backwards incompatibility issue with React 18
86
86
  var MediaCardAnalyticsErrorBoundary = withMediaAnalyticsContext({
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { fg } from '@atlaskit/platform-feature-flags';
3
3
  import { SvgView as SvgViewCompiled } from './svgImage-compiled';
4
4
  import { SvgView as SvgViewEmotion } from './svgImage-emotion';
5
+ import { SvgView as SvgViewV2 } from './svgViewV2';
5
6
  export var SvgView = function SvgView(props) {
6
- return fg('platform_media_compiled') ? /*#__PURE__*/React.createElement(SvgViewCompiled, props) : /*#__PURE__*/React.createElement(SvgViewEmotion, props);
7
+ return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(SvgViewV2, props) : fg('platform_media_compiled') ? /*#__PURE__*/React.createElement(SvgViewCompiled, props) : /*#__PURE__*/React.createElement(SvgViewEmotion, props);
7
8
  };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
6
+ import { jsx } from '@emotion/react';
7
+ import { useMemo } from 'react';
8
+ import { MediaCardError } from '../../errors';
9
+ import { useResolveSvg, MediaSVGError } from '@atlaskit/media-svg';
10
+ import { ImageRenderer } from '../ui/imageRenderer/imageRendererV2';
11
+ var getErrorReason = function getErrorReason(svgReason) {
12
+ switch (svgReason) {
13
+ case 'img-error':
14
+ return 'svg-img-error';
15
+ case 'binary-fetch':
16
+ return 'svg-binary-fetch';
17
+ case 'blob-to-datauri':
18
+ return 'svg-blob-to-datauri';
19
+ default:
20
+ return 'svg-unknown-error';
21
+ }
22
+ };
23
+ export var SvgView = function SvgView(_ref) {
24
+ var identifier = _ref.identifier,
25
+ resizeMode = _ref.resizeMode,
26
+ onLoad = _ref.onLoad,
27
+ onError = _ref.onError,
28
+ wrapperRef = _ref.wrapperRef,
29
+ alt = _ref.alt;
30
+ var onSvgError = function onSvgError(err) {
31
+ var error = new MediaCardError(getErrorReason(err.primaryReason), err.secondaryError);
32
+ onError === null || onError === void 0 || onError(error);
33
+ };
34
+ var _useResolveSvg = useResolveSvg(identifier, onSvgError),
35
+ svgUrl = _useResolveSvg.svgUrl,
36
+ source = _useResolveSvg.source;
37
+ var cardPreview = useMemo(function () {
38
+ return svgUrl && source ? {
39
+ dataURI: svgUrl,
40
+ source: source
41
+ } : undefined;
42
+ }, [svgUrl, source]);
43
+ return cardPreview ? jsx(ImageRenderer, {
44
+ testId: "media-card-svg",
45
+ identifier: identifier,
46
+ cardPreview: cardPreview,
47
+ alt: alt,
48
+ resizeMode: resizeMode,
49
+ onImageLoad: onLoad,
50
+ onImageError: function onImageError() {
51
+ onSvgError(new MediaSVGError('img-error'));
52
+ },
53
+ wrapperRef: wrapperRef,
54
+ mediaType: "image",
55
+ useWhiteBackground: true
56
+ }) : null;
57
+ };
@@ -0,0 +1,70 @@
1
+ export var calculateDimensions = function calculateDimensions(imgElement, parentElement, resizeMode) {
2
+ var naturalWidth = imgElement.naturalWidth,
3
+ width = imgElement.width,
4
+ naturalHeight = imgElement.naturalHeight,
5
+ height = imgElement.height;
6
+ // Firefox & Safari can't always read the "natural" dimensions correctly.
7
+ // When these are undefined or zero, we replace them with the rendered values
8
+ var imgWidth = naturalWidth || width;
9
+ var imgHeight = naturalHeight || height;
10
+ var _parentElement$getBou = parentElement.getBoundingClientRect(),
11
+ parentWidth = _parentElement$getBou.width,
12
+ parentHeight = _parentElement$getBou.height;
13
+ if (resizeMode === 'fit' || resizeMode === 'full-fit') {
14
+ return {
15
+ maxWidth: "min(100%, ".concat(imgWidth, "px)"),
16
+ maxHeight: "min(100%, ".concat(imgHeight, "px)")
17
+ };
18
+ }
19
+ var imgRatio = imgWidth / imgHeight;
20
+ var cardRatio = parentWidth / parentHeight;
21
+ var isImageLandscapier = imgRatio > cardRatio;
22
+ if (resizeMode === 'stretchy-fit') {
23
+ if (isImageLandscapier) {
24
+ return {
25
+ width: '100%',
26
+ maxHeight: '100%'
27
+ };
28
+ } else {
29
+ return {
30
+ height: '100%',
31
+ maxWidth: '100%'
32
+ };
33
+ }
34
+ }
35
+ if (resizeMode === 'crop') {
36
+ if (isImageLandscapier) {
37
+ return {
38
+ height: imgHeight,
39
+ maxHeight: '100%'
40
+ };
41
+ } else {
42
+ return {
43
+ width: imgWidth,
44
+ maxWidth: '100%'
45
+ };
46
+ }
47
+ }
48
+ return {};
49
+ };
50
+ export var calculateInitialDimensions = function calculateInitialDimensions(resizeMode) {
51
+ if (resizeMode === 'fit' || resizeMode === 'full-fit') {
52
+ return {
53
+ maxWidth: "100%",
54
+ maxHeight: "100%"
55
+ };
56
+ }
57
+ if (resizeMode === 'stretchy-fit') {
58
+ // assume the image is landscape
59
+ return {
60
+ width: '100%',
61
+ maxHeight: '100%'
62
+ };
63
+ }
64
+
65
+ // resizeMode === 'crop'
66
+ // assume the image is landscape
67
+ return {
68
+ width: '100%'
69
+ };
70
+ };
@@ -0,0 +1,2 @@
1
+ ._5ral1f51{object-fit:contain}
2
+ ._bfhku67f{background-color:#fff}
@@ -0,0 +1,77 @@
1
+ /* imageRendererV2.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import "./imageRendererV2.compiled.css";
5
+ import { ax, ix } from "@compiled/react/runtime";
6
+ 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; }
7
+ 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; }
8
+ import React, { useState, useRef, useEffect } from 'react';
9
+ import { calculateDimensions, calculateInitialDimensions } from './helpers';
10
+ import { useCurrentValueRef } from '../../../utils/useCurrentValueRef';
11
+ import { ImageRendererWrapper } from './wrapper';
12
+ import { isFileIdentifier } from '@atlaskit/media-client';
13
+ var baseStyles = null;
14
+ var backgroundStyles = null;
15
+ export var ImageRenderer = function ImageRenderer(_ref) {
16
+ var cardPreview = _ref.cardPreview,
17
+ _ref$alt = _ref.alt,
18
+ alt = _ref$alt === void 0 ? '' : _ref$alt,
19
+ _ref$resizeMode = _ref.resizeMode,
20
+ resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
21
+ onImageLoad = _ref.onImageLoad,
22
+ onImageError = _ref.onImageError,
23
+ onDisplayImage = _ref.onDisplayImage,
24
+ mediaType = _ref.mediaType,
25
+ nativeLazyLoad = _ref.nativeLazyLoad,
26
+ forceSyncDisplay = _ref.forceSyncDisplay,
27
+ identifier = _ref.identifier,
28
+ wrapperRef = _ref.wrapperRef,
29
+ useWhiteBackground = _ref.useWhiteBackground,
30
+ testId = _ref.testId;
31
+ var onDisplayImageRef = useCurrentValueRef(onDisplayImage);
32
+ useEffect(function () {
33
+ if (mediaType === 'image') {
34
+ var _onDisplayImageRef$cu;
35
+ (_onDisplayImageRef$cu = onDisplayImageRef.current) === null || _onDisplayImageRef$cu === void 0 || _onDisplayImageRef$cu.call(onDisplayImageRef);
36
+ }
37
+ }, [mediaType, onDisplayImageRef]);
38
+ var _useState = useState(false),
39
+ _useState2 = _slicedToArray(_useState, 2),
40
+ didRender = _useState2[0],
41
+ setDidRender = _useState2[1];
42
+ var _useState3 = useState(calculateInitialDimensions(resizeMode)),
43
+ _useState4 = _slicedToArray(_useState3, 2),
44
+ resolvedDimensions = _useState4[0],
45
+ setResolvedDimensions = _useState4[1];
46
+ var imgRef = useRef(null);
47
+ var onLoad = function onLoad(evt) {
48
+ wrapperRef.current && setResolvedDimensions(calculateDimensions(evt.currentTarget, wrapperRef.current, resizeMode));
49
+ setDidRender(true);
50
+ cardPreview && (onImageLoad === null || onImageLoad === void 0 ? void 0 : onImageLoad(cardPreview));
51
+ };
52
+ var onError = function onError() {
53
+ onImageError && cardPreview && onImageError(cardPreview);
54
+ };
55
+ useEffect(function () {
56
+ if (imgRef.current && wrapperRef.current && imgRef.current) {
57
+ setResolvedDimensions(calculateDimensions(imgRef.current, wrapperRef.current, resizeMode));
58
+ }
59
+ }, [resizeMode, wrapperRef]);
60
+ return cardPreview ? /*#__PURE__*/React.createElement(ImageRendererWrapper, null, /*#__PURE__*/React.createElement("img", {
61
+ ref: imgRef,
62
+ "data-testid": testId,
63
+ "data-fileid": isFileIdentifier(identifier) ? identifier.id : null,
64
+ "data-filecollection": isFileIdentifier(identifier) ? identifier.collectionName : null,
65
+ "data-resizemode": resizeMode,
66
+ "data-source": cardPreview.source,
67
+ src: cardPreview.dataURI,
68
+ alt: alt,
69
+ onLoad: onLoad,
70
+ onError: onError,
71
+ loading: nativeLazyLoad ? 'lazy' : undefined,
72
+ style: _objectSpread({
73
+ visibility: didRender || forceSyncDisplay ? 'visible' : 'hidden'
74
+ }, resolvedDimensions),
75
+ className: ax(["_5ral1f51", useWhiteBackground && "_bfhku67f"])
76
+ })) : null;
77
+ };
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { ImageRenderer as ImageRendererV1 } from './imageRenderer';
3
+ import { ImageRenderer as ImageRendererV2 } from './imageRendererV2';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+ export var ImageRenderer = function ImageRenderer(props) {
6
+ return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(ImageRendererV2, props) : /*#__PURE__*/React.createElement(ImageRendererV1, props);
7
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ ._1bah1h6o{justify-content:center}
2
+ ._1bsb1osq{width:100%}
3
+ ._1e0c1txw{display:flex}
4
+ ._2lx21bp4{flex-direction:column}
5
+ ._4cvr1h6o{align-items:center}
6
+ ._4t3i1osq{height:100%}
7
+ ._kqswstnw{position:absolute}
@@ -0,0 +1,12 @@
1
+ /* wrapper.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./wrapper.compiled.css";
3
+ import * as React from 'react';
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ var wrapperStyles = null;
6
+ export var ImageRendererWrapper = function ImageRendererWrapper(_ref) {
7
+ var children = _ref.children;
8
+ return /*#__PURE__*/React.createElement("div", {
9
+ "data-testid": "ImageRendererWrapper",
10
+ className: ax(["_kqswstnw _1bsb1osq _4t3i1osq _1e0c1txw _2lx21bp4 _1bah1h6o _4cvr1h6o"])
11
+ }, children);
12
+ };
@@ -101,7 +101,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
101
101
  ErrorBoundary = _this$state.ErrorBoundary;
102
102
  var analyticsContext = {
103
103
  packageVersion: "@atlaskit/media-card",
104
- packageName: "79.0.12",
104
+ packageName: "79.0.13",
105
105
  componentName: 'mediaInlineCard',
106
106
  component: 'mediaInlineCard'
107
107
  };
@@ -8,7 +8,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
8
8
  import { MediaCardError } from '../errors';
9
9
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
10
10
  var packageName = "@atlaskit/media-card";
11
- var packageVersion = "79.0.12";
11
+ var packageVersion = "79.0.13";
12
12
  var SAMPLE_RATE = 0.05;
13
13
  var concurrentExperience;
14
14
  var getExperience = function getExperience(id) {
@@ -1,13 +1,13 @@
1
1
  import React, { type MouseEvent } from 'react';
2
2
  import { type MessageDescriptor } from 'react-intl-next';
3
- import { type MediaItemType, type FileDetails, type ImageResizeMode, type FileIdentifier } from '@atlaskit/media-client';
3
+ import { type MediaItemType, type FileDetails, type ImageResizeMode, type Identifier } from '@atlaskit/media-client';
4
4
  import { type WithAnalyticsEventsProps, type UIAnalyticsEvent } from '@atlaskit/analytics-next';
5
5
  import { type CardStatus, type MediaCardCursor, type CardDimensions, type TitleBoxIcon } from '../types';
6
6
  import { type MediaFilePreview } from '@atlaskit/media-file-preview';
7
7
  import { type CardAction } from './actions';
8
8
  import { type MediaCardError } from '../errors';
9
9
  export interface CardViewProps {
10
- readonly identifier?: FileIdentifier;
10
+ readonly identifier: Identifier;
11
11
  readonly disableOverlay?: boolean;
12
12
  readonly resizeMode?: ImageResizeMode;
13
13
  readonly dimensions: CardDimensions;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import { jsx } from '@emotion/react';
6
+ import { SvgViewProps } from './types';
7
+ export declare const SvgView: ({ identifier, resizeMode, onLoad, onError, wrapperRef, alt, }: SvgViewProps) => jsx.JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ import { type ImageResizeMode } from '@atlaskit/media-client';
2
+ export declare const calculateDimensions: (imgElement: HTMLImageElement, parentElement: HTMLElement, resizeMode: ImageResizeMode) => React.CSSProperties;
3
+ export declare const calculateInitialDimensions: (resizeMode: ImageResizeMode) => React.CSSProperties;
@@ -1,15 +1,3 @@
1
1
  import React from 'react';
2
- import { type MediaType, type ImageResizeMode } from '@atlaskit/media-client';
3
- import { type CardPreview } from '../../../types';
4
- export type ImageRendererProps = {
5
- readonly cardPreview?: CardPreview;
6
- readonly mediaType: MediaType;
7
- readonly alt?: string;
8
- readonly resizeMode?: ImageResizeMode;
9
- readonly onDisplayImage?: () => void;
10
- readonly onImageError?: (cardPreview: CardPreview) => void;
11
- readonly onImageLoad?: (cardPreview: CardPreview) => void;
12
- readonly nativeLazyLoad?: boolean;
13
- readonly forceSyncDisplay?: boolean;
14
- };
15
- export declare const ImageRenderer: React.FC<ImageRendererProps>;
2
+ import type { ImageRendererProps } from './types';
3
+ export declare const ImageRenderer: ({ cardPreview, alt, resizeMode, onImageLoad, onImageError, onDisplayImage, mediaType, nativeLazyLoad, forceSyncDisplay, }: ImageRendererProps) => React.JSX.Element;
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { ImageRendererProps } from './types';
3
+ export declare const ImageRenderer: ({ cardPreview, alt, resizeMode, onImageLoad, onImageError, onDisplayImage, mediaType, nativeLazyLoad, forceSyncDisplay, identifier, wrapperRef, useWhiteBackground, testId, }: ImageRendererProps) => JSX.Element | null;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { ImageRendererProps } from './types';
3
+ export declare const ImageRenderer: (props: ImageRendererProps) => React.JSX.Element;
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import { type MediaType, type ImageResizeMode, type Identifier } from '@atlaskit/media-client';
3
+ import { type CardPreview } from '../../../types';
4
+ export type ImageRendererProps = {
5
+ readonly cardPreview?: CardPreview;
6
+ readonly mediaType: MediaType;
7
+ readonly alt?: string;
8
+ readonly resizeMode?: ImageResizeMode;
9
+ readonly onDisplayImage?: () => void;
10
+ readonly onImageError?: (cardPreview: CardPreview) => void;
11
+ readonly onImageLoad?: (cardPreview: CardPreview) => void;
12
+ readonly nativeLazyLoad?: boolean;
13
+ readonly forceSyncDisplay?: boolean;
14
+ readonly wrapperRef: React.RefObject<HTMLDivElement>;
15
+ readonly identifier: Identifier;
16
+ readonly useWhiteBackground?: boolean;
17
+ readonly testId?: string;
18
+ };